聚类算法k-means

聚类算法

  • 聚类算法 是 无监督学习

聚类算法有特征,无标签,是无监督分类。

  • sklearn 聚类模块

cluster.KMeans
cluster.k_means 参数:X,n\_clusters

KMeans算法

  • 基本要素

K 与 质心(\mu_j)

  • 聚类算法迭代过程


    聚类算法迭代过程.png
  • 样本点到质心的距离,采用欧几里得距离
    d(x,\mu) = \sqrt{\sum_{i=1}^n (x_i-\mu_i)^2}
  • 所有样本点到 质心距离和
    Cluster Sum Of Square(CSS) \quad= \quad \sum_{j=0}^m\sum_{i=1}^n(x_i-\mu_i)^2
  • k-means复杂度

非常的慢 O(n^{(k+2)/p})

  • sklearn k-means算法
from sklearn.datasets import make_blobs
import matplotlib.pyplot as plt
# 自己创建数据集
X,y = make_blobs(n_samples=500,n_features=2,centers=4,random_state=1)
# 作图
fig,ax1 = plt.subplots(1)
ax1.scatter(X[:,0],X[:,1],marker='o',s=8)
plt.show()
作图1.png
from sklearn.cluster import KMeans
n_clusters = 4
cluster = KMeans(n_clusters=n_clusters,random_state=0).fit(X)
y_pred = cluster.labels_
# 查看预测标签
y_pred
centroid = cluster.cluster_centers_
# 查看质心未知
centroid
inertia = cluster.inertia_
# 查看 欧几里得距离
inertia
# 作图
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.show()
图2.png

聚类算法模型评估指标

  • 簇内差异越小,簇外差异越大 越好

真是标签已知:互信息分,V-measure,调整蓝德系数

  • 真实标签未知的情况

轮廓系数计算 s = \frac{b-a}{max(a,b)} , a红与红的距离,b红与黑的距离,b越大越好

  • 轮廓系数法代码
from sklearn.metrics import silhouette_score
from sklearn.metrics import silhouette_samples

silhouette_score(X,y_pred)
# 0.6505186632729437
silhouette_samples(X,y_pred).shape
# (500,)
  • 卡林斯基-哈拉巴斯指数(越高越好),运算更快
from sklearn.metrics import calinski_harabasz_score
calinski_harabasz_score(X,y_pred)
# 2704.4858735121097

案例 (day08_3.1.3 案例:轮廓系数找最佳n_clusters (1))

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容