KMeans(K均值聚类)算法

K-均值算法:以空间中k个点为中心进行聚类,对最靠近他们的对象归类,是聚类算法中最为基础但也最为重要的算法。

公式

数据点与各簇中心点距离:\(dist(x_i, u_j^t)\)

根据距离归类:\(x_i\in u_{nearest}^t\)

中心更新:\(u_j^{t+1} = {1 \over k}\sum_{x_i\in s_j}{(x_i)}\)

\(S_j\): t时刻第j个区域簇;k: 包含在\(S_j\)范围内点的个数;\(x_i\): 包含在\(S_j\)范围内的点;\(u_j^t\):为t状态下第j区域中心。

算法流程

  1. 选择聚类的个数k
  2. 确定聚类中心
  3. 根据点到聚类中心聚类,确定各个点所属类别
  4. 根据各个类别数据,更新聚类中心
  5. 重复以上步骤3和4,直到收敛(中心点不再变化)

优点

  • 原理简单,容易实现,收敛速度快
  • 参数少,方便使用

缺点

  • 必须设置簇的数量
  • 随机选择初始聚类中心,结果可能缺乏一致性

模型训练

from sklearn.cluster import KMeans

# n_clusters表示需要分为几类
# random_state表示初始化的点
KM = KMeans(n_clusters=3, random_state=0)
KM.fit(X)

# 获取模型确定的中心点:
centers = KM.cluster_centers_

# 准确率计算
from sklearn.metrics import accuracy_score
accuracy = accuracy_score(y, y_predict)

预测结果矫正

y_cal = []
for i in y_predict:
    if i == 0:
        y_cal.append(2)
    elif i == 1:
        y_cal.append(1)
    else:
        y_cal.append(0)
print(y_predict, y_cal)