用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
三、部分结果图片:
下一篇:
头结点的含义以及引入头结点的作用