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均值算法很快的分出大、中、小球。