目录
1、KMeans算法
(1)KMeans算法的原理介绍
KMeans算法的K代表类别数量,Means代表每个类别内样本的均值,所以KMeans算法又称为K-均值算法。KMeans算法以距离作为样本间相似度的度量标准,将距离相近的样本分配至同一个类别。样本间距离的计算方式可以是欧氏距离,曼哈顿距离,余弦相似度等,KMeans算法通常采用欧氏距离来度量各样本间的距离。
KMeans算法的核心思想是:对每个样本点计算离各个中心点的距离,并将该样本点分配给最近中心点代表的类别,一次迭代完成后,根据聚类结果更新每个类别的中心点,然后重复之前操作再次迭代,直到前后两次分类结果没有差别。下面我们以一个简单案例对KMeans算法的原理进行解释,该案例目的是将样本点聚成3个类别(K=3)
(2)KMeans算法的代码实现
使用一些简单的二维数据来说明如何在Python当中实现KMeans算法:
import numpy as np
data = np.array([[3, 2], [4, 1], [3, 6], [4, 7], [3, 9], [6, 8], [6, 6], [7, 7]])
import matplotlib.pyplot as plt
plt.scatter(data[:, 0], data[:, 1], c="red", marker='o', label='samples')
plt.legend()
plt.show()
data[:,0]表示的则是X列的数,同理data[:, 1]表示的则是Y列的数。此外散点图函数scatter()中的参数c表示颜色,maker表示形状,label则表示数据标签,散点图如下所示:
调用Python已经开发好的相关库来进行KMeans的聚类运算,代码如下:
from sklearn.cluster import KMeans
kms = KMeans(n_clusters=2)
kms.fit(data)
使用散点图展示KMeans算法的聚类结果:
plt.scatter(data[label == 0][:, 0], data[label == 0][:, 1], c="red", marker='o', label='class0')
plt.scatter(data[label == 1][:, 0], data[label == 1][:, 1], c="green", marker='*', label='class1')
plt.legend()
使用散点图展示KMeans算法的聚类结果:
我们将K值设为3 :
kms_3 = KMeans(n_clusters=3)
kms_3.fit(data)
label_3 = kms_3.labels_
print(label_3)
plt.scatter(data[label_3 == 0][:, 0], data[label_3 == 0][:, 1], c="red", marker='o', label='class0')
plt.scatter(data[label_3 == 1][:, 0], data[label_3 == 1][:, 1], c="green", marker='*', label='class1')
plt.scatter(data[label_3 == 2][:, 0], data[label_3 == 2][:, 1], c="blue", marker='+', label='class2')
plt.legend()
散点图如下所示: