样本轮廓系数(原理、sklearn.metrics.silhouette_score、silhouette_samples参数介绍)

一、轮廓系数含义:

轮廓系数(Silhouette Coefficient),是聚类效果好坏的一种评价方式。     

最佳值为1,最差值为-1。接近0的值表示重叠的群集。负值通常表示样本已分配给错误的聚类,因为不同的聚类更为相​​似

二、计算步骤:

1)对于簇中的每个向量,分别计算它们的轮廓系数。

      对于其中的一个点 i 来说:

      计算 簇内不相似度a(i) :i向量到同簇内其他点不相似程度的平均值,体现凝聚度

      计算 簇间不相似度b(i) :i向量到其他簇的平均不相似程度的最小值,体现分离度

      那么第i个对象的轮廓系数就为:

\large S(i)=\frac{b(i)-a(i)}{max\{​{a(i),b(i)}\}}

所有样本的s i 的均值称为聚类结果的轮廓系数,定义为S,是该聚类是否合理、有效的度量。聚类结果的轮廓系数的取值在【-1,1】之间,值越大,说明同类样本相距约近,不同样本相距越远,则聚类效果越好。

三、sklearn.metrics.silhouette_score 介绍及参数含义

详细参考scikit-learn官网

此函数返回所有样本的平均轮廓系数。要获取每个样本的值,请使用silhouette_samples

sklearn.metrics.silhouette_score(X, labels, metric='euclidean', sample_size=None, random_state=None)

参数

X:数组[n_samples_a,n_samples_a](如果metric ==“ precomputed”),否则为[n_samples_a,n_features]   样本之间的成对距离数组或特征数组。

labels:数组,形状= [n_samples]   每个样品的预测标签

 metric  : 计算要素阵列中实例之间的距离时使用的度量。默认是euclidean(欧氏距离)。

如果metric是字符串,则必须是允许的选项之一metrics.pairwise.pairwise_distances。如果X是距离数组本身,请使用metric="precomputed"。

return样本平均轮廓系数

可参考实例:Demo of DBSCAN clustering algorithm

四、silhouette_samples参数介绍

此函数返回所有样本的轮廓系数。

sklearn.metrics.silhouette_samples(X, labels, etric='euclidean')

参数X:数组[n_samples_a,n_samples_a](如果metric ==“ precomputed”),否则为[n_samples_a,n_features]   样本之间的成对距离数组或特征数组。
labels:数组,形状= [n_samples]   每个样品的预测标签

metric  : 计算要素阵列中实例之间的距离时使用的度量。默认是euclidean(欧氏距离)。

如果metric是字符串,则必须是允许的选项之一metrics.pairwise.pairwise_distances。如果X是距离数组本身,请使用metric="precomputed"。

return每个样本的轮廓系数

from sklearn.neural_network import MLPClassifier,MLPRegressor Traceback (most recent call last): File "C:\Users\wyq_0\AppData\Local\Temp\ipykernel_13656\921061210.py", line 1, in <module> from sklearn.neural_network import MLPClassifier,MLPRegressor File "C:\Users\wyq_0\python\lib\site-packages\sklearn\neural_network\__init__.py", line 10, in <module> from ._multilayer_perceptron import MLPClassifier File "C:\Users\wyq_0\python\lib\site-packages\sklearn\neural_network\_multilayer_perceptron.py", line 26, in <module> from ..metrics import accuracy_score, r2_score File "C:\Users\wyq_0\python\lib\site-packages\sklearn\metrics\__init__.py", line 42, in <module> from . import cluster File "C:\Users\wyq_0\python\lib\site-packages\sklearn\metrics\cluster\__init__.py", line 22, in <module> from ._unsupervised import silhouette_samples File "C:\Users\wyq_0\python\lib\site-packages\sklearn\metrics\cluster\_unsupervised.py", line 16, in <module> from ..pairwise import pairwise_distances_chunked File "C:\Users\wyq_0\python\lib\site-packages\sklearn\metrics\pairwise.py", line 33, in <module> from ._pairwise_distances_reduction import ArgKmin File "C:\Users\wyq_0\python\lib\site-packages\sklearn\metrics\_pairwise_distances_reduction\__init__.py", line 89, in <module> from ._dispatcher import ( File "C:\Users\wyq_0\python\lib\site-packages\sklearn\metrics\_pairwise_distances_reduction\_dispatcher.py", line 11, in <module> from ._base import _sqeuclidean_row_norms32, _sqeuclidean_row_norms64 File "sklearn\metrics\_pairwise_distances_reduction\_base.pyx", line 1, in init sklearn.metrics._pairwise_distances_reduction._base AttributeError: module 'sklearn.utils._openmp_helpers' has no attribute '__pyx_capi__'咋办
06-01
任务描述 本关的实验任务为: 使用sklearn.cluster模块的K-means函数进行聚类; 使用sklearn.metrics模块的silhouette_score计算轮廓系数; 根据轮廓系数选择参数K; 使用正确选择的参数进行模型训练。 本关任务 根据下面的文字提示,在右侧编辑器补充代码,在已有的代码框架下实现函数功能,完成实验。 (1)首先,导入sklearn.cluster模块中的K-means函数; from sklearn.cluster import KMeans (2)根据轮廓系数进行参数选择; #使用matplotlib绘图 import matplotlib.pyplot as plt plt.rcParams['font.sans-serif'] = ['SimHei'] #用来正常显示中文标签 plt.rcParams['axes.unicode_minus'] = False #用来正常显示负号 #导入sklearn.metrics模块中的silhouette_score函数 from sklearn.metrics import silhouette_score Scores = [] # 存放轮廓系数 #********** Begin **********# for k in range(2,9): #计算轮廓系数 #********** End **********# # 画图 X = range(2,9) plt.xlabel('k') plt.ylabel('轮廓系数') plt.plot(X,Scores,'o-') plt.show() 如果填写正确,运行效果应该如下图所示: (3)根据轮廓系数选择参数K,根据上面的运行结果选择聚类的次数,除此以外将使用进程的数量设置为4, 最大迭代次数设置为500; #n_clusters:要分成的簇数也是要生成的质心数 #n_jobs: 使用进程的数量,与电脑的CPU有关 #max_iter:每次迭代的最大次数 #********** Begin **********# model1= model1.fit(data_zs) #训练模型 #********** End **********# 测试说明 平台会对你编写的代码进行测试,通过正确的输出处理之后的数据进行验证,所以请勿修改函数返回内容。
最新发布
03-31
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值