分类(class )属于有监督学习模型,聚类(cluster )属于无监督学习模型。聚类使用一些算法将样本划分为n个群落,这种算法一般都要使用到欧式距离,用欧式距离来表示两个样本的相似性。
K均值法:随机选择K个样本作为K个聚类中心,计算每个样本到各个聚类中心的欧式距离,将该样本分配到与之距离最近的聚类中心所在的类别中。然后根据所得的的聚类划分,分别计算每个聚类中心的几何中心,将几何中心作为新的聚类中心,重复迭代,直到计算所得几何中心与聚类中心重合或接近重合为止。这里K值必须事先已知,借助某些评估指标,选取最优聚类数。聚类中心的初始选择会影响聚类划分的结果,初始中心一般选取距离较远的样本。
import numpy as np
import sklearn.cluster as sc
import matplotlib.pyplot as mp
x=np.loadtxt('C:/Users/LENOVO/.spyder-py3/m.txt',delimiter=',')
model=sc.KMeans(n_clusters=3)
model.fit(x)
pred_y=model.labels_#获得每个样本的类别标签,一个数组
#pred_y=model.predict(x)与
mp.figure('K-Means Cluster',facecolor='lightgray')
mp.title('K-Means Cluster', fontsize=20)
mp.xlabel('x', fontsize=14)
mp.ylabel('y', fontsize=14)
mp.scatter(x[:,0], x[:,1], c=pred_y,cmap='jet',s=80)
mp.show()
添加上分类边界线,代码如下:
import numpy as np
import sklearn.cluster as sc
import matplotlib.pyplot as mp
x=np.loadtxt('C:/Users/LENOVO/.spyder-py3/m.txt',delimiter=',')
model=sc.KMeans(n_clusters=3)
model.fit(x)
pred_y=model.labels_#获得每个样本的类别标签,一个数组
centers=model.cluster_centers_#聚类中心
#pred_y=model.predict(x)与
#分类边界线
n=500
l,r=x[:,0].min()-1,x[:,0].max()+1
b,t=x[:,1].min()-1,x[:,1].max()+1
grid_x,grid_y=np.meshgrid(np.linspace(l,r,n),
np.linspace(b,t,n))
mesh_x=np.column_stack(
(grid_x.ravel(),grid_y.ravel()))
mesh_z=model.predict(mesh_x)
grid_z=mesh_z.reshape(grid_x.shape)
#画图
mp.figure('K-Means Cluster',facecolor='lightgray')
mp.title('K-Means Cluster', fontsize=20)
mp.xlabel('x', fontsize=14)
mp.ylabel('y', fontsize=14)
mp.pcolormesh(grid_x,grid_y,grid_z,cmap='gray')
mp.scatter(x[:,0], x[:,1], c=pred_y,cmap='jet',s=80)
#画出聚类中心
mp.scatter(centers[:,0],centers[:,1],marker='+',c='gold',s=1000,linewidths=2)
mp.show()



