用聚类分析鸢尾花数据

作者: apricoter | 来源:发表于2019-02-06 11:50 被阅读17次

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

#导入数据
attach(iris)
#查看数据结构
str(iris)
#查看数据前3行
head(iris,3)

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

data<-iris[,-5]

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

#首先计算均值和标准差
mean<-sapply(data,mean)
sd<-sapply(data,sd)
#再将数据进行z-score标准化
scaledata<-scale(data,center=mean,scale=sd)
head(scaledata,3)

method表示计算哪种距离。method的取值有:
euclidean 欧几里德距离,就是平方再开方。
maximum 切比雪夫距离
manhattan 绝对值距离
canberra Lance 距离
minkowski 明科夫斯基距离,使用时要指定p值
binary 定性变量距离

#再计算距离
dist<-dist(scaledata,method="euclidean")
#作热力图,通过生成一堆的向量,转换为矩阵,得到想要的数据,去掉行标签和列标签
heatmap(as.matrix(dist),labRow = F,labCol = F)

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

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

clustemodel<-hclust(dist,method='ward')
plot(clustemodel)
result<-cutree(clustemodel,k=3)
result

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

table(iris[,5],result)

发现virginica类错分了23个样本
最后我们计算3个组的中心点即实心圆,空心圆表示不同样本的位置

plot(data[,1],data[,2])
center<-aggregate(data,list(result),mean)
points(center[,2],center[,3],pch=19)

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

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

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

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

data<-iris[,1:4]
#数据用上面已经标准化后的数据,因为涉及到距离,就要将不同维度上的值域统一
clustemodel1<-kmeans(scaledata,centers = 3,nstart = 10)
clustemodel1
clustemodel1$cluster

相关文章

  • 用聚类分析鸢尾花数据

    数据集用的是iris也就是一个记录鸢尾属植物品种的样本集,数据集中一共包含了150条记录,每个样本的包含它的萼片长...

  • 数据挖掘应用示例

    两类数据集的聚类结果 大样本数据集的聚类分析 鸢尾花数据集被公认为最著名的用于数据挖掘的数据集,它包含 3 种植物...

  • 手把手教你用SPSSAU做聚类分析

    聚类分析:聚类分析是通过数据建模简化数据的一种方法。“物以类聚,人以群分”正是对聚类分析最好的诠释。本文就具体介绍...

  • 机器学习函数库——Scikit-learn

    Scikit-learn的数据集 基本的自带数据集: 以鸢尾花数据集为例,鸢尾花数据集采集的是鸢尾花的测量数据及其...

  • 数据分析实战--决策树与随机森林鸢尾花分类

    本文考虑从鸢尾花数据集四个特征中取出两个特征,用决策树和随机森林分别进行预测。数据集可关注文末公众号回复:“鸢尾花...

  • 深入推荐引擎相关算法 - 聚类

    聚类分析 什么是聚类分析? 聚类 (Clustering) 就是将数据对象分组成为多个类或者簇 (Cluster)...

  • K-Means聚类算法

    一、概述 1、什么是聚类分析聚类分析是在数据中发现数据对象之间的关系,将数据进行分组,组内的相似性越大,组间的差别...

  • 利用聚类算法研究大数据微信公众号实例

    聚类分析可以用在APP及网站数据分析、用户画像分析上。 1.什么是聚类分析 聚类分析就是把看得见的实体对象(如桌子...

  • 【机器学习+python(8)】分类决策树的介绍与实现

    【哈希大数据】 之前我们介绍过用逻辑回归根据鸢尾花萼片、花瓣的长度和宽度进行鸢尾花类别的判定;也通过朴素贝叶斯模型...

  • 聚类分析(1)之市场细分

    在市场研究中,聚类分析用的最多的就是细分市场。笔记结合两个问题:聚类分析、市场细分。聚类分析是市场细分的一个统计方...

网友评论

    本文标题:用聚类分析鸢尾花数据

    本文链接:https://www.haomeiwen.com/subject/zzibsqtx.html