canopy算法优化kmean聚类及在mahout上实现

a,x两个矩阵
     [,1] [,2]
 [1,]    1    1
 [2,]    0    1
 [3,]    0    0
 [4,]    5    6
 [5,]    6    5
 [6,]    5    5
 [7,]   10    2
 [8,]   10    2
 [9,]   11    3


for(j in 1:nrow(a)){
for(i in 1:nrow(x)){
  w[i]<-dist(rbind(a[j,],x[i,]),method="euclidean")
  }
write.table(w,append=TRUE, sep =",",file="E:/w1.txt",row.names =FALSE, col.names =FALSE, quote =FALSE)
}


k-means的原理是:
      1)选择k个点作为初始质心,即需要分为k个簇
      2)遍历数组,依次将点分配到最近的质心,加入新点后,质心需要重新计算更新
      3)重复点的分配和质心的更新动作,直至簇不再发生变化或者质心的变动的范围在接受范围内


存在的问题:
   在聚类前,簇的个数是不可知的,初始质心的随机的选择会对聚类的生成造成很大的影响,为降低初始质心的选择丢后期的影响 
                    a)先使用层次聚类的方法得到特定的k个簇及质心,(样本较小的情况)
                    b)随机选择第一个质心,对于后续的每一质心,选择离已经选取的初始质心最远的点


聚类优劣的判断
   常用的判断值是误差的平方和(sum of the squared error ,sse),以其作为度量聚类质量的目标函数。
   即计算簇内每个点到簇质心的距离的平方和。
  SSE=dist(c-x)^2, dist(c-x)^2=(Cx-x)^2+(Cy-y)^2


cluster~聚类的结果,也就是每个对象所属的类
tot.withinss~聚类的总的类内平方和,用来衡量类内差异
between~聚类的类间平方和,用来衡量类间差异
简单的评估聚类效果的算法可以用betweenss/(tot.withinss+betweenss)来评价,如果该值越接近于1,聚类的效果就越好些,表示最终的聚类类间差异比较大,类内差异比较小。其他的评价聚类效果的方法还有:
Rand Index, Adjusted randindex              
Silhouette Coefficient(轮廓系数)

Dunn Index


canopy
1、向量序列化(自定义VectorTo.java)
2、执行canopy
./mahout canopy -i /bs/xx -o /output  -dm  org.apache.mahout.common.distance.EculideanDistanceMeasure  -t1 3.0 -t2 1.5 --clustering
簇的集合列表
./mahout seqdumper -i /bs/can/clusteredPoints/part-m-00000
Key: 0: Value: wt: 1.0 distance: 0.74535599249993  vec: [1:1.000]
Key: 0: Value: wt: 1.0 distance: 0.74535599249993  vec: [0:1.000]
Key: 0: Value: wt: 1.0 distance: 0.4714045207910317  vec: []
Key: 1: Value: wt: 1.0 distance: 0.745355992499931  vec: [5.000, 6.000]
Key: 1: Value: wt: 1.0 distance: 0.745355992499931  vec: [6.000, 5.000]
Key: 1: Value: wt: 1.0 distance: 0.4714045207910384  vec: [5.000, 5.000]
Key: 2: Value: wt: 1.0 distance: 0.9428090415820768  vec: [10.000, 2.000]
Key: 2: Value: wt: 1.0 distance: 0.4714045207910322  vec: [11.000, 3.000]
Key: 2: Value: wt: 1.0 distance: 0.4714045207910322  vec: [11.000, 3.000]
簇的中心点
./mahout seqdumper -i /bs/can/clusters-0-final/part-r-00000
Key: C-0: Value: org.apache.mahout.clustering.iterator.ClusterWritable@200957cd
Key: C-1: Value: org.apache.mahout.clustering.iterator.ClusterWritable@200957cd
Key: C-2: Value: org.apache.mahout.clustering.iterator.ClusterWritable@200957cd
自定义类VectorParse解析part-r-00000
C-0	{0:0.3333333333333333,1:0.3333333333333333}
C-1	{0:5.333333333333333,1:5.333333333333333}
C-2	{0:10.666666666666666,1:2.6666666666666665}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值