R语言数据分析实战:十大算法之K-均值聚类

  • A+
所属分类:R语言

一、准备

K-均值算法是聚类分析算法的一种。通常情况下,我们可能不知道每个数据样本从属的类别,样本没有分类标签,这时我们可以尝试采用K-均值聚类来解决这个问题。

R语言数据分析实战:十大算法之K-均值聚类

K-means算法是最简单的一种聚类算法。算法的目的是使各个样本与所在类均值的误差平方和达到最小(这也是评价K-means算法最后聚类效果的评价标准).

K均值聚类算法是先随机选取K个对象作为初始的聚类中心。然后计算每个对象与各个种子聚类中心之间的距离,把每个对象分配给距离它最近的聚类中心。聚类中心以及分配给它们的对象就代表一个聚类。一旦全部对象都被分配了,每个聚类的聚类中心会根据聚类中现有的对象被重新计算。这个过程将不断重复直到满足某个终止条件。终止条件可以是没有(或最小数目)对象被重新分配给不同的聚类,没有(或最小数目)聚类中心再发生变化,误差平方和局部最小。

K-means聚类算法的一般步骤:

  1. 初始化。输入基因表达矩阵作为对象集X,输入指定聚类类数N,并在X中随机选取N个对象作为初始聚类中心。设定迭代中止条件,比如最大循环次数或者聚类中心收敛误差容限。
  2. 进行迭代。根据相似度准则将数据对象分配到最接近的聚类中心,从而形成一类。初始化隶属度矩阵。
  3. 更新聚类中心。然后以每一类的平均向量作为新的聚类中心,重新分配数据对象。
  4. 反复执行第二步和第三步直至满足中止条件。

二、K-均值聚类R语言实现

2.1 加载算法包

  1. library(stats)

2.2 进行K-均值聚类

这时我们假定我们不知道iris数据集的分类标签,采用K-均值聚类把数据分为三类:

  1. model <- kmeans(x = subset(iris, select = -Species), centers = 3)

2.3 测试聚类效果

同样生成混淆矩阵:

  1. res <- table(model$cluster, iris$Species)
  2. res
setosa versicolor virginica
1 0 2 36
2 50 0 0
3 0 48 14

可以看到准确率为89.33%,效果凑合,能够起到初步探索数据的目的。

以上是K均值聚类的简单示例,这里其实假定我们已经知道最有的聚类数为3类,故而有相对理想的效果;而在实际遇到的问题中可能我们事先并不知道数据应该分为几类,这也是K均值聚类一直以来的一个重要课题,就是如何确定合理的聚类数目,这个会在后续的文章中做详细介绍。

2016年度中国软件开发者白皮书下载(PDF)
精选各名校数学专业考研初试试卷
R语言实战(中文完整版)
基于大数据的用户特征分析

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: