#废话不多说,直接上代码!
#重要的部分有注释,所有的参数都有参数说明,可以直接运行,适合小白。
#未经许可,禁止转载。
from sklearn.datasets import make_blobs
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
import pandas as pd
import numpy as np
#自己创建数据集
#500个数据,2维,4个簇,不随机
X, y = make_blobs(n_samples=500,n_features=2,centers=4,random_state=1)
#建模:聚成3簇,然后把X放入模型中训练
cluster = KMeans(n_clusters=3, random_state=0).fit(X)
#画图
color = ["red","pink","orange","gray"]
fig, ax1 = plt.subplots(1)
#画出簇
for i in range(3):
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.show()
-----------------------------------------------------------------------------------------------
#其他
#查看质心
centroid = cluster.cluster_centers_
print(centroid)
#查看聚好的类别,每个样本所对应的类,即每一个点的标签属性
y_pred = cluster.labels_
#y_pred #由0,1,2组成
#查看总距离的平方和,越小越好
inertia = cluster.inertia_
print(inertia)
#模型评估指标1:轮廓系数,轮廓系数范围是(-1,1),其中值越接近1表示样本与自己所在的簇中的样本很相似,并且与其他簇中的样本不相似,
#当样本点与簇外的样本更相似的时候,轮廓系数就为负。当轮廓系数为0时,则代表两个簇中的样本相似度一致,两个簇本应该是一个簇。
#可以总结为轮廓系数越接近于1越好,负数则表示聚类效果非常差。
from sklearn.metrics import silhouette_score
from sklearn.metrics import silhouette_samples
silhouette_score(X,y_pred) #参数1:完整的数据;参数2:每一个点的标签属性
#模型评估指标2:卡林斯基-哈拉巴斯指数,越高越好
from sklearn.metrics import calinski_harabaz_score
calinski_harabaz_score(X, y_pred)