「聚类分析」16聚类分析之KMeans算法与K中心点算法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了「聚类分析」16聚类分析之KMeans算法与K中心点算法相关的知识,希望对你有一定的参考价值。
参考技术A 1.聚类聚类属于无监督式学习。在无监督式学习中,训练样本的标记信息是未知的,算法通过对 无标记样本 的学习来揭示蕴含于数据中的性质和规律。聚类算法的任务是根据数据特征将数据集相似的数据划分到同一簇。
2.聚类分析
聚类分析是将物理的或者抽象的数据集合划分为多个类别的过程,聚类之后的每个类别中任意两个数据样本之间具有较高的相似度,而不同类别的数据样本之间具有较低的相似度。
3.聚类算法常用分类
①划分聚类方法
②层次聚类方法
③基于密度的聚类方法
④基于网格的聚类方法
4.聚类分析中相似度的计算方法
(1)连续型属性的相似度计算方法:欧式距离
(2)二值离散型属性的相似度计算方法
数据样本的二值离散型属性的取值情况:
(3)多值离散型属性的相似度计算方法:多值离散型属性转化为二值离散型属性
(4)混合类型属性的相似度计算方法
将属性按照类型分组,每个新的数据集中只包含一种类型的属性,然后对每个数据集进行单独的聚类分析,随后把混合类型的属性放在一起处理,进行一次聚类分析。
5.KMeans算法(划分法)
KMeans也称为K均值,是一种聚类算法。它可以根据数据特征将数据集分成K个不同的簇,簇的个数K是由用户指定的。KMeans算法基于 距离 来度量实例间的相似程度(与KNN算法一样,大多数问题采用欧氏距离),然后把较为相似的实例划分到同一簇。
(1)聚类的性能度量大致有以下两类:
①外部指标:将聚类结果与某个“参考模型”进行比较。
②内部指标:直接考察聚类结果而不利于参考模型。
(2)聚类算法的过程:
①随机选择k个点作为聚类中心;
②计算各个点到这k个点的距离;
③将对应的点聚到与它最近的这个聚类中心;
④重新计算聚类中心;
⑤比较当前聚类中心与前一次聚类中心,如果是同一个点,得到聚类结果,如果不是,则重复②③④⑤。
(3)聚类算法的实现:
【注】 模型效果评估指标说明:
1)inertias_:是K-Means模型对象的属性,它作为没有真实分类结果标签下的非监督式评估指标。表示样本到最近的聚类中心的距离总和。 值越小越好,越小表示样本在类间的分布越集中。
2)兰德指数(Rand index):需要给定实际类别信息C,假设n是聚类结果,a表示在C与K中都是同类别的元素对数,b表示在C与K中都是不同类别的元素对数,则兰德指数为:
RI取值范围为[0,1], 值越大意味着聚类结果与真实情况越吻合。
对于随机结果,RI并不能保证分数接近零。为了实现“在聚类结果随机产生的情况下,指标应该接近零”,调整兰德系数(Adjusted rand index)被提出,它具有更高的区分度:
ARI取值范围为[−1,1], 值越大意味着聚类结果与真实情况越吻合。 从广义的角度来讲,ARI衡量的是两个数据分布的吻合程度。
3)同质化得分(Homogeneity):如果所有的聚类都只包含属于单个类的成员的数据点,则聚类结果满足同质性。取值范围[0,1], 值越大意味着聚类结果与真实情况越符合。
4)完整性得分(Complenteness):如果作为给定类的成员的所有数据点是相同集群的元素,则聚类结果满足完整性。取值范围[0,1], 值越大意味着聚类结果与真实情况越符合。
5)v_meansure_score:同质化和完整性之间的谐波平均值,v=2*(同质化*完整性)/(同质化+完整性),取值范围[0,1], 值越大意味着聚类结果与真实情况越符合。
6.k中心点算法
(1)原理
①随机选取k个中心点;
②遍历所有数据,将每个数据划分到最近的中心点中;
③计算每个聚类的平均值,并作为新的中心点;
④重复②③,直到这k个中线点不再变化(收敛了),或执行了足够多的迭代。
(2)与KMeans算法对比
K-中心点聚类的 基本思想 和K-Means的思想相同,实质上是对K-means算法的优化和改进。在K-means中, 异常数据对其的算法过程会有较大的影响 。在K-means算法执行过程中,可以通过随机的方式选择初始质心,也只有初始时通过随机方式产生的质心才是实际需要聚簇集合的中心点,而后面通过不断迭代产生的新的质心很可能并不是在聚簇中的点。如果某些异常点距离质心相对较大时,很可能导致重新计算得到的质心偏离了聚簇的真实中心。
K-means聚类分析案例(一)
参考技术A 之前的笔记:
聚类介绍: 点这里
层次聚类分析案例(一):世界银行样本数据集
层次聚类分析案例(二):亚马逊雨林烧毁情况
层次聚类分析案例(三):基因聚类
食品消费模式是医学和营养学领域关注的一大热点。食物消费与个人的整体健康、食物的营养价值、购买食品的经济性和消费环境有关。这项分析涉及25个欧洲国家肉类和其他食品之间的关系。观察肉类和其他食品的相关性是很有意思的。这些数据包括:红肉、白肉、蛋类、牛奶、鱼类、谷类、淀粉类食品、坚果(包括豆类和油籽)、水果和蔬菜。
准备工作
为了应用k均值聚类,我们使用欧洲25个国家的蛋白质消费量数据集。
第1步:收集和描述数据
该任务使用名为protein的数据集,该数据集以标准格式存储在CSV格式的文件中,其中包含25行数据和10个变量。 数据获取路径
数值型变量如下:
RedMeat
WhiteMeat
Eggs
Milk
Fish
Cereals
Starch
Nuts
Fr&Veg
非数值型变量如下:
Country
具体实施步骤
以下为实现细节。
第2步:探索数据
让我们探索数据并理解变量间的关系。从导入名为Europenaprotein.csv的CSV文件开始,将该数据保存到protein数据框:
head()函数返回了一个向量、矩阵、表、数据框或函数首或尾的部分。将protein数据框传入head()函数。
结果如下:
第3步:聚类
开始在三个簇的基础上进行聚类。为了在初始阶段产生随机的簇数量,调用set.seed()函数。set.seed()函数能够产生随机数。
kmeans()函数能够在数据矩阵上执行k均值聚类。protein数据矩阵被当作一个对象传入该函数,该对象必须是数值型矩阵。centers=3代表初始化簇中心数量。因为簇的数量由一个数字指定,nstart=10定义了随机被选择的中心数。
结果如下:
接下来,生成簇指派列表。order()函数返回一个序列,以升序或者降序重新生成它的第一个参数。groupMeat数据框被当作一个数据框对象传入:
调用data.frame()函数,显示了国家和这些国家所处的簇:
结果如下:
plot()函数是一个绘制R对象的通用函数。参数类型指明了要被显示的图的种类。xlim参数的意思是参数应该被给定范围的边界,而不是一个范围。xlab和ylab提供了x轴和y轴各自的标题:
结果如下:
第4步:改进模型
接下来,在所有9个蛋白质组上进行聚类,并且7个簇已经被创建了。在散点图上不同颜色的点代表了吃白肉和红肉的国家。地理上临近的国家倾向于分到同一组。
center=7代表初始的聚类中心数量:
7个不同的聚类形成了。25个国家都一一被分配到了某一个簇中。
结果如下:
clustplot()函数创造了一个二变量的图,其中可以看到数据的可视化划分。所有观测值使用主成分以点的方式表示。在每个簇周围绘制椭圆形。protein数据框被当作对象传入:
结果如下:
另一个层次化形式展现的方法如下。这里使用agnes()函数。通过设置diss=FALSE,不相似度矩阵被用来计算原始数据。metric="euclidean"表明使用欧氏距离进行计算:
结果如下:
plot()画出图形:按回车可查看下一章图,共两张图。
结果如下:
cutree()函数切割树到几个组中,通过设定期望的组数量或者切割的高度来进行划分:
结果如下:
结果如下:
以上是关于「聚类分析」16聚类分析之KMeans算法与K中心点算法的主要内容,如果未能解决你的问题,请参考以下文章