第11章节聚类分析

k-means相似性分组

1.1k-means算法聚类
from sklearn.datasets import make_blobs
#创建高斯分布数据
X,y=make_blobs(n_samples=150,
               n_features=2,
               centers=3,
               cluster_std=0.5,
               shuffle=True,
               random_state=0)
import matplotlib.pyplot as plt
plt.scatter(X[:,0],X[:,1],
           c='blue',
           marker='o',
           edgecolors='black',
           s=50)

plt.grid()
plt.show()

在这里插入图片描述

from sklearn.cluster import KMeans
km=KMeans(n_clusters=3,
         init='random',
         n_init=10,
         max_iter=300,#max_iter太大,计算成本太高
         tol=1e-04,
         random_state=0)#tol参数控制集群内误差平方和的变化
y_km=km.fit_predict(X)#每个示例所属的集群的索引

当基于欧氏距离度量把k-均值算法应用到真实数据时,要确保特征度量的比例尺度一致,必要时可以用z-score标准化或最小最大化方法处理。

km.cluster_centers_
array([[ 0.9329651 ,  4.35420712],
       [ 2.06521743,  0.96137409],
       [-1.5947298 ,  2.92236966]])
y_km
array([1, 0, 0, 0, 1, 0, 0, 1, 2, 0, 1, 2, 2, 0, 0, 2, 2, 1, 2, 1, 0, 1,
       0, 0, 2, 1, 1, 0, 2, 1, 2, 2, 2, 2, 0, 1, 1, 1, 0, 0, 2, 2, 0, 1,
       1, 1, 2, 0, 2, 0, 1, 0, 0, 1, 1, 2, 0, 1, 2, 0, 2, 2, 2, 2, 0, 2,
       0, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 2, 2, 0, 1, 1, 0, 0, 1, 1, 1, 2,
       2, 1, 1, 0, 1, 0, 1, 0, 2, 2, 1, 1, 1, 1, 2, 1, 1, 0, 2, 0, 0, 0,
       2, 0, 1, 2, 0, 2, 0, 0, 2, 2, 0, 1, 0, 0, 1, 1, 2, 1, 2, 2, 2, 2,
       1, 2, 2, 2, 0, 2, 1, 2, 0, 0, 1, 1, 2, 2, 2, 2, 1, 1])
#集群和质心画出

#画集群1
plt.scatter(X[y_km==0,0],
           X[y_km==0,1],
           s=50,
           c='green',
           marker='s',
           edgecolors='black',
           label='cluster 1')
#画集群2
plt.scatter(X[y_km==1,0],
           X[y_km==1,1],
           s=50,
           c='orange',
           marker='o',
           edgecolors='black',
           label='cluster 2')
#画集群3
plt.scatter(X[y_km==2,0],
           X[y_km==2,1],
           s=50,
           c='blue',
           marker='v',
           edgecolors='black',
           label='cluster 3')

#画质心
plt.scatter(km.cluster_centers_[:,0],
           km.cluster_centers_[:,1],
           s=250,
           c='red',
           marker='*',
           edgecolors='black',
           label='centeroids')

plt.legend(loc='best')
plt.grid()
plt.show()

在这里插入图片描述

1.2k-means++

要用scikit-learn的Kmeans对象的k-均值++,只需要把k-均值++的参数init设置成’k-means++'。

km1=KMeans(n_clusters=3,
         init='k-means++',
         n_init=10,
         max_iter=300,#max_iter太大,计算成本太高
         tol=1e-04,
         random_state=0)#tol参数控制集群内误差平方和的变化
y_km=km1.fit_predict(X)#每个示例所属的集群的索引
#集群和质心画出

#画集群1
plt.scatter(X[y_km==0,0],
           X[y_km==0,1],
           s=50,
           c='green',
           marker='s',
           edgecolors='black',
           label='cluster 1')
#画集群2
plt.scatter(X[y_km==1
  • 2
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值