实际应用

下面通过例子(R实现,完整代码见附件)讲解kmeans使用方法,会将上面提到的内容全部串起来。

加载实验数据iris,这个数据在机器学习领域使用比较频繁,主要是通过画的几个部分的大小,对花的品种分类,实验中需要使用fpc库估计轮廓系数,如果没有可以通过install.packages安装。

# install.packages("fpc")

library(fpc)

library(datasets)

# names(iris)

head(iris)

## Sepal.Length Sepal.Width Petal.Length Petal.Width Species

## 1 5.1 3.5 1.4 0.2 setosa

## 2 4.9 3.0 1.4 0.2 setosa

## 3 4.7 3.2 1.3 0.2 setosa

## 4 4.6 3.1 1.5 0.2 setosa

## 5 5.0 3.6 1.4 0.2 setosa

## 6 5.4 3.9 1.7 0.4 setosa

# 0-1 正规化数据

min.max.norm

(x-min(x))/(max(x)-min(x))

}

raw.data

norm.data

head(norm.data)

## sl sw pl pw

## 1 0.22222222 0.6250000 0.06779661 0.04166667

## 2 0.16666667 0.4166667 0.06779661 0.04166667

## 3 0.11111111 0.5000000 0.05084746 0.04166667

## 4 0.08333333 0.4583333 0.08474576 0.04166667

## 5 0.19444444 0.6666667 0.06779661 0.04166667

## 6 0.30555556 0.7916667 0.11864407 0.12500000

对iris的4个feature做数据正规化,每个feature均是花的某个部位的尺寸。

# k取2到8,评估K

K

round

rst

print(paste("K=",i))

mean(sapply(1:round,function(r){

print(paste("Round",r))

result

stats

stats$avg.silwidth

}))

})

## [1] "K= 2"

## [1] "Round 1"

## [1] "Round 2"

## [1] "Round 3"

## [1] "Round 4"

## [1] "Round 5"

## [1] "Round 6"

## [1] "Round 7"

## [1] "Round 8"

## [1] "Round 9"

## [1] "Round 10"

## [1] "Round 11"

## [1] "Round 12"

## [1] "Round 13"

## [1] "Round 14"

## [1] "Round 15"

## [1] "Round 16"

## [1] "Round 17"

## [1] "Round 18"

## [1] "Round 19"

## [1] "Round 20"

## [1] "Round 21"

## [1] "Round 22"

## [1] "Round 23"

## [1] "Round 24"

## [1] "Round 25"

## [1] "Round 26"

## [1] "Round 27"

## [1] "Round 28"

## [1] "Round 29"

## [1] "Round 30"

## [1] "K= 3"

## [1] "Round 1"

## [1] "Round 2"

## [1] "Round 3"

## [1] "Round 4"

## [1] "Round 5"

## [1] "Round 6"

## [1] "Round 7"

## [1] "Round 8"

## [1] "Round 9"

## [1] "Round 10"

## [1] "Round 11"

## [1] "Round 12"

## [1] "Round 13"

## [1] "Round 14"

## [1] "Round 15"

## [1] "Round 16"

## [1] "Round 17"

## [1] "Round 18"

## [1] "Round 19"

## [1] "Round 20"

## [1] "Round 21"

## [1] "Round 22"

## [1] "Round 23"

## [1] "Round 24"

## [1] "Round 25"

## [1] "Round 26"

## [1] "Round 27"

## [1] "Round 28"

## [1] "Round 29"

## [1] "Round 30"

## [1] "K= 4"

## [1] "Round 1"

## [1] "Round 2"

## [1] "Round 3"

## [1] "Round 4"

## [1] "Round 5"

## [1] "Round 6"

## [1] "Round 7"

## [1] "Round 8"

## [1] "Round 9"

## [1] "Round 10"

## [1] "Round 11"

## [1] "Round 12"

## [1] "Round 13"

## [1] "Round 14"

## [1] "Round 15"

## [1] "Round 16"

## [1] "Round 17"

## [1] "Round 18"

## [1] "Round 19"

## [1] "Round 20"

## [1] "Round 21"

## [1] "Round 22"

## [1] "Round 23"

## [1] "Round 24"

## [1] "Round 25"

## [1] "Round 26"

## [1] "Round 27"

## [1] "Round 28"

## [1] "Round 29"

## [1] "Round 30"

## [1] "K= 5"

## [1] "Round 1"

## [1] "Round 2"

## [1] "Round 3"

## [1] "Round 4"

## [1] "Round 5"

## [1] "Round 6"

## [1] "Round 7"

## [1] "Round 8"

## [1] "Round 9"

## [1] "Round 10"

## [1] "Round 11"

## [1] "Round 12"

## [1] "Round 13"

## [1] "Round 14"

## [1] "Round 15"

## [1] "Round 16"

## [1] "Round 17"

## [1] "Round 18"

## [1] "Round 19"

