在文章
今天我用Python手写了一个K-means算法,来完成同样的功能。
聚类是数据挖掘中一种非常重要的学习流派,指将未标注的样本数据中相似的分为同一类,正所谓“物以类聚,人以群分”。
K-means是聚类算法中最为简单、高效的,核心思想:由用户指定k个初始中心,以作为聚类的类别,重复迭代更新数据集的中心直至算法收敛。
代码有点长,关键代码我会进行分析,其余代码没必要进行分析。
首先,我们定义一个计算距离的方法,我采用的是欧氏距离。
def get_euclidean_distance(_pixel, _center):
"""
获得欧氏距离
:param _pixel: 像素
:param _center: 中心
:return: 欧氏距离
"""
d_pow_2 = 0
for _channel_index in range(n_channels):
d_pow_2 += pow(_pixel[_channel_index] - _center[_channel_index], 2)
return np.sqrt(d_pow_2)
然后定义一个方法来计算中心,方便之后进行迭代。
def get_nearest_center(_pixel):
"""
获得最近的中心
:param _pixel: 像素
:return: 最近的中心的index
"""
min_center