kmeans聚类可视化

使用matplotli包对kmeans聚类结果可视化
聚类使用sklearn包中的kmeans算法,数据使用numpy随机生成
数据生成代码如下:

1.随机生成100*2的numpy二维数组

da1=np.random.rand(100,2)

2.原数据散点图展示

x=da1[:,0]
y=da1[:,1]
plt.scatter(x,y,s=16)

散点图如下:
kmeans聚类可视化_第1张图片
3.调用kmeans包聚类

#kmeans包的引入
from sklearn.cluster import KMeans
#调用
km = KMeans(n_clusters=3, random_state=0)
y_p2 = km.fit_predict(da1)

4.聚类结果散点图

plt.rcParams['font.sans-serif'] = ['SimHei']
# 使负号可以展示
plt.rcParams['axes.unicode_minus'] = False

plt.scatter(da1[y_p2==0,0], da1[y_p2==0,1], marker='o', s=30, label='簇 1')
plt.scatter(da1[y_p2==1,0], da1[y_p2==1,1], marker='o', s=30, label='簇 2')
plt.scatter(da1[y_p2==2,0], da1[y_p2==2,1], marker='o', s=30, label='簇 3')

plt.title('K-means 聚类散点图')

kmeans聚类可视化_第2张图片

5.辐射图

#计算每个簇的中心点
p1=[np.mean(da1[y_p2==0,0]),np.mean(da1[y_p2==0,1])]
p2=[np.mean(da1[y_p2==1,0]),np.mean(da1[y_p2==1,1])]
p3=[np.mean(da1[y_p2==2,0]),np.mean(da1[y_p2==2,1])]
#中心点数组
p=np.array([p1,p2,p3])
#中心点x,y坐标
p_x=list(p[:,0])
p_y=list(p[:,1])
#画出中心点
plt.scatter(p_x,p_y,marker='*', s=150,c='r')


#画出每个中心点到其簇内的折线
for i in range(len(p_x)):
    zx_x=p_x[i]
    zx_y=p_y[i]
    point_len=len(da1[y_p2==i,])
    for j in range(point_len):
        point_x=da1[y_p2==i,0][j]
        point_y=da1[y_p2==i,1][j]        
        plt.plot([point_x,zx_x],[point_y,zx_y],c='black',linewidth=0.5)

#画出每个点
plt.scatter(da1[y_p2==0,0], da1[y_p2==0,1], marker='o', s=30, label='簇 1')
plt.scatter(da1[y_p2==1,0], da1[y_p2==1,1], marker='o', s=30, label='簇 2')
plt.scatter(da1[y_p2==2,0], da1[y_p2==2,1], marker='o', s=16, label='簇 3')



plt.title('K-means 聚类')

kmeans辐射图如下:
kmeans聚类可视化_第3张图片

你可能感兴趣的:(聚类,python,k-means,matplotlib)