point 如何求elbow_如何选择kmeans中的k值——肘部法则–Elbow Method和轮廓系数–Silhouette...
肘部法则–Elbow Method
我们知道k-means是以最小化样本与质点平方误差作为目标函数,将每个簇的质点与簇内样本点的平方距离误差和称为畸变程度(distortions),那么,对于一个簇,它的畸变程度越低,代表簇内成员越紧密,畸变程度越高,代表簇内结构越松散。 畸变程度会随着类别的增加而降低,但对于有一定区分度的数据,在达到某个临界点时畸变程度会得到极大改善,之后缓慢下降,这个临界点就可以考虑为聚类性能较好的点。
importpandas as pdfrom sklearn.cluster importKMeansimportmatplotlib.pyplot as plt
df_features= pd.read_csv(r'11111111.csv',encoding='gbk') #读入数据#print(df_features)
'利用SSE选择k'SSE= [] #存放每次结果的误差平方和
for k in range(1,9):
estimator= KMeans(n_clusters=k) #构造聚类器
estimator.fit(df_features[['0','1','2','3','4','5','6','7','8','9','10','11','12','13','14','15','16','17','18','19','20','21','22','23','24','25','26','27','28','29','30','31','32']])
SSE.append(estimator.inertia_)#estimator.inertia_获取聚类准则的总和
X = range(1,9)
plt.xlabel('k')
plt.ylabel('SSE')
plt.plot(X,SSE,'o-')
plt.show()
如上图所示,在k=xxxxxx时,畸变程度(y值)得到大幅改善,可以考虑选取k=xxxxx作为聚类数量 显然,肘部对于的k值为xxxxxx(曲率最高),故对于这个数据集的聚类而言,最佳聚类数应该选xxxxxxxx。
轮廓系数–Silhouette Coefficient
对于一个聚类任务,我们希望得到的簇中,簇内尽量紧密,簇间尽量远离,轮廓系数便是类的密集与分散程度的评价指标,公式表达如下: s=b−amax(a,b)s=b−amax(a,b) 其中a代表同簇样本到彼此间距离的均值,b代表样本到除自身所在簇外的最近簇的样本的均值,s取值在[-1, 1]之间。 如果s接近1,代表样本所在簇合理,若s接近-1代表s更应该分到其他簇中。
判断: 轮廓系数范围在[-1,1]之间。该值越大,越合理。 si接近1,则说明样本i聚类合理; si接近-1,则说明样本i更应该分类到另外的簇; 若si 近似为0,则说明样本i在两个簇的边界上。 所有样本的s i 的均值称为聚类结果的轮廓系数,是该聚类是否合理、有效的度量。 使用轮廓系数(silhouette coefficient)来确定,选择使系数较大所对应的k值
sklearn.metrics.silhouette_score sklearn中有对应的求轮廓系数的API
importnumpy as npfrom sklearn.cluster importKMeansfrom pylab import *
importcodecsimportmatplotlib.pyplot as pltfrom sklearn.metrics importcalinski_harabaz_scoreimportpandas as pdfrom numpy.random importrandomfrom sklearn importpreprocessingfrom sklearn importmetricsimportoperator
data=[]
labels=[]
number1=10with codecs.open("red_nopca_nolabel.txt", "r") as f:for line inf.readlines():
line1=line.strip()
line2= line1.split(',')
x2=[]for i inrange(0,number1):
x1=line2[i]
x2.append(float(x1))
data.append(x2)
x2=[]#label = line2[number1-1]
#labels.append(float(label))
datas =np.array(data)'''kmeans_model = KMeans(n_clusters=3, random_state=1).fit(datas)
labels = kmeans_model.labels_
a = metrics.silhouette_score(datas, labels, metric='euclidean')
print(a)'''silhouette_all=[]for k in range(2,25):
kmeans_model= KMeans(n_clusters=k, random_state=1).fit(datas)
labels=kmeans_model.labels_
a= metrics.silhouette_score(datas, labels, metric='euclidean')
silhouette_all.append(a)#print(a)
print('这个是k={}次时的轮廓系数:'.format(k),a)
dic={} #存放所有的互信息的键值对
mi_num=2
for i insilhouette_all:
dic['k={}时轮廓系数'.format(mi_num)]='{}'.format(i)
mi_num=mi_num+1
#print(dic)
rankdata=sorted(dic.items(),key=operator.itemgetter(1),reverse=True)print(rankdata)
实验结果部分插图
来源:https://www.cnblogs.com/xingnie/p/10335079.html
point 如何求elbow_如何选择kmeans中的k值——肘部法则–Elbow Method和轮廓系数–Silhouette...相关推荐
- 如何选择kmeans中的k值——肘部法则–Elbow Method和轮廓系数–Silhouette Coefficient...
肘部法则–Elbow Method 我们知道k-means是以最小化样本与质点平方误差作为目标函数,将每个簇的质点与簇内样本点的平方距离误差和称为畸变程度(distortions),那么,对于一个簇, ...
- **KMeans中自动K值的确认方法**
KMeans中自动K值的确认方法 1 前言 聚类常用于数据探索或挖掘前期,在没有做先验经验的背景下做的探索性分析,也适用于样本量较大情况下的数据预处理等方面工作.例如针对企业整体用户特征,在未得到相关 ...
- KMeans中的K怎么选择?Elbow method怎么实施?
聚类问题有一大经典难题:没有数据集的真实分类情况,我们怎么才能知道数据簇的最优数目? 本文会谈谈解决该问题的两种流行方法:elbow method(肘子法)和 silhouette method. 如 ...
- Kmeans中的K值选取
1. 最简单的方法:K≈sqrt(N/2) 2. 拐点法:把聚类结果的F-test值(类间Variance和全局Variance的比值)对聚类个数的曲线画出来,选择图中拐点 3. 基于Informat ...
- 如何确定Kmeans中的k值
KMeans聚类是目前应用比较广泛的无监督聚类方法. 但是存在下面两个问题: 1.初始簇的选择,一般python调用Kmeans包的时候是随机生成初始簇,但是存在一些问题.这个以后再做相信分析. 2. ...
- 肘部法和轮廓系数法确定K-means中的k值
目录 1. K-Means 算法 2. 肘部法 3. 轮廓系数法 1. K-Means 算法 k-means算法(详解k-means算法原理)是机器学习中常用的聚类算法,原理简单实现容易,内存占用量也 ...
- kmeans中的k的含义_《K-means》知识点与思考
一.K-means概述 K-means方法是非监督学习(Unsupervised learning)中的一种,非监督学习仍然需要数据,但是这些数据无需标签. K-means是一种常见的聚类算法,所谓聚 ...
- Kmeans聚类时K值选择的方法
1.K-means算法 (1)简单介绍 聚类属于非监督学习,K均值聚类是最基础常用的聚类算法.它的基本思想是,通过迭代寻找K个簇(Cluster)的一种划分方案,使得聚类结果对应的损失函数最小.其中, ...
- 关于求N个无序数中第K大的数。
关于求N个无序数中第K大的数. 2012-03-16 来源:小木虫作者: SmallWarm 昨天去面试,有一题是要求求N个无序数中第K大的数.当时灵感激发,突然想到了快速排序,后来在百度上面一查,已 ...
最新文章
- 在html中加入滚动条,html在div中显示滚动条
- PHP和Node.js开发之间有什么区别
- html:(19):单选框,复选框,下拉列表框
- 第13章 程序的动态加载和执行(一,引导)
- AcWing之二维数组的查找
- php 表单条件设置_PHP基础知识总结
- ECCV 2020 论文大盘点-图像与视频分割篇
- 《jQuery Mobile入门经典》—— 2.2 展现CSS样式
- vue3.0版本怎么修改服务器路径,@vue/cli 3.0 下通过npm命令切换不同服务器地址
- PCA降维算法总结以及matlab实现PCA
- 【图形学】我理解的伽马校正(Gamma Correction)
- web应用程序;web服务器;访问网站过程;Tomcat;发布网站;http;Maven;servlet;MVC
- 后端从数据库中查到的数据怎样返回给前端才合适?
- 处理tophonetics的音标
- STM32一个定时器同时捕获4路PWM波
- 网络安全与渗透:信息收集——google浏览器插件,代理服务(五)此生无悔入华夏,男儿何不带吴钩
- “返回顶部”的简易代码及设计理念
- ae教程 (七)动效插件 (一)古街飘雪
- 汇编语言字符串操作指令movs,和逻辑段寄存器【学习笔记】
- IE6/IE7/IE8/FF兼容问题汇总,以及解决方案