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

a 先随机抽出三张牌,分别是2、10、8作为中心点,图片数字为当前中心点的牌的数量

 

b 经过聚类运算得出新的中心点  3、11、5

 

 

 c 再次进行聚类,得出最终的中心点,2、11、5

 

 

 

 

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

代码:

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

k = int(input("请输入类中心个数:"))
iris = load_iris()
data = iris.data[:, 2]  # 获取花瓣的长度
center = np.random.choice(data , k)  # 随机取data中的k个数据作为第一次样本中心
n = len(data)
dist = np.zeros(n)  # 获取每个点到样本中心的距离

flag = True
while flag:
    new_center = np.zeros(k)  # 定义一个新的中心
    for i in range(n):
        d = np.zeros(k)  # 定义一个存放距离的数组
        for j in range(k):
            d[j] = (abs(center[j] - data[i]))  # 计算这个点到中心点的距离
        dist[i] = np.argmin(d)  # 找出最小距离的下标

    # 计算各聚类新均值
    for c in range(k):  # 按照下标来聚类
        index = dist == c
        new_center[c] = np.mean(data[index])  # 计算新聚类中心

    # 判断新中心是否与原先中心相等,若相等,则结束聚类
    if np.all(center == new_center):
        break
    else:
        center = new_center
print('最终的聚类结果为:\n',dist)
plt.scatter(data, data, c=dist, s=50, cmap="Paired")
plt.show()

 

运行截图:

散点图:

 

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

代码:

 

 运行散点图:

 

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

代码:

 

散点图:

 

 

 

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

1、寻找聚类中心

2、计算聚类中心均值

3、K均值算法的可视化实现

4、利用K均值算法实现图像压缩

参考:简书 K均值算法的实现和应用 https://www.jianshu.com/p/889fdf63751b