sklearn中应用CH系数进行聚类结果的评估

  • 发布日期:2019-10-25
  • 难度:中等
  • 类别:聚类分析、CH系数、聚类结果的评估
  • 标签:Python、sklearn.metrics.calinski_harabaz_score

1. 问题描述

如下程序是scikit-learn中运用轮廓系数值来评估聚类最佳数目的一个实例。应用的数据集为sklearn中的make_blobs的10000个数据点,最佳聚类数目设为4类。

2. 程序实现

In [11]:
#应用CH系数进行簇评估实例
import numpy as np
import matplotlib.pyplot as plt
from sklearn import metrics
from sklearn.datasets.samples_generator import make_blobs
from sklearn.cluster import KMeans
# X为样本特征,Y为样本簇类别, 共10000个样本,每个样本2个特征,共4个簇,簇中心在[-2,-2], [0,0],[3,3], [5,5], 簇方差分别为[0.6, 0.2, 0.2,0.2]
X, y = make_blobs(n_samples=10000, n_features=2, centers=[[-2,-2], [0,0], [3,3], [5,5]], cluster_std=[0.6, 0.2, 0.2, 0.2],random_state =9)
#设置图像窗口为2行2列,当前位置为1
plt.subplot(221)                 
plt.scatter(X[:, 0], X[:, 1], marker='o')
#聚为2类
y_pred = KMeans(n_clusters=2, random_state=9).fit_predict(X)
plt.subplot(222)
plt.scatter(X[:, 0], X[:, 1], c=y_pred)
print('聚为两类的CH系数为:')
print(metrics.calinski_harabaz_score(X, y_pred))
#聚为3类
y_pred = KMeans(n_clusters=3, random_state=9).fit_predict(X)
#另一种表示,逗号可去掉
plt.subplot(223)                  
plt.scatter(X[:, 0], X[:, 1], c=y_pred)
print('聚为三类的CH系数为:')
print(metrics.calinski_harabaz_score(X, y_pred))
#聚为4类
y_pred = KMeans(n_clusters=4, random_state=9).fit_predict(X)
plt.subplot(224)
plt.scatter(X[:, 0], X[:, 1], c=y_pred)
print('聚为四类的CH系数为:')
In [ ]: