作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客

本文网址:https://blog.csdn.net/HiWangWenBing/article/details/123515923


目录

前言:

第1章 指定聚类情况系的轮廓系数

1.1 非排序的轮廓系数

1.2 轮廓系数排序后的展示--横向展示

1.3 轮廓系数排序后的展示--纵向展示

第2章 cluster=4时候的轮廓系数(排序)

第3章 不同聚类数情形下的轮廓系数展示

3.1 代码

3.2 n_cluser=2

3.3 n_cluser=3

3.4 n_cluser=4

3.5 n_cluser=5

3.6 n_cluser=6

3.7 n_cluser=7


前言:

不同的聚类类别,其轮廓系数的分布是不相同,聚类的方式也是不同的,本文就是展示不同聚类类别情形其平均轮廓系数以及素有样本的轮廓系数的分布情况。

第1章 指定聚类情况系的轮廓系数

1.1 非排序的轮廓系数

from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_samples, silhouette_score
import matplotlib.pyplot as plt
import matplotlib.cm as cm
import numpy as np# 构建模型并进行学习
n_clusters = 4
clusterer = KMeans(n_clusters=n_clusters, random_state=10)
clusterer = clusterer.fit(X)# 获得所有预测标签
cluster_labels = clusterer.labels_# 获得所有样本的平均轮廓分数
silhouette_avg = silhouette_score(X, cluster_labels)print("For n_clusters =", n_clusters)
print("The average silhouette_score is :", silhouette_avg)# 获得每个样本的所有轮廓分数
sample_silhouette_values = silhouette_samples(X, cluster_labels)
print("The sample silhouette_score is :", sample_silhouette_values.shape)# 可视化所有的样本的轮廓系数分布
x_data = np.linspace(0, 500, 500)
y_data = sample_silhouette_values
plt.scatter(x_data, y_data)
#fill_betweenx(y, x1, x2=0, where=None, step=None, interpolate=False, *, data=None, **kwargs)[source]
plt.fill_between(x_data, 0, y_data, facecolor='green', alpha=0.3)
For n_clusters = 4
The average silhouette_score is : 0.6505186632729437
The sample silhouette_score is : (500,)

1.2 轮廓系数排序后的展示--横向展示

# 可视化所有的样本的轮廓系数分布(排序后结果)
x_data = np.linspace(0, 500, 500)
y_data = sample_silhouette_values
y_data.sort()
plt.scatter(x_data,y_data)
plt.fill_between(x_data, 0, y_data, facecolor='green', alpha=0.3)

1.3 轮廓系数排序后的展示--纵向展示

# 可视化所有的样本的轮廓系数分布(排序后结果)
x_data = np.linspace(0, 500, 500)
y_data = sample_silhouette_values
y_data.sort()
plt.scatter(y_data,x_data)
plt.fill_between(y_data,0, x_data, facecolor='green', alpha=0.3)

第2章 cluster=4时候的轮廓系数(排序)

#1. 生成画布
fig, (ax1, ax2) = plt.subplots(1, 2)
fig.set_size_inches(9+9, 7)
# 横坐标是轮廓系数,[-1, 1] ,实际在[0,1]
ax1.set_xlim([-0.1, 1])# 纵坐标范围
print("样本个数:", X.shape[0])
ax1.set_ylim([0, X.shape[0] + (n_clusters + 1) * 10])#2. 分别画出每个聚类类别的轮廓系数
# 基线,防止每个轮廓系数贴着X轴
y_lower = 10
#
for i in range(n_clusters):# 获取i个聚类类别对应的轮廓系数ith_cluster_silhouette_values = sample_silhouette_values[cluster_labels == i]# 获取i个聚类类别对应的轮廓系数进行排序,以免乱序显示,ith_cluster_silhouette_values.sort()# 获取某一个聚类类别对应的样本数size_cluster_i = ith_cluster_silhouette_values.shape[0]print(size_cluster_i)# 设置样本的上线:lower + 某个聚类类别的样本数就是它的上线y_upper = y_lower + size_cluster_i# 把族的类别映射成某一种颜色color = cm.nipy_spectral(float(i)/n_clusters)# 在y轴的[y_lower, y_upper] 之间填充ith_cluster_silhouette_valuesax1.fill_betweenx(np.arange(y_lower, y_upper)      # Y轴的数值,ith_cluster_silhouette_values   # X轴的数值,facecolor=color,alpha=0.7)# 设置Y轴每个聚类块的标签名称ax1.text(-0.05 , y_lower + 0.5 * size_cluster_i , str(i))y_lower = y_upper + 10# 可视化运行结果
ax1.set_title("The silhouette plot for the various clusters.")
ax1.set_xlabel("The silhouette coefficient values")
ax1.set_ylabel("Cluster label")
#画出平均值线
ax1.axvline(x=silhouette_avg, color="red", linestyle="--")
# 设置y轴坐标
ax1.set_yticks([])
# 设置x轴坐标
ax1.set_xticks([-0.1, 0, 0.2, 0.4, 0.6, 0.8, 1])#3. 画出每个样本的实际分布
colors = cm.nipy_spectral(cluster_labels.astype(float) / n_clusters)
ax2.scatter(X[:, 0], X[:, 1] ,marker='o' ,s=8 ,c=colors)
centers = clusterer.cluster_centers_# Draw white circles at cluster centers
ax2.scatter(centers[:, 0], centers[:, 1], marker='x', c="red", alpha=1, s=200)
ax2.set_title("The visualization of the clustered data.")
ax2.set_xlabel("Feature space for the 1st feature")
ax2.set_ylabel("Feature space for the 2nd feature")
plt.suptitle(("Silhouette analysis for KMeans clustering on sample data ""with n_clusters = %d" % n_clusters),fontsize=14, fontweight='bold')
plt.show()
样本个数: 500
123
125
124
128

