python(sklearn) 聚类性能度量

news/2024/5/20 7:28:42 标签: python, 聚类, 数据挖掘, 聚类算法

文章目录

  • python(sklearn) 聚类性能度量
    • 一、sklearn聚类评价函数:
    • 二、评价函数说明:
      • 1. 轮廓系数(Silhouette Coefficient)
      • 2. CH分数(Calinski Harabasz Score )
      • 3. 戴维森堡丁指数(DBI)——davies_bouldin_score
    • 完整示例
    • 参考资料


pythonsklearn___3">python(sklearn) 聚类性能度量

一、sklearn聚类评价函数:

python">metrics.adjusted_mutual_info_score([,])	
metrics.adjusted_rand_score(labels_true,)	
metrics.calinski_harabasz_score(X, labels)	
metrics.davies_bouldin_score(X, labels)
metrics.completeness_score(labels_true,)	
metrics.cluster.contingency_matrix([,])	
metrics.fowlkes_mallows_score(labels_true,)	
metrics.homogeneity_completeness_v_measure()	
metrics.homogeneity_score(labels_true,)	
metrics.mutual_info_score(labels_true,)	
metrics.normalized_mutual_info_score([,])	
metrics.silhouette_score(X, labels[,])	
metrics.silhouette_samples(X, labels[, metric])
metrics.v_measure_score(labels_true, labels_pred)	

二、评价函数说明:

1. 轮廓系数(Silhouette Coefficient)

  1. 函数:
    def silhouette_score(X, labels, metric=‘euclidean’, sample_size=None,
    random_state=None, **kwds):

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


2. CH分数(Calinski Harabasz Score )

  1. 函数:
    def calinski_harabasz_score(X, labels):
  2. 函数值说明:
    类别内部数据的协方差越小越好,类别之间的协方差越大越好,这样的Calinski-Harabasz分数会高。 总结起来一句话:CH index的数值越大越好。

3. 戴维森堡丁指数(DBI)——davies_bouldin_score

  1. 函数:
    def davies_bouldin_score(X, labels):
  2. 函数值说明:
    注意:DBI的值最小是0,值越小,代表聚类效果越好。

完整示例

python">#!/usr/bin/env python
# encoding: utf-8
'''
@Author  : pentiumCM
@Email   : 842679178@qq.com
@Software: PyCharm
@File    : iris_hierarchical_cluster.py
@Time    : 2020/4/15 23:55
@desc	 : 鸢尾花层次聚类
'''

from sklearn import datasets
import numpy as np
import matplotlib.pyplot as plt
from sklearn import preprocessing
from sklearn.cluster import AgglomerativeClustering
from scipy.cluster.hierarchy import linkage, dendrogram
from sklearn.decomposition import PCA
from mpl_toolkits.mplot3d import Axes3D

from sklearn import metrics

# 定义常量
cluster_num = 3

# 1. 导入数据集
iris = datasets.load_iris()
iris_data = iris.data

# 2. 数据预处理
data = np.array(iris_data)
std_scaler = preprocessing.StandardScaler()
data_M = std_scaler.fit_transform(data)

# 3. 绘制树状图
plt.figure()
Z = linkage(data_M, method='ward', metric='euclidean')
p = dendrogram(Z, 0)
plt.show()

# 4. 模型训练
ac = AgglomerativeClustering(n_clusters=cluster_num, affinity='euclidean', linkage='ward')
ac.fit(data_M)

# 聚类
label_list = ac.fit_predict(data_M)
for i in range(len(label_list)):
    if i % 50 == 0:
        print()
    else:
        print(label_list[i], end=" ")

print()

# 平面聚类的每一簇的元素
reslist = [[] for i in range(cluster_num)]
# 遍历聚类中每个簇的元素
for i in range(len(label_list)):
    label = label_list[i]
    # 遍历每一类
    reslist[label].append(data_M[i, :])

data_M = np.array(data_M.reshape((-1, 4)))
# 聚类结果可视化
pca = PCA(n_components=3)
pca.fit(data_M)
pca_data = pca.transform(data_M)

# 定义三维坐标轴
fig = plt.figure()
ax1 = plt.axes(projection='3d')

# 绘制散点图
zd = pca_data[:, 0]
xd = pca_data[:, 1]
yd = pca_data[:, 2]

colors = []
for label in label_list:
    if label == 0:
        colors.append('r')
    elif label == 1:
        colors.append('y')
    elif label == 2:
        colors.append('g')
    elif label == 3:
        colors.append('violet')