## [1] "Round 20"

## [1] "Round 21"

## [1] "Round 22"

## [1] "Round 23"

## [1] "Round 24"

## [1] "Round 25"

## [1] "Round 26"

## [1] "Round 27"

## [1] "Round 28"

## [1] "Round 29"

## [1] "Round 30"

## [1] "K= 6"

## [1] "Round 1"

## [1] "Round 2"

## [1] "Round 3"

## [1] "Round 4"

## [1] "Round 5"

## [1] "Round 6"

## [1] "Round 7"

## [1] "Round 8"

## [1] "Round 9"

## [1] "Round 10"

## [1] "Round 11"

## [1] "Round 12"

## [1] "Round 13"

## [1] "Round 14"

## [1] "Round 15"

## [1] "Round 16"

## [1] "Round 17"

## [1] "Round 18"

## [1] "Round 19"

## [1] "Round 20"

## [1] "Round 21"

## [1] "Round 22"

## [1] "Round 23"

## [1] "Round 24"

## [1] "Round 25"

## [1] "Round 26"

## [1] "Round 27"

## [1] "Round 28"

## [1] "Round 29"

## [1] "Round 30"

## [1] "K= 7"

## [1] "Round 1"

## [1] "Round 2"

## [1] "Round 3"

## [1] "Round 4"

## [1] "Round 5"

## [1] "Round 6"

## [1] "Round 7"

## [1] "Round 8"

## [1] "Round 9"

## [1] "Round 10"

## [1] "Round 11"

## [1] "Round 12"

## [1] "Round 13"

## [1] "Round 14"

## [1] "Round 15"

## [1] "Round 16"

## [1] "Round 17"

## [1] "Round 18"

## [1] "Round 19"

## [1] "Round 20"

## [1] "Round 21"

## [1] "Round 22"

## [1] "Round 23"

## [1] "Round 24"

## [1] "Round 25"

## [1] "Round 26"

## [1] "Round 27"

## [1] "Round 28"

## [1] "Round 29"

## [1] "Round 30"

## [1] "K= 8"

## [1] "Round 1"

## [1] "Round 2"

## [1] "Round 3"

## [1] "Round 4"

## [1] "Round 5"

## [1] "Round 6"

## [1] "Round 7"

## [1] "Round 8"

## [1] "Round 9"

## [1] "Round 10"

## [1] "Round 11"

## [1] "Round 12"

## [1] "Round 13"

## [1] "Round 14"

## [1] "Round 15"

## [1] "Round 16"

## [1] "Round 17"

## [1] "Round 18"

## [1] "Round 19"

## [1] "Round 20"

## [1] "Round 21"

## [1] "Round 22"

## [1] "Round 23"

## [1] "Round 24"

## [1] "Round 25"

## [1] "Round 26"

## [1] "Round 27"

## [1] "Round 28"

## [1] "Round 29"

## [1] "Round 30"

plot(K,rst,type='l',main='轮廓系数与K的关系', ylab='轮廓系数')

评估k,由于一般K不会太大,太大了也不易于理解,所以遍历K为2到8。由于kmeans具有一定随机性,并不是每次都收敛到全局最小,所以针对每一个k值,重复执行30次,取并计算轮廓系数,最终取平均作为最终评价标准,可以看到如上的示意图。

当k取2时,有最大的轮廓系数,虽然实际上有3个种类。聚类完成后,有源原始数据是4纬,无法可视化,所以通过多维定标(Multidimensional scaling)将纬度将至2维,查看聚类效果。

# 降纬度观察

old.par

k

clu

mds

plot(mds, col=clu$cluster, main='kmeans聚类 k=2', pch = 19)

plot(mds, col=iris$Species, main='原始聚类', pch = 19)

par(old.par)

可以发现原始分类中和聚类中左边那一簇的效果还是拟合的很好的,右测原始数据就连在一起,kmeans无法很好的区分,需要寻求其他方法。

kmeans最佳实践

随机选取训练数据中的k个点作为起始点

当k值选定后,随机计算n次,取得到最小开销函数值的k作为最终聚类结果,避免随机引起的局部最优解

手肘法选取k值:绘制出k–开销函数闪点图,看到有明显拐点(如下)的地方,设为k值,可以结合轮廓系数。

k值有时候需要根据应用场景选取,而不能完全的依据评估参数选取。

