手写体数字聚类

手写体数字聚类

Scikit-learn编程库中手写数字数据集1797个样本,每个样本对应一个不太清晰的手写体数字8*8,每个样本包含64列,每一列对应着二维图片的整数值,整数的取值范围0-16,没有缺失值。

#手写体数字聚类
import numpy as np
from matplotlib import pyplot as plt
from sklearn import manifold, datasets
from sklearn.cluster import AgglomerativeClustering
from sklearn.cluster import KMeans
from sklearn.cluster import MeanShift
from sklearn.cluster import DBSCAN
from sklearn.cluster import AffinityPropagation
from sklearn.metrics import v_measure_score

# 加载数据集
X,y = datasets.load_digits(return_X_y=True) #X为特征值,y为标签值 0-9
n_samples, n_features = X.shape #样本数,特征数 1797,64
#--------------------------------------------------------
#可视化聚类
def plot_cluster(X_red,labels,title=None):
    X_min, X_max = np.min(X_red, axis=0), np.max(X_red, axis=0) #X_min,X_max为X_red的取值范围最小值,最大值
    X_red = (X_red - X_min) / (X_max - X_min)#X_red为归一化后的数据
    plt.figure(figsize=(10, 10))
    for i in range(X_red.shape[0]):#遍历X_red的每一行X_red.shape[0]为样本数
        plt.text(X_red[i, 0], X_red[i, 1], str(y[i]),
                 color=plt.cm.viridis(labels[i] / 10.),#标签颜色labels[i]为聚类标签,labels[i]/10.为标签值的颜色
                 fontdict={'weight': 'bold', 'size': 9})#标签字体字体大小

    plt.xticks([])
    plt.yticks([])
    if title is not None:
        plt.title(title, fontsize=16,size=17)
    plt.axis('off')
    plt.tight_layout(rect=(0, 0.03, 1, 0.95))#设置绘图区域rect为图片的位置
    plt.tight_layout(rect=(0, 0.03, 1, 0.95))#设置绘图区域rect为图片的位置
#2D降维
print("computing... embedding")
X_red = manifold.SpectralEmbedding(n_components=2).fit_transform(X)#2D降维
print("done")
#--------------------------------------------------------
#聚类
#AgglomerativeClustering
print("AgglomerativeClustering")
agglomerative = AgglomerativeClustering(n_clusters=10,linkage='ward')#层次聚类
agglomerative_labels = agglomerative.fit(X_red)#聚类
print("done")
agglomerative_labels = agglomerative_labels.labels_#聚类标签
plot_cluster(X_red,agglomerative_labels,"AgglomerativeClustering")
#--------------------------------------------------------
#KMeans
print("computing... KMeans")
kmeans = KMeans(n_clusters=10, random_state=0)
kmeans_labels = kmeans.fit(X_red)
print("done")
kmeans_labels = kmeans_labels.labels_
plot_cluster(X_red,kmeans_labels,"KMeans")
#--------------------------------------------------------
#MeanShift
print("computing... MeanShift")
meanshift = MeanShift()#均值漂移聚类
meanshift_labels = meanshift.fit(X_red)
print("done")
meanshift_labels = meanshift_labels.labels_
plot_cluster(X_red,meanshift_labels,"MeanShift")
#--------------------------------------------------------
#DBSCAN
print("computing... DBSCAN")
dbscan = DBSCAN(eps=0.3, min_samples=10)#DBSCAN聚类
dbscan_labels = dbscan.fit(X_red)
print("done")
dbscan_labels = dbscan_labels.labels_
plot_cluster(X_red,dbscan_labels,"DBSCAN")
#--------------------------------------------------------
#AffinityPropagation
print("computing... AffinityPropagation")
affinity_propagation = AffinityPropagation()#亲和传播聚类AffinityPropagation聚类
affinity_propagation_labels = affinity_propagation.fit(X_red)
print("done")
affinity_propagation_labels = affinity_propagation_labels.labels_
plot_cluster(X_red,affinity_propagation_labels,"AffinityPropagation")
#--------------------------------------------------------
#v_measure_score
print("computing... v_measure_score")
print("AgglomerativeClustering: %0.3f" % v_measure_score(agglomerative_labels, y))
print("KMeans: %0.3f" % v_measure_score(kmeans_labels, y))
print("MeanShift: %0.3f" % v_measure_score(meanshift_labels, y))
print("DBSCAN: %0.3f" % v_measure_score(dbscan_labels, y))
print("AffinityPropagation: %0.3f" % v_measure_score(affinity_propagation_labels, y))
plt.show()

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

结果

AgglomerativeClustering: 层次聚类。0.629 的分数表明这种层次聚类算法在这个数据集上的聚类效果相对较好。
KMeans: K均值聚类。0.635 的分数稍微高于层次聚类,表明 K均值聚类在这个数据集上可能有更好的聚类效果。
MeanShift: 均值漂移聚类。0.464 的分数较低,这可能意味着均值漂移算法在这个数据集上没有产生很紧密的聚类。
DBSCAN: 密度峰值聚类(Density-Based Spatial Clustering of Applications with Noise)。0.000 的分数非常低,这通常表明 DBSCAN 没有找到任何有意义的聚类结构,或者参数设置(如 epsilon 或 min_samples)不适合当前的数据集。
AffinityPropagation: 亲和传播聚类。0.525 的分数表明亲和传播聚类在这个数据集上的聚类效果一般。

  • 8
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值