第3章 不同聚类数情形下的轮廓系数展示

3.1 代码

from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_samples, silhouette_score
import matplotlib.pyplot as plt
import matplotlib.cm as cm
import numpy as np# 显示不同聚类分类数的情形下的轮廓系数分布情况
for n_clusters in [2,3,4,5,6,7]:# 聚类类别数n_clusters = n_clusters# 准备画布fig, (ax1, ax2) = plt.subplots(1, 2)fig.set_size_inches(18, 7)ax1.set_xlim([-0.1, 1])ax1.set_ylim([0, X.shape[0] + (n_clusters + 1) * 10])# 模型训练clusterer = KMeans(n_clusters=n_clusters, random_state=10).fit(X)#模型标签cluster_labels = clusterer.labels_# 轮廓系数均值silhouette_avg = silhouette_score(X, cluster_labels)print("For n_clusters =", n_clusters, "The average silhouette_score is :", silhouette_avg)# 在指定类别下,每个样本的轮廓系数sample_silhouette_values = silhouette_samples(X, cluster_labels)# 可视化轮廓系数y_lower = 10for i in range(n_clusters):ith_cluster_silhouette_values = sample_silhouette_values[cluster_labels == i]ith_cluster_silhouette_values.sort()size_cluster_i = ith_cluster_silhouette_values.shape[0]y_upper = y_lower + size_cluster_icolor = cm.nipy_spectral(float(i)/n_clusters)ax1.fill_betweenx(np.arange(y_lower, y_upper),ith_cluster_silhouette_values,facecolor=color,alpha=0.7)ax1.text(-0.05, y_lower + 0.5 * size_cluster_i, str(i))y_lower = y_upper + 10# 设置轮廓系数坐标值参数ax1.set_title("The silhouette plot for the various clusters.")ax1.set_xlabel("The silhouette coefficient values")ax1.set_ylabel("Cluster label")# 绘制中轴线ax1.axvline(x=silhouette_avg, color="red", linestyle="--")ax1.set_yticks([])ax1.set_xticks([-0.1, 0, 0.2, 0.4, 0.6, 0.8, 1])colors = cm.nipy_spectral(cluster_labels.astype(float) / n_clusters)# 绘制不同聚类族的情形的样本分布图ax2.scatter(X[:, 0], X[:, 1],marker='o',s=8,c=colors)centers = clusterer.cluster_centers_# raw white circles at cluster centersax2.scatter(centers[:, 0], centers[:, 1], marker='x',c="red", alpha=1, s=200)ax2.set_title("The visualization of the clustered data.")ax2.set_xlabel("Feature space for the 1st feature")ax2.set_ylabel("Feature space for the 2nd feature")plt.suptitle(("Silhouette analysis for KMeans clustering on sample data ""with n_clusters = %d" % n_clusters),fontsize=14, fontweight='bold')plt.show()

3.2 n_cluser=2

For n_clusters = 2 The average silhouette_score is : 0.7049787496083262

3.3 n_cluser=3

For n_clusters = 3 The average silhouette_score is : 0.5882004012129721

3.4 n_cluser=4

For n_clusters = 4 The average silhouette_score is : 0.6505186632729437

3.5 n_cluser=5

For n_clusters = 5 The average silhouette_score is : 0.56376469026194

3.6 n_cluser=6

For n_clusters = 6 The average silhouette_score is : 0.4504666294372765

3.7 n_cluser=7

For n_clusters = 7 The average silhouette_score is : 0.39092211029930857


作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客

本文网址: https://blog.csdn.net/HiWangWenBing/article/details/123515923

