本文共 1624 字,大约阅读时间需要 5 分钟。
Kmeans是无监督学习的代表,没有所谓的Y。主要目的是分类,分类的依据就是样本之间的距离。比如要分为K类。步骤是:
Kmeans的基本原理是计算距离。一般有三种距离可选:
曼哈度距离:
欧式距离:
余弦距离:
每个簇内到其质心的距离相加,叫inertia。各个簇的inertia相加的和越小,即簇内越相似。(但是k越大inertia越小,追求k越大对应用无益处)
#导入数据from sklearn.datasets import make_blobsimport matplotlib.pyplot as pltX, y = make_blobs(n_samples=500, # 500个样本 n_features=2, # 每个样本2个特征 centers=4, # 4个中心 random_state=1 #控制随机性 )#画出对应的图像位置color = ['red', 'pink','orange','gray']fig, axi1=plt.subplots(1)for i in range(4): axi1.scatter(X[y==i, 0], X[y==i,1], marker='o', s=8, c=color[i] )plt.show()
from sklearn.cluster import KMeansn_clusters=4 #划分类别的数量cluster = KMeans(n_clusters=n_clusters,random_state=0).fit(X)
y_pred=cluster.predict(X)y_pred.shape#数字比较多,只查看其形状(500,)
centroid=cluster.cluster_centers_centroid # 查看质心array([[ -6.08459039, -3.17305983], [ -1.54234022, 4.43517599], [ -7.09306648, -8.10994454], [-10.00969056, -3.84944007]])inertia=cluster.inertia_inertia908.3855684760613
color=['red','pink','orange','gray']fig, axi1=plt.subplots(1)for i in range(n_clusters): axi1.scatter(X[y_pred==i, 0], X[y_pred==i, 1], marker='o', s=8, c=color[i])axi1.scatter(centroid[:,0],centroid[:,1],marker='x',s=100,c='black')
以上是本周对KMeans聚类算法的原来的初步讲解,并对通过代码来实现。
转载地址:http://nwyms.baihongyu.com/