3.K均值算法

4. 作业:

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

第一种划分:

 第二种划分:

 

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

 代码如下:

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

iris = load_iris()
data = iris.data[:, 2]     # 样本的花瓣长度
data.shape
n = len(data)           # 样本个数
k = 3           # 类中心的个数
dist = np.zeros([n, k+1])       # 初始化距离矩阵,最后一列存放每一个样本的类别(归属的类)
# 1、选中心
center = random.sample(list(data), k)        # 初始化类中心,即选取前3个样本作为初始类中心
centerNew = np.zeros(k)
while True:
    for i in range(n):
        for j in range(k):
            dist[i, j] = np.sqrt((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()

    # 5、判断结束
    if np.all((center == centerNew)):   # 判断新的类中心是否与上一轮的
        break
    else:
        center = centerNew
print('150个样本的归类:', dist[:, k])
plt.rcParams['font.sans-serif'] = ['SimHei']  # 解决中文乱码
plt.title('鸢尾花花瓣K-Means算法')
plt.scatter(data, data, c=dist[:, k], cmap='rainbow')
plt.show()

运行效果图如下:

 

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

代码如下图:

 运行结果图:

 

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

代码如下图:( 需要引入的包见上一题 )

 运行结果图:

 

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

答:K均值算法能够把样本根据需要划分为具有不同特征的样本集,以这些样本集来训练出来的模型可以很好的起到预测的作用。例如:一堆有明确直径的球体,可以通过K均值算法很快的分出大、中、小球。

 

posted @ 2020-04-16 13:28  ·无语·  阅读(193)  评论(0编辑  收藏  举报