KMeans与MiniBatchKMeans

本文通过生成的二维数据集演示了K-Means聚类算法的应用,并使用不同的K值进行聚类实验,同时利用Calinski-Harabasz Index评估聚类效果,最后比较了MiniBatchKMeans算法的表现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#首先随机创建一些二维数据作为训练集,选择二维特征数据,主要是方便可视化
from numpy import concatenate,column_stack,row_stack
import numpy as np
import matplotlib.pyplot as plt
#%matplotlib inline
from sklearn.datasets.samples_generator import make_blobs
# X为样本特征,Y为样本簇类别, 共1000个样本,每个样本4个特征,共4个簇,
#簇中心在[-1,-1], [0,0],[1,1], [2,2], 簇方差分别为[0.4, 0.2, 0.2]
X, y = make_blobs(n_samples=1000,  centers=[[-1,-1], [0,0], [1,1],[2,2]] 
,cluster_std=[0.4, 0.2, 0.1,0.2],  random_state =9)
plt.scatter(X[:, 0], X[:, 1], marker='o')
plt.show()

#现在我们来用K-Means聚类方法来做聚类,首先选择k=2
from sklearn.cluster import KMeans
y_pred = KMeans(n_clusters=2, random_state=9).fit_predict(X)
plt.scatter(X[:, 0], X[:, 1], c=y_pred)
plt.show()

#现在我们来看看我们用Calinski-Harabasz Index评估的聚类分数
from sklearn import metrics
score=metrics.calinski_harabaz_score(X,y_pred)
print(score)

#现在k=3来看看聚类效果
y_pred = KMeans(n_clusters=3, random_state=9).fit_predict(X)
plt.scatter(X[:, 0], X[:, 1], c=y_pred)
plt.show()
score=metrics.calinski_harabaz_score(X,y_pred)
print(score)

#现在我们看看k=4时候的聚类效果
y_pred = KMeans(n_clusters=4, random_state=9).fit_predict(X)
plt.scatter(X[:, 0], X[:, 1], c=y_pred)
plt.show()
score=metrics.calinski_harabaz_score(X,y_pred)
print(score)#分数越高,评估聚类的准确度越高

#现在我们再看看用MiniBatchKMeans的效果,我们将batch size设置为200. 由于我们的4个簇都是凸的,所以其实batch size的值只要不是非常的小,对聚类的效果影响不大
from sklearn.cluster import MiniBatchKMeans
for index, k in enumerate((2,3,4,5)):
    plt.subplot(2,2,index+1)
    y_pred = MiniBatchKMeans(n_clusters = k, batch_size = 200,random_state=9).fit_predict(X)
    score = metrics.calinski_harabaz_score(X, y_pred)
    plt.scatter(X[:, 0], X[:, 1], c=y_pred)
    plt.text(.99, .01, ('k=%d, score: %.2f' % (k,score)),
             transform=plt.gca().transAxes, size = 10,
             horizontalalignment = 'right')
plt.show()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值