3.K均值算法

2). *自主编写K-means算法 ,以鸢尾花花瓣长度数据做聚类,并用散点图显示。(加分题)

 1 import numpy as np
 2 from sklearn.datasets import load_iris
 3 import matplotlib.pyplot as plt
 4 
 5 iris = load_iris()
 6 x = iris.data[:, 1]     # 鸢尾花花瓣长度数据
 7 y = np.zeros(150)
 8 
 9 def initcent(x, k):     # 初始聚类中心数组
10     return x[0:k].reshape(k)
11 
12 def nearest(kc, i):  # 数组中的值,与聚类中心最小距离所在类别的索引号
13     d = (abs(kc - i))
14     w = np.where(d == np.min(d))
15     return w[0][0]
16 
17 def kcmean(x, y, kc, k):  # 计算各聚类新均值
18     l = list(kc)
19     flag = False
20     for c in range(k):
21         m = np.where(y == c)
22         n = np.mean(x[m])
23         if l[c] != n:
24             l[c] = n
25             flag = True  # 聚类中心发生变化
26     return (np.array(l), flag)
27 
28 def xclassify(x, y, kc):
29     for i in range(x.shape[0]):  # 对数组的每个值分类
30         y[i] = nearest(kc, x[i])
31     return y
32 
33 k = 3   #3个聚类中心
34 kc = initcent(x, k)
35 flag = True
36 print(x, y, kc, flag)
37 while flag:
38     y = xclassify(x, y, kc)
39     kc, flag = kcmean(x, y, kc, k)
40 print(y, kc, type(kc))
41 
42 plt.scatter(x,x,c=y,s=50,cmap='rainbow',marker='p',alpha=0.5);
43 plt.show()

运行结果:

3). 用sklearn.cluster.KMeans,鸢尾花花瓣长度数据做聚类,并用散点图显示.

from sklearn.datasets import load_iris
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans

iris=load_iris()
sl=iris.data[:,1]
X=sl.reshape(-1,1)

est=KMeans(n_clusters=3)
est.fit(X)

y_kmeans=est.predict(X)

plt.scatter(X[:,0],X[:,0],c=y_kmeans,s=50,cmap='rainbow');
plt.show()

实验结果:

4). 鸢尾花完整数据做聚类并用散点图显示.

from sklearn.datasets import load_iris
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans

iris=load_iris()
X=iris.data

est=KMeans(n_clusters=3)
est.fit(X)
kc=est.cluster_centers_
y_kmeans=est.predict(X)

print(y_kmeans,kc)
print(kc.shape,y_kmeans.shape,X.shape)
plt.scatter(X[:,0],X[:,1],c=y_kmeans,s=50,cmap='rainbow');
plt.show()

实验结果:

5).想想k均值算法中以用来做什么?

K-Means应用:

K均值算法在机器学习中属于简单易懂容易实现的算法之一,一般用于模式识别或者数据挖掘等等。

posted @ 2020-04-13 20:25  土块  阅读(172)  评论(0编辑  收藏  举报