用聚类分析鸢尾花数据

Python013

用聚类分析鸢尾花数据,第1张

数据集用的是iris也就是一个记录鸢尾属植物品种的样本集,数据集中一共包含了150条记录,每个样本的包含它的萼片长度和宽度,花瓣的长度和宽度以及这个样本所属的具体品种。每个品种的样本量为50条。

因为要使用knn包进行聚类分析,则将列Species置为空,将此数据集作为测试数据集

第一种方法:层次聚类

层次聚类首先将每个样本单独作为一类,然后将不同类之间距离最近的进行合并,合并后重新计算类间距离。这个过程一直持续到将所有样本归为一类为止。

method表示计算哪种距离。method的取值有:

euclidean欧几里德距离,就是平方再开方。

maximum切比雪夫距离

manhattan绝对值距离

canberraLance 距离

minkowski明科夫斯基距离,使用时要指定p值

binary定性变量距离

从图中可以看到颜色越深表示样本间距离越近,大致上可以区分出三到四个区块,其样本之间比较接近。

然后使用hclust函数(d=dist,即样本间的距离矩阵,method为计算类间距离的方法),建立聚类模型,结果存clustemodel变量中,其中ward参数是将类间距离计算方法设置为离差平方和法。使用plot(clustemodel)可以绘制出聚类树图。如果我们希望将类别设为3类,可以使用cutree函数提取每个样本所属的类别。

最后我们来观察真实地类别和聚类之间的差别

发现virginica类错分了23个样本

最后我们计算3个组的中心点即实心圆,空心圆表示不同样本的位置

层次聚类的特点是:基于距离矩阵进行聚类,不需要原始数据,可用于不同形状的聚类,但它对于异常点非常敏感,对于数据规模较小的数据比较合适,否则计算量会很大,聚类后切分数组可根据业务知识,也可根据聚类树图的特点

第二种方法:K-means聚类

K均值聚类又称为动态聚类,它的计算方法较为简单,也不需要输入距离矩阵。首先要指定聚类的分类个数N,随机取N个样本作为初始类的中心,计算各样本与类中心的距离并进行归类,所有样本划分完成后重新计算类中心,重复这个过程直到类中心不再变化。

在R中使用kmeans函数进行K均值聚类,centers参数用来设置分类个数,nstart参数用来设置取随机初始中心的次数,其默认值为1,但取较多的次数可以改善聚类效果。clustemodel1$cluster可以用来提取每个样本所属的类别。

使用K均值聚类时需要注意,只有在类的平均值被定义的情况下才能使用,还要求事先给出分类个数。一种方法是先用层次聚类以决定个数,再用K均值聚类加以改进。或者以轮廓系数来判断分类个数。改善聚类的方法还包括对原始数据进行变换,如对数据进行降维后再实施聚类。

1.所有在对iris数据集分(聚)类研究中,setosa均可以完全正确分(聚)类,而另外两类则会出现不同程度的误差,这也是导致整个研究模型出现误差的原因;

2.在使用的三种分类研究方法中,决策树模型的效果最优,因此可以使用该方法进行鸢尾花数据集的分类预测研究。

1.在对鸢尾花数据集进行聚类时,K-means、K-medoids两种聚类方法的正确率相同,可见在数据集离群点和噪音不大的情况下,二者聚类效果基本相同,但当出现离群点和噪音时,应该考虑K-medoids聚类方法;

2.鸢尾花数据集进行聚类分析时,划分聚类效果优于层次聚类;

3.对于量纲不一致的数据,应进行标准化,但对于量纲一致的数据,标准化之后结果并不一定优于未标准化的数据得到的结果。

鸢尾的品种

鸢尾花,极具观赏价值,在全球大约有300多个品种,而我国就有60多种,鸢尾根据其地下茎的不同可以分为两大类:

鸢尾的宿根类

当看到鸢尾的地下部分为根状时,或者是为根茎状时,这就是宿根鸢尾。宿根鸢尾是一种多年生植物,它的叶子是剑形的,花茎处于直立状态,它最常见的就是德国鸢尾,黄鸢尾等。德国鸢尾的花是蓝色,白色,紫色等,绚丽多彩。而黄鸢尾就是黄色的。

宿根类鸢尾也有一种是地上部会在大多数品种因冬季来临而枯萎时它却保持绿色,所以称作常绿鸢尾。

鸢尾的球根类

当看到鸢尾的地下部分是球茎状时,这就是球根鸢尾。球根鸢尾喜好温暖,所以在温室下可以促进栽培,它包括荷兰鸢尾,黄色丹佛鸢尾,以及网脉鸢尾等,其色为,蓝色,紫色,白色等。

球根类鸢尾通过种球繁殖,一种求种植一年开花之后败落,在产生新的球,长子球,通过养殖,又会开花。