您当前的位置: 首页 >  彭世瑜 分类

机器学习: k-means聚类对数据进行预分类

彭世瑜 发布时间:2019-01-26 22:41:25 ,浏览量:4

k-means聚类

非监督学习

把数据划分为k个类别 -知道类别个数 -不知道类别个数 超参数

k = 3

步骤:

1、随机在数据中抽取3个样本,当做3个类别的中心点(k1, k2, k3) 2、计算其余的点分别到这三个中心点的距离, 每一个样本有3个距离(a, b, c) 从中选出举例最近的一个点作为自己的标记,行成3个族群 3、分别计算这3个族群的平均值,把3个平均值与之前的3个旧中心点进行比较 4、如果相同结束聚类,如果不同,把这3个平均值当做新的中心点重复第2步

聚类评估标准

轮廓系数 计算公式 s c i = b i − a i m a x ( b i , a i ) sc_i = \frac{b_i - a_i}{max(b_i, a_i)} sci​=max(bi​,ai​)bi​−ai​​ 对于每个点i 为已聚类数据中的样本, b i b_i bi​为i 到其他族群的所有样本的距离最小值 a i a_i ai​为i 到本身族群的距离平均值 最终计算出所有样本点的轮廓系数平均值

极端: b i > > a i b_i >> a_i bi​>>ai​ , s c i = 1 sc_i = 1 sci​=1 完美 a i > > b i a_i >> b_i ai​>>bi​ , s c i = − 1 sc_i = -1 sci​=−1 最差 轮廓系数取值[-1, 1]

总结

采用迭代算法,直观易懂并且非常实用

缺点:容易收敛到局部最优解(多次聚类) 聚类,用在分类之前

代码示例
# -*- coding: utf-8 -*-

from sklearn.datasets import make_blobs
from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_score
import matplotlib.pyplot as plt


# 生成数据
X, y = make_blobs(n_samples=200, centers=3, n_features=5, random_state=0)

# k-means聚类
km = KMeans(n_clusters=3)
km.fit(X)
y_predict = km.predict(X)

# 评估聚类效果
print(silhouette_score(X, y_predict))
# 0.72

# 绘制聚类结果图
color = ["red", "green", "blue"]
colors = [color[i] for i in y_predict]

plt.figure()
plt.scatter(X[:, 1], X[:, 2], color=colors)
plt.savefig("a.png")

在这里插入图片描述

关注
打赏
1688896170
查看更多评论

彭世瑜

暂无认证

  • 4浏览

    0关注

    2727博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文
立即登录/注册

微信扫码登录

0.0552s