3.K均值算法

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

 

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

代码:

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

# 1.数据准备
iris=load_iris()
data=iris['data']
# data = iris.data[:,0]
# x = data.reshape(-1,1)
m=data.shape[1] #样本的属性个数 4列
n=len(data) #样本的个数 150行
k=3 #类中心个数,即最终分类的类别数
# 2.数据初始话
dist=np.zeros([n,k+1]) #距离矩阵
center=np.zeros([k,m]) #初始类中心
new_center=np.zeros([k,m]) #新的类中心
# 选中心
center=data[:k,:] #选前3个样本作为初始类中心
# number=0 #计数归类了多少次
# 求距离
while True:
# new_center = np.zeros([k, m]) # 新的类中心
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])
#新的类中心
for i in range(k):
index=dist[:,k]==i
new_center[i,:]=np.mean(data[index,:])
# 判定结束
if (np.all(center==new_center)):
break
else:
center=new_center
# number = number + 1
# print('聚类分析迭代次数:',number)
print('最终聚类结果:',dist[:,k])

截图:

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

代码:

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

iris = load_iris() #加载数据
x = iris.data[:,1].reshape(-1,1) #实验数据,并将数据处理,变二维数组
km_model = KMeans(n_clusters=3) #构建模型
km_model.fit(x) #模型训练
# km_model.fit(iris['data']) #模型训练
y = km_model.predict(x) #模型预测
print("查看聚类结果:",y)
# km_model.labels_ #查看聚类结果

#散点图
plt.scatter(x[:,0],x[:,0],c=y,s=50,cmap='rainbow',marker='p',alpha=0.5);
plt.show()

截图:

 

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

代码:

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

iris = load_iris() #加载数据
x = iris.data #实验数据
km_model = KMeans(n_clusters=3) #构建模型
km_model.fit(x) #模型训练
# km_model.fit(iris['data']) #模型训练
y = km_model.predict(x) #模型预测
print("查看聚类结果:",y)
# km_model.labels_ #查看聚类结果

#散点图
plt.scatter(x[:,2],x[:,3],c=y,s=50,cmap='rainbow',marker='p',alpha=0.5);
plt.show()

截图:

 

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

现在可以用来商务决策、图像识别、数据识别,甚至一些交通事故事件的累积,事故产生原因的累计,然后数据的分析、预测,从而做到可以有效避免交通事故的发生。

原文地址:https://www.cnblogs.com/q1uj1e/p/12701394.html