[机器学习与scikit-learn-26]:算法-聚类-KMeans寻找最佳轮廓系数相关推荐

  1. K-means聚类原理实现 优缺点 轮廓系数 调优Canopy算法

    Kmeans聚类是我最早接触的,也是最简单的机器学习聚类算法了.它是一种无监督学习算法. 原理: 还是先简单过一下Kmeans聚类的过程吧.不像模像样地罗列个一二三四,直接口述一下过程就好:比如我们要 ...

  2. kmeans学习笔记轮廓系数以及使用KMeans做矢量量化

    from sklearn.cluster import KMeans cluster=KMeans(n_clusters=3,random_state=0).fit(X) y_pred=cluster ...

  3. 机器学习与Scikit Learn学习库

    摘要: 本文介绍机器学习相关的学习库Scikit Learn,包含其安装及具体识别手写体数字案例,适合机器学习初学者入门Scikit Learn. 在我科研的时候,机器学习(ML)是计算机科学领域中最 ...

  4. 跟我学算法聚类(kmeans)

    kmeans是一种无监督的聚类问题,在使用前一般要进行数据标准化, 一般都是使用欧式距离来进行区分,主要是通过迭代质心的位置 来进行分类,直到数据点不发生类别变化就停止, 一次分类别,一次变换质心,就 ...

  5. 机器学习算法----聚类 (K-Means、LVQ、GMM、DBSCAN、AGNES) (学习笔记)

    文章目录 聚类简介 聚类和分类的区别 基础概念 外部指标 内部指标 距离度量和非距离度量 距离度量方法 有序属性和无序属性 原型聚类 k均值算法(K-means) 学习向量化(LVQ) 高斯混合聚类( ...

  6. 推荐算法-聚类-K-MEANS

    对于大型的推荐系统,直接上协同过滤或者矩阵分解的话可能存在计算复杂度过高的问题,这个时候可以考虑用聚类做处理,其实聚类本身在机器学习中也常用,属于是非监督学习的应用,我们有的只是一组组数据,最终我们要 ...

  7. 【机器学习项目实战】Python实现聚类(Kmeans)分析客户分组

    说明:这是一个机器学习实战项目(附带数据+代码),如需数据+完整代码可以直接到文章最后获取. 1.问题定义 在日常银行.电商等公司中,随着时间的推移,都会积累一些客户的数据.在当前的大数据时代.人工智 ...

  8. spark聚类算法的聚类效果评估指标“轮廓系数”细节

    什么是轮廓系数? 参见百度百科,讲的很清楚此处不赘述: https://baike.baidu.com/item/%E8%BD%AE%E5%BB%93%E7%B3%BB%E6%95%B0/173616 ...

  9. 聚类的评价方法 轮廓系数

    https://baike.baidu.com/item/%E8%BD%AE%E5%BB%93%E7%B3%BB%E6%95%B0/17361607?fr=aladdin

最新文章

  1. Spring Boot 监听 Redis Key 失效事件实现定时任务
  2. SVN中各种符号箭头含义
  3. 选择Data类型在Access与Sql中的区别
  4. 已知两点的经度和纬度,计算两点间的距离(php,javascript)
  5. ECShop后台管理菜单修改
  6. VTK:相互作用之ClientData
  7. C语言学习之将一个数组中的值按逆序重新存放。例如,原来顺序为8,6,5,4,1. 要求改为1,4,5,6,8。
  8. 开源 一套 Blazor Server 端精致套件
  9. datagrid在MVC中的运用02-结合搜索
  10. 开始学习redhat8,安装redhat8虚拟机
  11. springboot中Word转PDF
  12. Android NFC 标签 读写
  13. M语言中的操作符说明:大括号{}-列List,方括号[]-记录Record
  14. python xpath定位 麦客表单
  15. Python模块之snmp-cmds,easysnmp
  16. 985硕毕业,面试13家企业,拿7个大厂offer,回顾面试总结
  17. file.getOriginalFilename()
  18. bandit(13-34)
  19. 微信的新消息一键标为已读.简单的微信脚本,使用autojs编写的安卓自动化脚本
  20. jquery获取上级、同级和下级元素

热门文章

  1. Mac OS 10.15.1 Catalina 黑苹果安装实录
  2. 论坛热贴 | RT-Thread音频驱动开发(一)
  3. 数学使用计算机辅助教学,谈数学课堂中多媒体辅助教学的应用
  4. 2022-2028年中国养老护理行业市场全景调查及投资前景预测报告
  5. STA切换AP过程中,STA如何识别AP,AP又反馈什么信息给STA?
  6. python什么是鸭子类型
  7. 分类,目标检测,语义分割,实例分割
  8. 浅谈静态链接库(SLL)和动态链接库(DLL)
  9. 极路由1(HC5661)刷openwrt固件及zerotier配置教程
  10. 使用QImage处理图片为黑白