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区域中心。
算法流程
- 选择聚类的个数k
- 确定聚类中心
- 根据点到聚类中心聚类,确定各个点所属类别
- 根据各个类别数据,更新聚类中心
- 重复以上步骤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)