3.K均值算法

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

from sklearn.datasets import load_iris
import numpy as np
import matplotlib.pyplot as plt
#(1)首先使用Python实现K-Means算法,并对鸢尾花进行聚类分析。
iris = load_iris()
data = iris['data']
data.shape
n = len(data) #样本个数
m = data.shape[1] #样本属性个数
k = 3 #类中心个数
dist = np.zeros([n, k+1]) #初始化距离矩阵,最后一列存放每个样本的类别

#1、选中心
center = data[:k, :] #初始类中心,即选取前三个样本作为初始类中心
center_new = np.zeros([k, m])
while True:
#2、求距离
for i in range(n):
for j in range(k):
dist[i, j] = np.sqrt(sum((data[i, :] - center[j, :])**2))
dist[i, k] = np.argmin(dist[i, :k])#3、归类

#4、求新类中心
for i in range(k):
index = dist[:, k] == i #判断距离矩阵中最后一列归属为哪一类
data[index, :].mean(axis = 0)
center_new[i, :] = data[index, :].mean(axis = 0)

#5、判定结束
if np.all(center == center_new): #判断新的类中心是否与上一轮的类中心相同
break
else:
center = center_new #更新类中心
print('150个样本的归类:',dist[:, k])
plt.scatter(data, data, c=dist, s=5, cmap="rainbow")
plt.show()

 

 

2). 用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()

 

 

 

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

import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
from sklearn.datasets import load_iris

iris=load_iris()
x=iris.data
y=KMeans(n_clusters=3)
y.fit(x)
y_pre=y.predict(x)

plt.scatter(x[:,2],x[:,3],c=y_pre,s=50,cmap='rainbow',alpha=0.5)
plt.show()

 

 

 

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

  例如淘宝利用大数据进行k均值算法分析,来分析出个人的喜好等来进行首页推荐。

posted on 2020-04-14 17:32  chenjd  阅读(208)  评论(0编辑  收藏  举报

导航