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('最终的聚类结果为: ',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