学习笔记 | KMeans聚类 (K均值聚类)
程序员文章站
2022-07-14 19:28:28
...
KMeans算法步骤
- 选中心:随机选取K个样本作为类中心。
- 求距离:计算各样本与各类中心的距离。
- 归类:将各样本归于最近的类中心点。
- 求新类中心:求各类的样本的均值,作为新的类中心。
-
判定结果:若类中心不再发生变动或达到迭代次数,算法结束,否则回到第2步。
举例:鸢尾花数据聚类
from sklearn.datasets import load_iris
import numpy as np
iris = load_iris()
data = iris.data
print(data.shape)
n = len(data)
k = 3
dist = np.zeros([n, k+1])
# 1、选中心
center = data[:k, :]
center_new = np.zeros([k, data.shape[1]])
while True:
# 2、求距离
for i in range(n):
for j in range(k):
dist[i, j] = np.sqrt(sum((data[i, :] - center[j, :])**2))
dist[i, k] = np.argmin(dist[i, :k]) # 3、归类
for i in range(k): # 4、求新类中心
index = dist[:, k] == i
center_new[i, :] = data[index, :].mean(axis=0)
if np.all(center == center_new): # 5、判定结束
break
center = center_new
dist
例子:
from sklearn.datasets import load_iris
from sklearn.cluster import KMeans
iris = load_iris()
model = KMeans(n_clusters=3).fit(iris.data)
model.labels_
- 自行完成对聚类结果的评估。