前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >R聚类算法-(K-Means算法)

R聚类算法-(K-Means算法)

作者头像
Erin
发布2018-01-09 10:59:05
1.2K0
发布2018-01-09 10:59:05
举报
文章被收录于专栏:大数据风控大数据风控

聚类算法,属于无监督学习

K-Means算法

K-Means算法的目标,是把n个样本点划分到k个类中,使得每个点都属于离它最近的质心对应的类,以之作为聚类的标准。 质心: 指一个类,内部所有样本点的均值。 kmeans(x,centers)

  • x 待聚类的训练样本
  • centers 聚类的个数,也就是要分成多少类

代码实现:

pColumns <- c('Sepal.Length', 'Sepal.Width', 'Petal.Length', 'Petal.Width');

plot(iris[, c("Sepal.Length", "Sepal.Width")])

#分类模型训练
kmc <- kmeans(iris[, pColumns], 3);

table(iris$Species, kmc$cluster);  #查看分类概括  
prop.table(table(iris$Species, kmc$cluster), 1)

#聚类结果可视化   
#不同的颜色代表不同的聚类结果,不同的形状代表训练数据集的原始分类情况。
plot(
  iris[c("Sepal.Length", "Sepal.Width")], 
  col = kmc$cluster, 
  pch = as.integer(iris$Species)
);

points(
  kmc$centers[, c("Sepal.Length", "Sepal.Width")], 
  col = 1:3, 
  pch = 8, 
  cex=2
)
这里写图片描述
这里写图片描述

K-Means算法的优化

多维的数据映射为一维的数据,主成分分析,崖底碎石法

#install.packages("psych")
library(psych)

pColumns <- c('Sepal.Length', 'Sepal.Width', 'Petal.Length', 'Petal.Width');

#主成份分析
fp <- fa.parallel(
  iris[, pColumns], 
  fa="pc", 
  n.iter=100, 
  show.legend=FALSE
)
这里写图片描述
这里写图片描述
#崖底碎石法,拿到主成份个数
pc <- principal(iris[, pColumns], nfactors=fp$ncomp)
> fp$ncomp
[1] 1
data <- pc$scores;
#分类模型训练
kc <- kmeans(data, 3);

table(iris$Species, kc$cluster);  #查看分类概括  
prop.table(table(iris$Species, kc$cluster), 1)
 1    2    3
  setosa     0.00 0.00 1.00
  versicolor 0.90 0.10 0.00
  virginica  0.12 0.88 0.00

#聚类结果可视化   
#不同的颜色代表不同的聚类结果,不同的形状代表训练数据集的原始分类情况。
stripchart(
  data[,1]~kc$cluster,
  at=c(1, 1, 1),
  col=c("orange",'black', "red"), 
  pch=c(0, 1, 2)
);

points(
  kc$centers, c(1, 1, 1), 
  col = c("orange","red", 'black'), 
  pch = 8, 
  cex=2
)
这里写图片描述
这里写图片描述
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017年07月24日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • K-Means算法
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档