机器学习三 —— K均值算法
2021-02-16 03:18
标签:info center fit model clu width alt 均值 大量 1). 扑克牌手动演练k均值聚类过程:>30张牌,3类 这里选了40张牌,随机抽取三张牌并以其各自点数作为类中心,第一次是 2 6 9 每次的分类依据就是点数离那个中心近,近就分类到该分类下。第一次分完类,在计算各分类的中心值(该类所有数字求均值),重新得出三个类中心,第二次分类如下 再重复上面的计算步骤,直到类中心不再变动。具体结果如下表所示: 2). *自主编写K-means算法 ,以鸢尾花花瓣长度数据做聚类,并用散点图显示。(加分题) 结果出来后不是很理想,后续再去寻找问题改进,结果如下: 3). 用sklearn.cluster.KMeans,鸢尾花花瓣长度数据做聚类,并用散点图显示. 4). 鸢尾花完整数据做聚类并用散点图显示. 5).想想k均值算法中以用来做什么? k均值算法是一种无监督的分类算法,主要通过大量的特征数据,来做类别的区分,如上面的题,KMeans算法可以用来区分鸢尾花的种类,在现实生活中,也可以对人的体重身高等数据来划分不同身体状况的人群,高矮胖瘦等,也可以通过文学作品的篇幅来分类短篇、长篇作品。 机器学习三 —— K均值算法 标签:info center fit model clu width alt 均值 大量 原文地址:https://www.cnblogs.com/xiaoAP/p/12704464.htmlimport numpy as np;
from sklearn.datasets import load_iris
import matplotlib.pyplot as plt
iris = load_iris()
pl = iris.data[:,2]
n = len(pl) #样本个数
k = 3 #中心个数
dist = np.zeros([n,k+1]) #初始化一个矩阵
center = np.zeros([k])
centerNew = np.zeros([k])
for i in range(k): #避免开头时有一样的中心
for j in range(n):
if pl[j] in center:
continue
else:
center[i] = pl[j]
break
while(True):
for i in range(n):
for j in range(k):
dist[i,j] = np.sqrt((pl[i]-center[j])**2) #计算距离
dist[i,k] = np.argmin(dist[i,:k])
#计算新的中心
for i in range(k):
index = dist[:, k] == i
centerNew[i] = np.mean(pl[index])
#如果前后两次中心相等则跳出,否则继续
if np.all((center == centerNew)):
break
else:
for i in range(k):
center[i] = centerNew[i]
plt.scatter(pl,pl,c=dist[:,k],s=60, cmap=‘rainbow‘)
plt.show()
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
from sklearn.datasets import load_iris
iris = load_iris()
pl = iris.data[:,2]
x = pl.reshape(-1,1)
est = KMeans(n_clusters=3)
est.fit(x)
y_kmeans = est.predict(x)
plt.scatter(x[:,0],x[:,0],c=y_kmeans,s=50, cmap=‘rainbow‘);
plt.show()
irisData = iris.data
KMeans_model = KMeans(n_clusters=3)
KMeans_model.fit(irisData)
pre = KMeans_model.predict(irisData)
plt.scatter(irisData[:,2],irisData[:,3],c=pre, s=50, cmap=‘rainbow‘)
plt.show()