代码改变世界

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均值算法是用来分类预测的算法,比如生活中我们可以利用个人的体重来区分健康、肥胖和瘦弱的人,还有利用收入来区分贫穷,小康和富裕的人,又或者是医学上的利用:区分脑血管是否有堵塞状况。