Cluster (KMeans实现)
1. KMeans 介绍及符号说明
给定样本集 \(D = \{ x_1, x_2, ..., x_m \}\),\(\text{KMeans}\) 算法针对聚类所得的簇划分 \(\mathcal C = \{ C_1, C_2, ..., C_k \}\)(分为 \(k\) 类) 最小化平方差:
- 平方差
其中 \(x\) 为当前簇 \(C_i\) 中的样本向量,\(\mu_i\) 为簇 \(C_i\) 的均值向量
- 均值向量
-
样本向量 \(x_j\) 与均值向量 \(\mu_i\) 之间的距离,\(d_{ji} = \text{dist}_f(x_j, \mu_i)\),其中函数 \(f\) 可以是 闵可夫斯基距离,欧几里得距离 或者 曼哈顿距离。
- 闵可夫斯基距离
- 欧几里得距离
当 \(p\) 取2时,闵可夫斯基距离即为欧几里得距离
- 曼哈顿距离
当 \(p\) 取1时,闵可夫斯基距离即为曼哈顿距离
2. KMeans算法过程
PS: 一般情况下,为了避免运行时间过长,会设置一个最大迭代轮数或者最小调整幅度阈值,当超过最大轮数或者小于最小阈值时,退出循环。
3. KMeans 代码
from sklearn import datasets
from sklearn.cluster import KMeans
from sklearn.preprocessing import MinMaxScaler
from sklearn.metrics import accuracy_score
df = datasets.load_iris()
X, y = df['data'], df['target']
X = MinMaxScaler().fit_transform(X)
# 设定初始质心 KMeans是无监督学习 为了让结果和target进行比较 人工设置初始质心
init = np.array([X[y==0].mean(axis=0), X[y==1].mean(axis=0), X[y==2].mean(axis=0)])
print("初始质心: \n", init, end="\n\n")
# 分成三类
model = KMeans(n_clusters=3, n_init=init)
# 模型训练
model.fit(X)
# 输出迭代之后的质心
centroid = model.cluster_centers_
print("经过迭代之后质心为: \n", centroid, end="\n\n")
# 测试集 测试结果显示
y_pred = model.predict(X)
# 模型准确率测试
accuracy = accuracy_score(y, y_pred)
print("测试准确率为: ", accuracy, end="\n\n")
标签:Clustering,means,text,sum,KMeans,距离,mu,聚类,质心
From: https://www.cnblogs.com/MAKISE004/p/17811601.html