DataLearner 标志DataLearnerAI
最新AI资讯
大模型评测
大模型列表
大模型对比
资源中心
AI工具导航

加载中...

DataLearner 标志DataLearner AI

专注大模型评测、数据资源与实践教学的知识平台,持续更新可落地的 AI 能力图谱。

产品

  • 评测榜单
  • 模型对比
  • 数据资源

资源

  • 部署教程
  • 原创内容
  • 工具导航

关于

  • 关于我们
  • 隐私政策
  • 数据收集方法
  • 联系我们

© 2026 DataLearner AI. DataLearner 持续整合行业数据与案例,为科研、企业与开发者提供可靠的大模型情报与实践指南。

隐私政策服务条款
目录
目录
  1. 首页/
  2. 博客列表/
  3. 博客详情

使用R语言进行K-means聚类并分析结果

2018/10/31 14:25:22
62,459 阅读
K-meansR语言聚类

R语言内置了一个kmeans函数,在这篇博客中,我们描述一下如何使用这个函数做聚类分析。首先,我们给出kmeans函数的参数:

kmeans(x, centers, iter.max = 10, nstart = 1,algorithm = c("Hartigan-Wong", "Lloyd", "Forgy","MacQueen"), trace=FALSE)
## S3 method for class 'kmeans'
fitted(object, method = c("centers", "classes"), ...)

我们将分别描述,首先第一个参数是 x,它是kmeans的输入数据。只要是矩阵的数值数据就可以了。首先,我们使用R语言自带的数据集iris数据(点击查看)。

data(iris)
head(iris)

我们可以看到数据集格式如下:

第二个参数是中心点选择 centers,它是中心点选择,可以有两种参数,第一种直接写一个数值,表示聚成几类,这种情况下它会自动随机选择初始中心点,R语言会选择数据集中的随机行作为初试中心点。还有一种方式是可以选择输入一个起始的中心点,那么kmeans就会根据选择的中心点开始聚类迭代。

第三个参数是迭代次数 iter.max,即迭代次数,不写的话默认是10次。否则就是最大迭代次数。

第四个参数是算法选择 algorithm,输入值是缩写的字符,算法有"Hartigan-Wong", "Lloyd", "Forgy","MacQueen"四种,注意Lloyd和Forgy是同一种算法的不同称谓。

剩下的参数没什么意义,暂时不说了。接下来我们看一下实际案例及结果。代码如下:

#载入数据
data(iris)

#选择第1列到第4列数据进行聚类,因为第5列是该数据集的类标签
km <- kmeans(iris[,1:4], 3)

#对结果的可视化
plot(iris[c("Sepal.Length", "Sepal.Width")], col = km$cluster, pch = as.integer(iris$Species))
points(km$centers[,c("Sepal.Length", "Sepal.Width")], col = 1:3, pch = 8, cex=2)

#输出kmeans结果,我们分析一下
km
kmeans的可视化结果
kmeans的可视化结果

kmeans的可视化结果

kmeans结果的分析

我们分析一下结果,第一行表示各个类别下数据点的数量分别是96、21和33个。然后是聚类的均值,即聚类的中心点。然后是聚类向量,表明每个数据点所属的类别。Within cluster sum of squares by cluster表示每个簇内部的距离平方和,表示该簇的紧密程度。between_SS / total_SS这一项表示组间距离的平方和占整体距离平方和的结果。一般的,组内距离要求尽可能小,组间距离尽可能大,因此这个值越接近1越好。最后的Available components表示运行结果返回的对象包含的组成部分。可以使用 km$cluster形式打印出来查看结果。

关于R语言中KMeans评价的说明

在R语言的KMeans中内置了一个评价指标,是组间平方和与总的距离平方和的商:即上文中提到的between_SS / total_SS(这里的ss是sum of squares的缩写)。这里说明一下相关的计算方法。

总的距离平方和是指所有的数据与均值之间的差值,然后计算平方和:

\text{total\_ss} = \sum_{x_i} (x_i - \mu)^2

而组间平方和则是总的距离平方和减去组内距离平方和,所以这里先计算组内距离平方和,这是指每个簇内部的距离平方和,然后求总和:

\text{within\_ss} = \sum_k\sum_{x_i \in c_k}(x_i - \mu_k)^2

最终:

\text{between\_ss} = \text{total\_ss} - \text{within\_ss}

这个指标的计算可以使用python,见使用Python的sklearn包做kmeans聚类分析

DataLearner 官方微信

欢迎关注 DataLearner 官方微信,获得最新 AI 技术推送

DataLearner 官方微信二维码
返回博客列表

相关博客

  • R语言技巧总结笔记
  • R语言分析面板数据:简单案例
  • R语言如何将实验结果导出
  • R语言如何根据抽样得到训练集与测试集
  • R语言操作数据库
  • 使用sklearn做高斯混合聚类(Gaussian Mixture Model)

热门博客

  • 1Dirichlet Distribution(狄利克雷分布)与Dirichlet Process(狄利克雷过程)
  • 2回归模型中的交互项简介(Interactions in Regression)
  • 3贝塔分布(Beta Distribution)简介及其应用
  • 4矩母函数简介(Moment-generating function)
  • 5普通最小二乘法(Ordinary Least Squares,OLS)的详细推导过程
  • 6使用R语言进行K-means聚类并分析结果
  • 7深度学习技巧之Early Stopping(早停法)
  • 8手把手教你本地部署清华大学的ChatGLM-6B模型——Windows+6GB显卡本地部署