3K均值算法
1). 扑克牌手动演练k均值聚类过程:>30张牌,3类
30张牌
第一次划分

第二次划分

2). *自主编写K-means算法 ,以鸢尾花花瓣长度数据做聚类,并用散点图显示。(加分题)
源代码:
from sklearn.datasets import load_iris
import numpy as np
iris = load_iris()
data = iris['data']
data.shape
data[:,0]
n = len(data) #样本个数
m = data.shape[1] #样本属性个数
k = 3 #类中心的个数
dist = np.zeros([n, k+1]) #初始化距离矩阵,最后一列存放每个样本的类别
#1.选中心
center = data[:k, :] #初始类中心,选取前3个样本作为初始类中心
centernew = np.zeros([k, m])
while True:
for i in range(n):
for j in range(k):
dist[i, j] = np.sqrt(sum((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(axis=0)
#5.判定结果
if np.all((center == centernew)):
break
else:
center = centernew
print('150个样本的归类:', dist[:, k])
结果:

3). 用sklearn.cluster.KMeans,鸢尾花花瓣长度数据做聚类,并用散点图显示.
源代码:
import matplotlib.pyplot as plt from sklearn.cluster import KMeans from sklearn.datasets import load_iris iris=load_iris() data=iris.data[:,1] x=data.reshape(-1,1) y=KMeans(n_clusters=3) y.fit(x) y_pre=y.predict(x) plt.scatter(x[:,0],x[:,0],c=y_pre,s=50,cmap='rainbow') plt.show()
结果:

4). 鸢尾花完整数据做聚类并用散点图显示.
源代码:
import matplotlib.pyplot as plt from sklearn.cluster import KMeans from sklearn.datasets import load_iris data=load_iris() x=data.data y=KMeans(n_clusters=3) y.fit(x) y_pre=y.predict(x) plt.scatter(x[:,2],x[:,3],c=y_pre,s=100,cmap='rainbow',alpha=0.5) plt.show()
结果:

5).想想k均值算法中以用来做什么?
k均值算法就是把所有事物根据划分的点数来按“”较靠近“”进行分类,从而得出一个预测规律。
在生活中,我觉得可以用来测试人们的生活习惯和身材肥胖的关系。

浙公网安备 33010602011771号