程序员文章、书籍推荐和程序员创业信息与资源分享平台

网站首页 > 技术文章 正文

R数据分析:鸢尾花数据集的聚类分析实操

hfteth 2025-02-16 20:59:25 技术文章 7 ℃

今天给大家分享一个聚类分析的实际操作,所用的数据集也是非常有名和常见的鸢尾花数据集。

第一步:导入数据

这个数据本来就是R base自带的,所以可以直接用,我们直接可以str(iris)查看数据结构:

可以看到,数据有5个变量,150个观测。为了分析方便我们将数据集重命名为iris_df:iris_df <- iris,当然这一步你可以省略。

删除数据集的类别变量

为什么要删掉呢?因为我要做的是聚类,一种非监督的学习方法,目的就是让数据集根据内部特征相似性自成3类,所以就应该将原先数据集的标签删掉。

当然了,从数据集中删掉后,我会把它存为一个另外的向量,好评价聚类的好坏。

species <- as.list(iris_df$Species)
species <- unlist(species)
iris_df <- iris_df[,1:4]
iris_df


大家可以看到,通过运行上面的代码,我们得到的新的数据集就只剩下4个变量了。

运行K-means聚类

此时我就开始对数据集运行聚类分析,我会将类设置为3,应为原来的数据集就是3类。

irisCluster <- kmeans(iris_df,3,nstart = 20)
irisCluster

运行后聚类分析结果如下:


我们可以从结果中看到,聚类结果3类的样本量分类是:38,62,50。我么知道本来鸢尾花数据集应该是50,50,50三类的。聚类结果和原先真实结果是有差异的,这也不奇怪。

另外我们用

table(irisCluster$cluster)
irisCluster$centers

可以分别得到,聚类的类别大小和每一类的变量中心。



作图

聚类好后,我们可以直观的展示类别。首先得将聚类结果中的类别转化为因子,然后作图时将col参数值设置为该因子即可:

irisCluster$cluster <- as.factor(irisCluster$cluster)

plot(iris_df[,3:4],col=irisCluster$cluster)


将聚类结果和原始类别进行比较

要比较我们的聚类的结果和原始的结果,也很简单,直接做一个交叉表格就好:

table(irisCluster$cluster, iris$Species)


从上面这个交叉表格可以看出来,我们聚类的3类代表setosa这个花,2类代表versicolor这个花,1类代表virginica这个花。

将聚类结果添加到原始数据集中

我们可以通过图或者交叉表格对我们的聚类结果进行评价,如果你觉得聚类的结果还不错,这个时候你就可以给每一个观测打上一个类别标签了。

iris.cluster = cbind(iris_df, irisCluster[1])
iris.cluster


因为我们的聚类结果irisCluster中的第一个结果就是观测的类别所以上面的代码写成了iris.cluster = cbind(iris_df, irisCluster[1])

当然你也可以写成iris.cluster = cbind(iris_df, irisCluster$cluster),一样得出同样的结果。

此时,我们就做完了整个的聚类过程,当然你可以举一反三,像对于没有标签的数据我们都可以先使用非监督的方式进行聚类,然后根据聚类结果给原始数据集打上标签,这个时候我们就可以利用数据训练分类模型了。

小结

今天给大家写了一个聚类的例子,重要的是希望大家掌握对非标签数据建立分类模型的思想。感谢大家耐心看完。发表这些东西的主要目的就是督促自己,希望大家关注评论指出不足,一起进步。内容我都会写的很细,用到的数据集也会在原文中给出链接,你只要按照文章中的代码自己也可以做出一样的结果,一个目的就是零基础也能懂,因为自己就是什么基础没有从零学Python和R的,加油。

(站外链接发不了,请关注后私信回复“数据链接”获取本头条号所有使用数据)

往期内容:

R数据分析:贝叶斯定理的R语言模拟

R数据分析:著名的“三门问题”的R语言模拟

R数据分析:R Markdown:数据分析过程报告利器,你必须得学呀

R数据分析:stargazer给你一个漂亮的可以直接发表的结果表格

Tags:

最近发表
标签列表