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