[机器学习与scikit-learn-24]:算法-聚类-KMeans代码示例
Posted 文火冰糖的硅基工坊
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[机器学习与scikit-learn-24]:算法-聚类-KMeans代码示例相关的知识,希望对你有一定的参考价值。
作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客
本文网址:
目录
第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 - 数据拆分与测试&算法评价与调整