K均值算法
2020-04-16 16:00 当地一个比较帅的人 阅读(263) 评论(0) 收藏 举报
1). 扑克牌手动演练k均值聚类过程:>30张牌,3类
|
第一次分类
|
第一类中心 |
3 |
6 |
11 |
|
|
样本数 |
7 |
13 |
12 |
|
|
和 |
21 |
86 |
124 |
|
|
均值 |
3 |
6.62 |
10.33 |

|
第二次分类
|
第二类中心 |
3 |
7 |
10 |
|
|
样本数 |
7 |
13 |
12 |
|
|
和 |
21 |
86 |
124 |
|
|
均值 |
3 |
6.62 |
10.33 |

2). *自主编写K-means算法 ,以鸢尾花花瓣长度数据做聚类,并用散点图显示。(加分题)
from sklearn.datasets import load_iris import numpy as np import matplotlib.pyplot as plt iris = load_iris() data = iris['data'] data.shape data[:,0] n = len(data) #样本个数 m = data.shape[1] #样本属性个数 k = 3 #类中心的个数 dist = np.zeros([n, k+1]) #初始化距离矩阵,最后一列存放每个样本的类别 #1.选中心 center = data[:k, :] #初始类中心,选取前3个样本作为初始类中心 centernew = np.zeros([k, m]) while True: for i in range(n): for j in range(k): dist[i, j] = np.sqrt(sum((data[i, :] - center[j, :])**2))#2.求距离 dist[i, k] = np.argmin(dist[i, :k])#3.归类 #4.求新类中心 for i in range(k): index = dist[:, k] == i #判断距离矩阵中最后一列归属为哪一类 centernew[i, :] = data[index, :].mean(axis=0) #5.判定结果 if np.all((center == centernew)): break else: center = centernew data=iris.data[:,1] x = data.reshape(-1,1) y_p = dist[:, k] plt.scatter(x[:,0],x[:,0],c=y_p,cmap='rainbow') plt.show()

3). 用sklearn.cluster.KMeans,鸢尾花花瓣长度数据做聚类,并用散点图显示.
import matplotlib.pyplot as plt from sklearn.cluster import KMeans from sklearn.datasets import load_iris iris=load_iris() data=iris.data[:,1] x=data.reshape(-1,1) y=KMeans(n_clusters=3) y.fit(x) y_pre=y.predict(x) plt.scatter(x[:,0],x[:,0],c=y_pre,s=50,cmap='rainbow') plt.show()

4). 鸢尾花完整数据做聚类并用散点图显示.
import matplotlib.pyplot as plt from sklearn.cluster import KMeans from sklearn.datasets import load_iris data=load_iris() x=data.data y=KMeans(n_clusters=3) y.fit(x) y_pre=y.predict(x) plt.scatter(x[:,2],x[:,3],c=y_pre,s=100,cmap='rainbow',alpha=0.5) plt.show()

5).想想k均值算法中以用来做什么?
k均值算法是用来分类预测的算法,比如生活中我们可以利用个人的体重来区分健康、肥胖和瘦弱的人,还有利用收入来区分贫穷,小康和富裕的人,又或者是医学上的利用:区分脑血管是否有堵塞状况。
浙公网安备 33010602011771号