展开
拓展 关闭
订阅号推广码
GitHub
视频
公告栏 关闭

聚类算法(一)

  • 查看

  • 案例1

import sklearn.cluster as sc
import numpy as np
import matplotlib.pyplot as mp

# 一维数据 划分成3类 找点  三维 四维 一样的画法。
# 分类(class)与聚类(cluster)不同(物以类聚),分类是有监督学习模型,聚类属于无监督学习模型。聚类讲究使用一些算法把样本划分为n个群落。一般情况下,这种算法都需要计算欧氏距离
# K均值算法 KMeans 聚类算法
# 第一步:随机选择k个样本作为k个聚类的中心,计算每个样本到各个聚类中心的欧氏距离,将该样本分配到与之距离最近的聚类中心所在的类别中。
# 第二步:根据第一步所得到的聚类划分,分别计算每个聚类的几何中心,将几何中心作为新的聚类中心,重复第一步,直到计算所得几何中心与聚类中心重合或接近重合为止。

# 读取样本# 读取样本 一列x 一列y  没有输出 人为分成4堆
x = np.loadtxt('.\multiple3.txt', delimiter=',')

# 划分3个聚类
model = sc.KMeans(n_clusters=3)
# 拟合  训练
model.fit(x)
# 结果一样 预测某个点 是属于哪一类的。。。  如果有了新的样本点 。你再去调用predict 方法去预测 属于 哪一类 。。。。
# pred_y = model.predict(x)
#  0 1 2 3
pred_y = model.labels_
# 打印出所有的label
print(pred_y, "聚成多少类")
print(model.cluster_centers_, " 聚类中心")

# 输出每个点所属的聚类中心
for i in range(len(x)):
    print("Point:", x[i], " belongs to cluster:", pred_y[i], " with center:", model.cluster_centers_ [pred_y[i]])
# 在这个例子中,我们使用了scikit-learn库中的KMeans类,将数据集X分成3个聚类。我们通过调用fit()方法来训练KMeans模型,
# 然后使用cluster_centers_属性获取聚类中心。最后,我们使用labels_属性获取每个点所属的聚类中心标签,并使用这些标签来确定每个点所属的聚类中心。

# 绘制图像
mp.figure('KMeans', facecolor='lightgray')
mp.title('KMeans', fontsize=16)
# 绘制分类边界线
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()))
grid_z = model.predict(mesh_x)
# 把grid_z 变维:(500,500)
grid_z = grid_z.reshape(grid_x.shape)
mp.pcolormesh(grid_x, grid_y, grid_z, cmap='gray')

mp.scatter(x[:,0], x[:,1], c=pred_y, cmap='brg_r',	label='Samples', s=80)
centers = model.cluster_centers_
# 获取训练结果的聚类中心 图四个中心点
# 获取训练结果的聚类中心
print(centers)
mp.scatter(centers[:,0], centers[:,1], s=1000,	marker='+', color='yellow', label='centers')
# mp.scatter(centers[:,0], centers[:,1], s=1000,marker='+', color='yellow', label='centers')

mp.legend()
mp.show()
查看详情
  • 控制台打印
[1 1 0 2 1 2 0 2 1 1 0 2 1 1 0 2 1 1 0 2 1 1 0 2 1 1 0 2 1 1 0 2 1 1 0 2 1
 1 0 2 1 1 0 2 1 1 0 2 1 1 0 2 1 1 0 2 1 1 0 2 1 1 0 2 1 1 0 2 1 1 0 2 1 1
 0 2 1 1 0 2 1 1 0 2 1 1 0 2 1 1 0 2 1 1 0 2 0 1 0 2 1 1 0 2 1 1 0 2 1 1 0
 2 1 1 0 2 1 1 0 2 1 1 0 2 1 1 0 2 1 1 0 2 1 2 0 2 1 1 0 2 1 1 0 2 1 1 0 2
 1 1 0 2 1 2 0 2 1 1 0 2 1 1 0 2 1 1 0 2 1 1 0 2 1 1 0 2 1 1 0 2 1 1 0 2 1
 1 0 2 1 1 0 2 1 1 0 2 1 1 0 2] 聚成多少类
[[5.91196078 2.04980392]
 [2.40645833 3.51822917]
 [6.87283019 5.66490566]]  聚类中心
Point: [ 1.96 -0.09]  belongs to cluster: 1  with center: [2.40645833 3.51822917]
Point: [2.84 3.16]  belongs to cluster: 1  with center: [2.40645833 3.51822917]
Point: [4.74 1.84]  belongs to cluster: 0  with center: [5.91196078 2.04980392]
//。。。
Point: [7.26 5.35]  belongs to cluster: 2  with center: [6.87283019 5.66490566]
[[5.91196078 2.04980392]
 [2.40645833 3.51822917]
 [6.87283019 5.66490566]]
  • 输出
posted @ 2024-01-08 15:36  DogLeftover  阅读(6)  评论(0编辑  收藏  举报