1.导入相应包
from sklearn.datasets import make_blobs
from matplotlib import pyplot as plt
from sklearn.cluster import KMeans
2.准备数据集
#利用sklearn内置函数生成特征数量为2,中心点为4,样本数为500的随机数据集
X, y = make_blobs(n_features=2, centers=4, n_samples=500, random_state=1)
plt.scatter(X[:, 0], X[:, 1], marker='o', s=8)
绘制图像如下:
3.通过类别绘制图像
color = ["red", "pink", "orange", "gray"]
for i in range(4):
plt.scatter(X[y == i, 0], X[y == i, 1], color=color[i], marker='o', s=8)
绘制图像如下:
4.建立模型进行聚类
#设置簇类为3
n_clusters = 3
#训练
cluster = KMeans(n_clusters=n_clusters, random_state=0).fit(X)
#输出聚类后的结果
y_pred = cluster.labels_
y_pred
另一种方法
pre = cluster.fit_predict(X)
pre == y_pred
两种方法结果一致
5.重要属性
#中心坐标点
centroid = cluster.cluster_centers_
centroid
#距离和
inertia = cluster.inertia_
inertia
6.绘制分类后的图像
color = ["red","pink","orange","gray"]
fig, ax1 = plt.subplots(1)
#依次画出不同标签的数据
for i in range(n_clusters):
ax1.scatter(X[y_pred==i, 0], X[y_pred==i, 1]
,marker='o'
,s=8
,c=color[i]
)
#将聚类中心画出
ax1.scatter(centroid[:,0],centroid[:,1]
,marker="x"
,s=15
,c="black")
plt.savefig(r"C:\Users\86377\Desktop\3.png")
绘制图像如下:
7.计算轮廓系数
from sklearn.metrics import silhouette_samples
from sklearn.metrics import silhouette_score
#计算所有样本轮廓系数的均值
silhouette_score(X, y_pred)
#计算每个样本的轮廓系数
silhouette_samples(X, y_pred)
计算均值比较上述两种方式
silhouette_samples(X, y_pred).mean()
其中轮廓系数取值范围为(-1,1)越接近1表示簇内距离小,簇外距离大,为较优,反之,较差。
8.有卡林斯基-哈拉巴斯指数
from sklearn.metrics import calinski_harabasz_score
calinski_harabasz_score(X, y_pred)
该指数越高表示聚类效果越优