R语言k-means聚类
2015-11-24 13:18
260 查看
轮廓系数
参考https://en.wikipedia.org/wiki/Silhouette_(clustering)K值选取
在实际应用中,由于Kmean一般作为数据预处理,或者用于辅助分类贴标签。所以k一般不会设置很大。可以通过枚举,令k从2到一个固定值如10,在每个k值上重复运行数次kmeans(避免局部最优解),并计算当前k的平均轮廓系数,最后选取轮廓系数最大的值对应的k作为最终的集群数目。数据标准化
min.max.norm <- function(x){ (x-min(x))/(max(x)-min(x)) } raw.data <- iris[,1:4] norm.data <- data.frame(sl = min.max.norm(raw.data[,1]), sw = min.max.norm(raw.data[,2]), pl = min.max.norm(raw.data[,3]), pw = min.max.norm(raw.data[,4]))
画轮廓图确定k
# k取2到8,评估K K <- 2:8 round <- 30 # 每次迭代30次,避免局部最优 rst <- sapply(K, function(i){ print(paste("K=",i)) mean(sapply(1:round,function(r){ print(paste("Round",r)) result <- kmeans(norm.data, i) stats <- cluster.stats(dist(norm.data), result$cluster) stats$avg.silwidth })) }) plot(K,rst,type='l',main='轮廓系数与K的关系', ylab='轮廓系数')
通过多维定标进行可视化
old.par <- par(mfrow = c(1,2)) k = 2 # 根据上面的评估 k=2最优 clu <- kmeans(norm.data,k) mds = cmdscale(dist(norm.data,method="euclidean")) plot(mds, col=clu$cluster, main='kmeans聚类 k=2', pch = 19) plot(mds, col=iris$Species, main='原始聚类', pch = 19) par(old.par)
附录
模式识别之多维定标
在模式识别中,我们会考虑到距离distance的问题,就是一个样本和另一个样本在空间中的距离。根据距离的大小来判断分类。那么,也存在这样的一类问题:我们只知道空间中的点(样本)的距离,那么怎么来重构这些点的相对位置呢? 显然欧式距离是最直观的距离,那么我们就会想使用欧式距离来进行计算重构,我们还希望能够在不同维度上进行重构,比如2维或者3维。 怎么做? 有这么个解决方法叫做MDS 全称为 Multidimensional Scaling。
有一个距离矩阵D,我们试图通过这个距离矩阵计算出点的相对位置矩阵X,使得通过X反过来计算距离矩阵D差距最小。所以这是个最优化问题。
参考/article/1532808.html
wiki:https://en.wikipedia.org/wiki/Multidimensional_scaling
谱聚类
参考http://blog.pluskid.org/?p=287参考:/article/4912253.html
wiki对轮廓系数的解释https://en.wikipedia.org/wiki/Silhouette_(clustering)
相关文章推荐
- SparkSQL学习笔记(二)DataSource
- Linux下C线程池的实现
- HTML5安全风险详析之六:API攻击
- jQuery中的attr()和prop()使用
- UE4 Post Process Materials
- C# IIS log日志转换成Table 传入数据库
- SQL转换全角/半角函数
- PHP 数组拼接成字符串
- MySQL 插入数据时,中文乱码问题的解决
- JQuery收集
- 解决jquery.validate1.11.1对metadate的支持
- 【计算机网络】:arp协议分析
- first of all
- Android数据库操作大全(加密、并发、单例等)、新手直接拿来用
- 公元2015年11月24日。雨。
- Spring缓存注解@Cache使用
- TCP/IP协议(四)---应用层
- Robotium怎样判断测试结果
- 双向BFS-->hdu 1195 Open the Lock
- servlet中getServletContext().getRealPath("/")相关问题收集