本站原创文章,转载请说明来自《老饼讲解-机器学习》ml.bbbdata.com
本文展示一个简单的python实现的k-means实现Demo.并展示最后的聚类结果。
目 的
代码先以5个中心点随机生成150个样本点,
然后尝试用k-means聚类,看能否找出中心点。
聚类过程
使用k-means算法,
先初始化5个聚类中心点,
然后根据k-means的迭代规则,不断调5个聚类中心点的位置,
经过20轮迭代后,输出聚类中心点的位置。
最后,根据样本所属的聚类中心点,给样本标上颜色。
聚类结果
聚类结果如下:
可以看到,每簇样本点都被标上了不同的颜色,说明k-means聚类是成功的。
代码如下
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_blobs
X, y = make_blobs(n_samples=150, random_state=10,centers=5) #生成数据
n_sample = X.shape[0]
#设置k值
k = 5
# plt.scatter(X[:, 0], X[:, 1])
# plt.axis('off')
#随机选择k个样本作为中心
init_idx = np.random.randint(0,n_sample,k)
c = X[init_idx,:]
#聚类过程
c_idx = np.zeros(n_sample)#样本的类别
for t in range(20):
#更新样本所属类别
for i in range(n_sample):
c_idx[i] = np.argmin(((c - X[i])**2 ).sum(axis=1))
# 更新类别中心
for i in range(k):
c[i] = X[c_idx==i].mean(axis=0)
#展示结果,以颜色标示类别
plt.scatter(X[:, 0], X[:, 1], c=c_idx)
plt.axis('off')
聚类结果:
End