[机器学习与scikit-learn-24]:算法-聚类-KMeans代码示例

作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客

本文网址:


目录

第1章 KMeans类介绍

1.1 类参数

 1.2 类属性 

1.3 成员函数

第2章 代码示例

2.1 创建样本数据

2.2 显示原始样本数据

2.3 显示人为分类的样本数据(带颜色,用于比较)

2.4 建立聚类模型并进行训练

2.5 可视化训练后的效果

2.5 不同聚类类别的比较


第1章 KMeans类介绍

1.1 类参数

lass sklearn.cluster.KMeans (n_clusters=8, init=’k-means++’, n_init=10, max_iter=300,  tol=0.0001, precompute_distances=’auto’, verbose=0, random_state=None, copy_x=True, n_jobs=None, algorithm=’auto’)

 

 1.2 类属性 

1.3 成员函数

第2章 代码示例

2.1 创建样本数据

from sklearn.datasets import make_blobs
import matplotlib.pyplot as plt

#自己创建数据集
# n_samples:样本个数
# n_features:特征输
# centers:块的个数
# random_state:随机种子
n_samples = 500
centers = 4
X, y = make_blobs(n_samples=n_samples, n_features=2, centers=centers, random_state=1)
print(X.shape)
print(y.shape)

(500, 2)
(500,)

2.2 显示原始样本数据

# 散点图可视化样本
X0 = X[:, 0] # 切片取第0列数据作为X0.
X1 = X[:, 1] # 切片取第1列数据作为X1.
print(X[0][0], X[0][1])
print(X0[0])
print(X1[0])

fig, ax1 = plt.subplots(1)
ax1.scatter(X0, X1,
            marker='o' #点的形状 ,s=8 #点的大小
           )

plt.show()
#如果我们想要看见这个点的分布,怎么办?
-6.923241645991934 -10.669531965589794
-6.923241645991934
-10.669531965589794

备注: 所有样本点还没有分类

2.3 显示人为分类的样本数据(带颜色,用于比较)

# 可视化目标图像
color = ["red","pink","orange","gray"]
fig, ax1 = plt.subplots(1)

for i in range(4):
    # 选出 第0列,行=i的数据集
    X0 = X[y==i, 0]
    # 选出 第1列,行=i的数据集
    X1 = X[y==i, 1]
    
    # 分别用不同的颜色代表不同的数据集
    ax1.scatter(X0, X1 
                ,marker='o' #点的形状
                ,s=8 #点的大小
                ,c=color[i]
               )
plt.show()

2.4 建立聚类模型并进行训练

from sklearn.cluster import KMeans

# 根据数据集显示的数据的分布,选择距离分类
# n_clusters值的不同,将聚类出不同的结果,这里可以选2,3,4
n_clusters = 4
# 实例化一个聚类的对象
cluster = KMeans(n_clusters = n_clusters, random_state=0)

# 用数据训练模型(注意:不包括y分类标签值)
cluster = cluster.fit(X)
print("max_iter=",cluster.max_iter)

# 显示聚类后的类别
y_pred_1 = cluster.labels_
# print("Cluster Labels:", y_pred_1)
# print("Cluster Labels.shape:", y_pred_1)

# 验证一下准确性
y_pred_2 = cluster.fit_predict(X)
#print("Cluster Labels:", (pre == y_pred_2))

# 显示质心的信息,centroids:形心; 矩心
centroids = cluster.cluster_centers_
print("centroids.shape", centroids.shape)
print("centroids=\n",centroids)

# 显示所有族的簇内平方和inertia信息
inertia = cluster.inertia_
inertia_avg = inertia/n_samples
print("inertia=\n",inertia)
print("inertia_avg=\n",inertia_avg)
max_iter= 300
centroids.shape (4, 2)
centroids=
 [[ -6.08459039  -3.17305983]
 [ -1.54234022   4.43517599]
 [ -7.09306648  -8.10994454]
 [-10.00969056  -3.84944007]]
inertia=
 908.3855684760615
inertia_avg=
 1.8167711369521231

训练的过程就是找质心的过程。

2.5 可视化训练后的效果

color = ["red","pink","orange","gray"]
fig, ax1 = plt.subplots(1)

# 可视化样本点
for i in range(centers):
    # 选出 第0列,行=i的数据集
    X0 = X[y==i, 0]
    # 选出 第1列,行=i的数据集
    X1 = X[y==i, 1]
    
    # 分别用不同的颜色代表不同的数据集
    ax1.scatter(X0, X1 
                ,marker='o' #点的形状
                ,s=8 #点的大小
                ,c=color[i]
               )

# 显示聚类后所有质心的位置
ax1.scatter(centroids[:,0], centroids[:,1]
            ,marker="X"
            ,s=15
            ,c="black"
           )

plt.show()

2.6 不同聚类类别的比较

随着聚类数目个数的增加, inertia的值越来越小,因此,inertia并非是评估模型好坏的指标。


作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客

本文网址:

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

文火冰糖的硅基工坊

你的鼓励是我前进的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值