使用K-means进行聚类,用calinski_harabaz_score评价聚类效果

本文通过使用K-means算法进行数据聚类,并运用Calinski-Harabaz Score评估不同簇数量下的聚类效果。实验结果显示,当簇数量为3时,聚类效果最佳。

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

代码如下:

"""
下面的方法是用kmeans方法进行聚类,用calinski_harabaz_score方法评价聚类效果的好坏
大概是类间距除以类内距,因此这个值越大越好

"""
import matplotlib.pyplot as plt
from sklearn.datasets.samples_generator import make_blobs
from sklearn.cluster import KMeans
from sklearn import metrics
"""
下面是生成一些样本数据
X为样本特征,Y为样本簇类别, 共1000个样本,每个样本2个特征,共4个簇,簇中心在[-1,-1], [0,0],[1,1], [2,2],
簇方差分别为[0.4, 0.5, 0.2]
"""
X, y = make_blobs(n_samples=500, n_features=2, centers=[[2,3], [3,0], [1,1]], cluster_std=[0.4, 0.5, 0.2],
                  random_state =9)
"""
首先画出生成的样本数据的分布
"""
plt.scatter(X[:, 0], X[:, 1], marker='o')
plt.show()
"""
下面看不同的k值下的聚类效果
"""
score_all=[]
list1=range(2,6)
#其中i不能为0,也不能为1
for i in range(2,6):
    y_pred = KMeans(n_clusters=i, 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)
    score_all.append(score)
    print(score)
"""
画出不同k值对应的聚类效果
"""
plt.plt(list1,score_all)
plt.show()

 

原来的数据分布图为:

k=2时,聚类情况:

k=3时,聚类情况:

k=4时的聚类效果:

k=5时的聚类效果:

不同k值对应的聚类效果折线图:

我们可以看到,k=3时,哪个值最大,效果最好。

posted on 2019-04-23 19:23 你好啊渔夫 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/hellojiaojiao/p/10758408.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值