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

Posted 文火冰糖的硅基工坊

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[机器学习与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博客

本文网址:

以上是关于[机器学习与scikit-learn-24]:算法-聚类-KMeans代码示例的主要内容,如果未能解决你的问题,请参考以下文章

包邮送书啦|《机器学习与深度学习算法基础》

机器学习机器学习入门02 - 数据拆分与测试&算法评价与调整

Python3入门机器学习 经典算法与应用

《分布式机器学习:算法理论与实践》——RE

Python3入门机器学习--经典算法与应用|Python3机器学习

从入门到精通:机器学习算法与应用