for i in range(len(label_list), data_M.shape[0]):
    colors.append('black')

ax1.scatter3D(xd, yd, zd, cmap='Blues', c=colors)
plt.show()

# 检验聚类的性能
# metrics.silhouette_score(X, labels[, …])
cluster_score_si = metrics.silhouette_score(data_M, label_list)

print("cluster_score_si", cluster_score_si)

cluster_score_ch = metrics.calinski_harabasz_score(data_M, label_list)
print("cluster_score_ch:", cluster_score_ch)

# DBI的值最小是0,值越小,代表聚类效果越好。
cluster_score_DBI = metrics.davies_bouldin_score(data_M, label_list)
print("cluster_score_DBI :", cluster_score_DBI)

运行结果:

python">1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 
0 0 2 0 2 0 2 0 2 2 0 2 0 2 0 2 2 2 2 0 0 0 0 0 0 0 0 0 2 2 2 2 0 2 0 0 2 2 2 2 0 2 2 2 2 2 0 2 2 
0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
cluster_score_si 0.4466890410285909
cluster_score_ch: 222.71916382215363
cluster_score_DBI : 0.8034665302876753

参考资料

https://blog.csdn.net/qq_27825451/article/details/94436488


http://www.niftyadmin.cn/n/1663835.html

相关文章

c结构体和数组之间的联系

结构体和数组的异同学习的教材说结构体为“超级数组”,所以看看数组和结构体的相似点定义两个简单的结构体和数组并初始化 c99对应的数组指定初始化和结构体指定初始化有相似之处 int a[]{1,[6]23,4} // a[0]1,a[6]23,a[7]4. struct lok { int a; float b; int c[10…

【JavaScript学习笔记】3:变量作用域

局部变量 在函数体内用var声明的是局部变量&#xff0c;在函数结束即销毁&#xff1a; <!DOCTYPE HTML> <HTML> <BODY> </BODY> <HEAD><meta charset"utf-8"><script>//console.log(x); //函数外不可见myfun(); //函数执…

matplotlib 支持中文显示

matplotlib 支持中文显示 import matplotlib.pyplot as plt plt.rcParams[font.sans-serif] [SimHei] # 用来正常显示中文标签 plt.rcParams[axes.unicode_minus] False # 用来正常显示负号

数据结构基础概念和术语

数据结构&#xff08;C语言版&#xff09;&#xff08;第2版&#xff09; 严蔚敏 李冬梅 吴伟民 重要概念绪论 1.数据&#xff1a;客观事物的符号表示&#xff0c;是所有能够输入到计算机并处理的符号总称。 2.数据元素&#xff1a;数据的基本单位 3.如何合理地组织数据、高效地…

SQLServer2005:SQLCLR代码之CLR安全

一、 CLR安全性 在第一篇中&#xff0c; 我们已经讨论了宿主于和在SQL Server内执行的.NET代码的安全环境-从SQL Server的角度来观察SQLCLR代码模块。但是CLR使用其自己的安全模型。一旦SQL Server同意进行所有的许可权检查并且允许代码执行&#xff0c;那么这种模型就会"…

【JavaScript学习笔记】4:查漏补缺1

基础语法上有一些和之前学习的编程语言不一样的地方或者自己不熟悉的地方&#xff0c;特别学习一下。 和!运算符 运算符前面学了&#xff0c;就是要求数据类型和值都相等&#xff1a; 33 true 33 false ! 运算符就是对其取反&#xff0c;只要数据类型不相等&#xff0c;或者…

数据结构_线性表

线性表属于线性结构&#xff0c;是属于同一数据对象的元素组成的有限序列。它在逻辑结构上属于线性结构&#xff0c;在存储结构上可以分别用顺序存储结构和链式存储结构来表示。 线性表顺序存储代码实现链式存储代码实现总结顺序存储 1.线性表的顺序存储结构的表示&#xff08…

机器学习—python 实现网格聚类算法,子空间聚类 CLIQUE算法(pyclustering)

文章目录机器学习—python 实现网格聚类算法&#xff0c;子空间聚类 CLIQUE算法&#xff08;pyclustering&#xff09;一、基于网格聚类原理二、算法实现(一) CLIQUE 算法1. 前言2. 算法过程3. 示例代码参考资料机器学习—python 实现网格聚类算法&#xff0c;子空间聚类 CLIQU…