码迷,mamicode.com
首页 > 其他好文 > 详细

Kmeans聚类_R代码

时间:2016-07-06 20:19:22      阅读:263      评论:0      收藏:0      [点我收藏+]

标签:


首先,简单介绍下k-means聚类:效果简单有效,易于map—reduce化

算法思路:1、选择k个点作为原始的质心(k如何定)

     2、将每个点指派到最近的质心,形成k个簇

     3、重新计算每个簇的质心(x,y坐标的均值)--[新的质心不一定为样本点哦]

     4、迭代2、3步直到簇心收敛于某一个阈值

优缺点:

     1、不太受原始点选择的影响

     2、初始的簇数k到底选几呢(聪明人的方法:先用层次聚类法跑一下呗,看形成几个簇)——>不过听说sass软件对使用此方法的k值选择有很好的帮助

     3、分类的结果还是球形的比较好

     4、离群值干扰较大(记得剔除哦)

 

来吧,我们进入R代码实验一下哦:

prepare:

  rnorm(n,mean=0,sd=1)   ——>  生成N(0,1)的服从正态分布的数,从中随机抽取n个;

  matrix(data, nrow = , ncol = , byrow = F)  ——>  以data数据集生成 几行几列的矩阵,byrow=F默认是按列来排列数据

  rbind()    ——>  纵向合并矩阵,行增加了,列不变

  cbind()    ——>  横向合并矩阵,列增加了,行不变  —— 不过听说效率很低,上面也是哦

 

正式代码: 

用于聚类的数据

1 library()
2 x <- rbind(matrix(rnorm(100, sd = 0.3),ncol = 2),
3                 matrix(rnorm(100,mean = 1 ,sd = 0.3) , ncol = 2) )
4 colnames(x) <- c("x","y")

使用数据集生成聚类

1 cl <- kmeans(x,2) #把数据用kmeans进行聚类,聚成两类

outcome:  

K-means clustering with 2 clusters of sizes 50, 50

Cluster means:  #每个聚类中各个列生成的最终平均值
x y
1 -0.006916551 -0.02923474
2 0.960444585 1.01887784

Clustering vector:
[1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
[29] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2
[57] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
[85] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2

Within cluster sum of squares by cluster: #每个聚类内部的距离平方和
[1] 9.319024 8.556416
(between_SS / total_SS = 74.0 %)#组间的距离平方和占了总体距离平方和的74%,也就是说各个聚类间的距离做到了最大

Available components:  #运行kmeans时函数返回的对象所包含的各个组成部分

[1] "cluster" "centers" "totss"
[4] "withinss" "tot.withinss" "betweenss"
[7] "size" "iter" "ifault"

("cluster"是一个整数向量,用于表示记录所属的聚类  
"centers"是一个矩阵,表示每聚类中各个变量的中心点
"totss"表示所生成聚类的总体距离平方和
"withinss"表示各个聚类组内的距离平方和
"tot.withinss"表示聚类组内的距离平方和总量
"betweenss"表示聚类组间的聚类平方和总量
"size"表示每个聚类组中成员的数量)

1 #承上使用cl,使用如下命令行可以独立显示聚类后的结果
2 cl$cluster   #显示所有数据所分的类
3 cl$centers  #显示每个簇的中中心心中心

 

Kmeans聚类_R代码

标签:

原文地址:http://www.cnblogs.com/JoyHan/p/5647936.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!