利用Kmeans聚类分析两类问题
聚类分析是一种无监督的学习方法,根据一定条件将相对同质的样本归到一个类总(俗话说人以类聚,物以群分)
正式一点的:聚类是对点集进行考察并按照某种距离测度将他们聚成多个“簇”的过程。聚类的目标是使得同一簇内的点之间的距离较短,而不同簇中点之间的距离较大。
两种方法对比:
在K-means聚类中,是预先规定出要产生多少个类别的数量,再根据类别数量自动聚成相应的类。对K-means而言,首先是随机产生于类别数相同的初始点,然后判断每个点与初始点的距离,每个点选择最近的一个初始点,作为其类别。
当类别产生后,在计算各个类别的中心点,然后计算每个点到中心点的距离,并根据距离再次选择类别。当新类别产生后,再次根据中心点重复选择类别的过程,直到中心点的变化不再明显。最终根据中心点产生的类别,就是聚类的结果。正如图中所示,一组对象中需要生成三个类别,各个类别之间都自然聚焦在一起。
在层次聚类中,不需要规定出类别的数量,最终聚类的数量可以根据人为要求进行划分。对层次聚类,首先每个对象都是单独的类别,通过比较两两之间距离,首先把距离最小的两个对象聚成一类。接着把距离次小的聚成一类,然后就是不断重复按距离最小的原则,不断聚成一类的过程,直到所有对象都被聚成一类。
在层次聚类中,可以以一张树状图来表示聚类的过程,如果要讲对象分类的话,就可以从根节点触发,按照树状图的分叉情况,划分出不同的类别来。在图中,把一组对象分成了三个类别,可见这三个类别就是构成了树状图最开始的三个分支。
首先,随机选择K个对象,并且所选择的每个对象都代表一个组的初始均值或初始的组中心值;对剩余的每个对象,根据其与各个组初始均值的距离,将它们分配给最近的(最相似)小组;然后,重新计算每个小组新的均值;这个过程不断重复,直到所有的对象在K组分布中都找到离自己最近的组。
优点:容易实现。
缺点:可能收敛到局部最小值,在大规模数据集上收敛较慢;
先指定k,同时对异常值很敏感。
聚类技术在数据分析和数据化运营中的主要用途表现在:既可以直接作为模型对观察对象进行群体划分,为业务方的精细化运营提供具体的细分依据和相应的运营方案建议,又可在数据处理阶段用作数据探索的工具,包括发现离群点、孤立点,数据降维的手段和方法,通过聚类发现数据间的深层次的关系等。
不存在量纲上的差异,无需做标准化处理
聚类簇数为3,
各簇样本量分别为62,50,38
对比建模前后差异
以上为聚类效果的散点图,五角星为每个簇的簇中心
以上为原始数据的散点图,与聚类图对比,标记为1的与原始数据吻合,0和2存在一些错误分割,但还是比较一致
对比样本差异使用雷达图,导入pygal模块
雷达图无法通过plt.show展示,通过浏览器打开svg文件
重点在于选择最佳k值
当k在4附近,折线斜率的变动不是很大,故k为3,或4或5
k=2时轮廓系数最大
纵坐标首次为正时k=3
综合考虑以上3种,选择k=3
基于k值进行聚类
需要注意的是,由于对原数据做了标准化处理,簇中心不能直接使用cluster_centers_得到,返回的是原数据标准化后的中心,需要通过For循环重新找到原始数据下的簇中心,即五角星
可以得到高得分高命中率型诸如此类
再看四个指标上的差异,由于四个维度上量纲不一致,需要使用标准化后的中心点绘制雷达图
C2、C3得分没有差异,但命中率C2比C3高很多诸如此类结论