轮廓系数【python,机器学习,算法】

用途

使用轮廓系数评估聚类质量。聚类质量的评价方法,本质上,都是根据簇内和簇间的效果对比进行衡量。

定义

假设样本集合为 S = a 1 , a 2 , a 3 , . . . , a n S={a_1,a_2,a_3,...,a_n} S=a1,a2,a3,...,an,该样划分成 4 个聚类 G 1 , G 2 , G 3 , G 4 G_1,G_2,G_3,G_4 G1,G2,G3,G4,对于每个样本 a i a_i ai,

  1. 计算 a i a_i ai样本到 a i a_i ai所在聚类 G 1 G_1 G1中的每个样本的距离,然后取平均值 G a i ˉ \bar{Ga_i} Gaiˉ。
  2. 分别计算 a i a_i ai到其他聚类的平均距离,取最小的平均值 G b i ˉ \bar{Gb_i} Gbiˉ
  3. 那么 a i a_i ai的聚类质量 S ( a i ) = G b i ˉ − G a i ˉ m a x ( G b i ˉ , G a i ˉ ) S(a_i)=\frac{\bar{Gb_i}-\bar{Ga_i}}{max(\bar{Gb_i},\bar{Ga_i})} S(ai)=max(Gbiˉ,Gaiˉ)Gbiˉ−Gaiˉ。
  4. 重复上述 1-3 步骤,对数据集中的每个对象计算轮廓系数然后取平均值作为聚类的质量度量。

下面的示例演示了如何使用轮廓系数计算聚类的质量:

python 复制代码
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
from sklearn.datasets import load_iris
from sklearn.metrics import silhouette_score

silhouettteScore = []
data = load_iris()
X = data.data
y = data.target
for i in range(2, 15):
    # 构建并训练模型
    kmeans = KMeans(n_clusters=i, random_state=123).fit(X)
    score = silhouette_score(X, kmeans.labels_)
    silhouettteScore.append(score)
plt.figure(figsize=(10, 6))
plt.plot(range(2, 15), silhouettteScore, linewidth=1.5, linestyle="-")
plt.show()
相关推荐
LO嘉嘉VE3 分钟前
学习笔记十四:决策树剪枝
决策树·机器学习
数据知道7 分钟前
FastAPI项目:构建打字速度测试网站(MySQL版本)
数据库·python·mysql·fastapi·python项目
小青龙emmm8 分钟前
2025级C语言第四次周测题解
c语言·开发语言·算法
vvoennvv10 分钟前
【Python TensorFlow】CNN-BiLSTM-Attention时序预测 卷积神经网络-双向长短期记忆神经网络组合模型带注意力机制(附代码)
python·神经网络·cnn·tensorflow·lstm·bilstm·注意力
树在风中摇曳18 分钟前
【牛客排序题详解】归并排序 & 快速排序深度解析(含 C 语言完整实现)
c语言·开发语言·算法
minji...21 分钟前
算法---模拟/高精度/枚举
数据结构·c++·算法·高精度·模拟·枚举
程序员爱钓鱼21 分钟前
Python 编程实战:环境管理与依赖管理(venv / Poetry)
后端·python·trae
程序员爱钓鱼24 分钟前
Python 编程实战 :打包与发布(PyInstaller / pip 包发布)
后端·python·trae
我叫侯小科41 分钟前
PyTorch 实战:手写数字识别(MNIST)从入门到精通
人工智能·pytorch·python
青衫客3641 分钟前
浅谈 Python 的 C3 线性化算法(C3 Linearization):多继承背后的秩序之美
python·mro·c3线性化算法