matlab 轮廓系数,kmeans聚类理论篇K的选择(轮廓系数)相关推荐

  1. 聚类轮廓系数java_轮廓系数的应用:kmeans聚类理论篇K的选择(轮廓系数)

    前言javascript kmeans是最简单的聚类算法之一,可是运用十分普遍.最近在工做中也常常遇到这个算法.kmeans通常在数据分析前期使用,选取适当的k,将数据分类后,而后分类研究不一样聚类下 ...

  2. 【聚类算法】基于matlab划分法k-means聚类算法【含Matlab源码 1941期】

    一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[聚类算法]基于matlab划分法k-means聚类算法[含Matlab源码 1941期] 点击上面蓝色字体,直接付费下载,即可. 获取代码 ...

  3. 当复选框中打勾时后面自动显示y或者n_基于轮廓系数确定K-Means聚类中的K

    一.概述 K-Means(K均值)是机器学习中一种常见的无监督算法,它能够将未知标签的数据,根据它们的特征分成不同组,每一组数据又称为"簇",每一簇的中心点称为"质心&q ...

  4. kmeans算法中的sse_kmeans聚类理论篇

    前言 kmeans是最简单的聚类算法之一,但是运用十分广泛.最近在工作中也经常遇到这个算法.kmeans一般在数据分析前期使用,选取适当的k,将数据分类后,然后分类研究不同聚类下数据的特点. 本文记录 ...

  5. K-means聚类最优k值的选取

    最近做了一个数据挖掘的项目,挖掘过程中用到了K-means聚类方法,但是由于根据行业经验确定的聚类数过多并且并不一定是我们获取到数据的真实聚类数,所以,我们希望能从数据自身出发去确定真实的聚类数,也就 ...

  6. 【转】K-means聚类最优k值的选取

    以下博文转自:https://blog.csdn.net/qq_15738501/article/details/79036255  感谢 最近做了一个数据挖掘的项目,挖掘过程中用到了K-means聚 ...

  7. 通过聚类中心进行0-9数字语音识别(matlab)——基于K-means聚类

    项目已免费开源:https://gitee.com/zhengzsj/automatic-speech-recognition–ars/tree/master 1.技术路线 2.实现过程   层次聚类 ...

  8. SAS用K-Means 聚类最优k值的选取和分析

    最近我们被客户要求撰写关于聚类的研究报告,包括一些图形和统计输出.  [视频]KMEANS均值聚类和层次聚类:R语言分析生活幸福质量系数可视化实例 KMEANS均值聚类和层次聚类:R语言分析生活幸福质 ...

  9. 肘方法确定聚类数k_肘方法确定KMeans聚类的最佳K值

    当Kmeans聚类的K没有指定时,可以通过肘部法来估计聚类数量 K_means参数的最优解是以成本函数最小化为目标,成本函数为各个类畸变程度之和,每个类的畸变程度等于该类重心与其内部成员位置距离的平方 ...

  10. Matlab实现简单K-means聚类算法

    K-means算法简要思想: 算法接受参数 k :然后将事先输入的n个数据对象划分为 k个聚类以便使得所获得的聚类满足:同一聚类中的对象相似度较高:而不同聚类中的对象相似度较小. (1)适当选择k个类 ...

最新文章

  1. SpringBoot整合Swagger测试api构建
  2. 在3D世界中创建不同的相机模式——检查对象是否可见
  3. linux中特殊字符的含义,Linux中的特殊符号以及特殊语法
  4. php登陆页面修改密码的功能,使用bootstrap创建登录注册页面并实现表单验证功能...
  5. linux 刻录cd,Linux 刻录CD/DVD命令 growisofs/mkisofs/cdrecord
  6. 啄木鸟下载器(全能版) v2021.01.05
  7. 计算机电子的危害,电子垃圾焚烧炉的危害有多大,你了解过吗?
  8. 老板要先想明白三件事
  9. AI2想从常识测试开始让AI理解物理世界,数据集已公布
  10. php考试试卷,php测试题(一)
  11. 优化mysql效率_巧用这19条MySQL优化,效率至少提高3倍
  12. GWT-基本概念及理解
  13. PS制作水印的简单教程
  14. 【解决】如何线上申请电子版的招商银行卡 | 在线申请招商银行的一网通账户
  15. IC验证工具:Ubuntu下Questasim10.7安装(64bit)全攻略
  16. 张景明:方剂【方歌】——清热剂
  17. cp7s2装Linux,基礎級拆機-神舟戰神GX8CP5s1上8700發現較為雞肋-仿CP7s2
  18. 云计算的二十个基本定义 不可不知!
  19. 计算机网络mac地址作用是什么,mac地址的作用是什么
  20. 【Python数据分析】房价数据分析实战(包含源码和数据)

热门文章

  1. 概率空间probability space 伯努利实验 n次伯努利实验
  2. matlab 光线追踪 渲染,光线追踪(Ray tracing)渲染器工作原理
  3. 计算机病毒和恶意软件管理制度,白城师范学院计算机病毒防治管理制度
  4. matlab绘制vti群速度,声波测井中的相速度与群速度讨论.PDF
  5. 5月全国程序员工资最新统计,网友:惊呆了!
  6. 椰树集团引爆互联网背后的“流量秘密”
  7. 从培训机构出来的程序员,后来都怎么样了?
  8. 共轭先验分布及其应用
  9. vscode调整代码大小
  10. 智慧环保监测系统提升环境监管水平