聚类分析原理(聚类分析论文范文)
Clustering is a broad set of techniques for finding subgroups of observations within a data set. When we cluster observations, we want observations in the same group to be similar and observations in different groups to be dissimilar.
聚类就是要把你的数据集分成不同的亚组,从而达到组间差异最大化,组内差异最小化的过程,今天就给大家写写如何用R语言做聚类分析。先关注,再往下看哦。
数据介绍
今天用到的数据集还是咱们最熟悉的鸢尾花数据集:
data(iris)plot(iris)
聚类之前我们必须要将数据集进行标准化,这么做的目的就是要消除不同的特征存在不同的量纲,数值差异等的影响:
irisScaled <- scale(iris[, -5])用iris数据集进行kmeans聚类
数据我们基本处理好了,因为我们本身就知道鸢尾花数据是有三类的,所以我们就可以直接令聚类的结果等于三。
fitK <- kmeans(irisScaled[, -5], 3)fitK
通过上面的代码我们就可以得到聚类的结果,包括了每一类的个案和每一类各个变量的均值,以及组件变异和总变异的比值等等:
之前我们提到过,聚类的目的就是组间变异越大越好,组内变异越小越好,其实很自然的想,聚成的类别越多肯定组间变异肯定就越大,但是类别太多也就没有意义了嘛,所以
问题来了
如何选择最佳数量的类别呢?
我们这个例子中我们本身是知道的应该是3类比较靠谱。
但是对于一个陌生的数据集怎么确定多少类合适呢?
这个时候我们就一个一个试:
## 选择最佳K类别k <- list()for(i in 1:10){ k[[i]] <- kmeans(irisScaled[,1:4], i)}betweenss_totss <- list()for(i in 1:10){ betweenss_totss[[i]] <- k[[i]]$betweenss/k[[i]]$totss}plot(1:10, betweenss_totss, type = "b", ylab = "Between SS / Total SS", xlab = "Clusters (k)")
上面的代码就画出了不同类别时组间变异和总变异的比值情况:
此时一个很好的选择类别数量的方法就是看这个图的拐点,比如上面的图从类别2到类别3的时候斜率基本上减小了,从3到4就更小了,说明4个类对于3个类来讲组间变异和总变异的比值增加其实不多,所以我们就有理由选择只聚类为3类。
还可以出图哦:
plot(iris, col = fitK$cluster)
小结
今天给大家介绍了R语言中Kmeans聚类的操作和类别数量的确定方法。之后会给大家写写层次聚类。感谢大家耐心看完。发表这些东西的主要目的就是督促自己,希望大家关注评论指出不足,一起进步。内容我都会写的很细,用到的数据集也会在原文中给出链接,你只要按照文章中的代码自己也可以做出一样的结果,一个目的就是零基础也能懂,因为自己就是什么基础没有从零学Python和R的,加油。
(站外链接发不了,请关注后私信回复“数据链接”获取本头条号所有使用数据)
往期内容:
K-means聚类详解,小白看过来
python非监督机器学习入门:K均值聚类实例操练
R数据分析:鸢尾花数据集的聚类分析实操
如发现本站有涉嫌抄袭侵权/违法违规等内容,请联系我们举报!一经查实,本站将立刻删除。