作业3 K均值算法

1、扑克牌手动演练k均值聚类过程:>30张牌,3类

 

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

代码:

from sklearn.datasets import load_iris
import numpy as np
import matplotlib.pyplot as plt

#1、数据准备
iris = load_iris()
iris.data
data = iris.data[:,0]
x = data.reshape(-1,1) #鸢尾花瓣的长度数据
m = x.shape[1]  #样本属性个数
n = len(data)    #样本的个数
k =3         #类中心的个数,即最终分类的类别数

#2、数据初始化
dist = np.zeros([n,k+1])   #距离矩阵
center = np.zeros([k,m])   #初始类中心
new_center = np.zeros([k,m])  #新的类中心
number = 0
#选中心
center = x[:k,:]   #选择前3个样本作为初始类中心

while True:
    #求距离
    for i in range(n):
        for j in range(k):
            dist[i,j] = np.sqrt(sum((x[i,:] - center[j,:])**2))
        # 归类
        dist[i,k] = np.argmin(dist[i,:k])
    #求新类中心
    for i in range(k):
        index = dist[:,k] == i
        new_center[i,:] = np.mean(x[index,:])

    #判定结束
    if(np.all(center == new_center)):
        break
    else:
        center = new_center

print('最终的聚类结果:',dist[:,k])
plt.scatter(x,x,c=dist[:,k],s=50,cmap='rainbow')
plt.show()

 

运行结果:

 

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

代码:

 

运行结果:

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

代码:

 

运行结果:

5、想想k均值算法中可以用来做什么?

(1)利用k均值算法实现图像压缩,运行k均值算法处理图像。

(2)可以根据不同的特征对多种数据进行分类。

posted on 2020-04-14 15:02  carmen-  阅读(288)  评论(0编辑  收藏  举报