用Python实现K-Means算法,以鸢尾花数据为例

一、K-Means算法: 1、随机选取K个样本作为类中心; 2、计算各样本与各类中心的距离; 3、将各样本归于最近的类中心点; 4、求各类的择本均值,作为新的类中心; 5、判定:若类中心不再发生变动或达到迭代次数,算法结束,否则刚回刻第2步。

算法优点: 1、算法简单,易于理解; 2、对球状簇样本聚类效果好; 3、二分k均值等变种算法运行良好,不受初始化问题的影响。

缺点: 1.不能处理非球形簇、不同尺寸和不同密度的簇; 2.对离群点、噪声敏感。

二、代码实现:

from sklearn.datasets import load_iris
import numpy as np
k = 3
iris = load_iris ()
data = iris.data
n = len(data)
dist = np.zeros([n, k+1])
center = data[:k, :]
center_new = np.zeros([k, data.shape[1]])
while True:
    # 2、求距离
    for i in range(n):
        for j in range(k):
            dist[i, j] = np.sqrt((sum(data[i, :]-center[j, :])**2))   #欧氏距离
        dist[i, k] = np.argmin(dist[i, :k])# 3、归类
    for i in range(k):# 4、求新类中心
        index = dist[:, k] == i
        center_new[i, :] = data[index, :].mean(axis=0)
    if np.all(center == center_new):# 5、判定结果
        break
    center = center_new

三、部分结果图片:

经验分享 程序员 微信小程序 职场和发展