K-means算法

博客介绍了K-means算法的思想,通过牧师-村民模型解释了算法原理。接着阐述了算法的步骤、优缺点,并提到了在机器学习中使用sklearn库进行简单演示。K-means算法适用于高斯分布的数据,但对K值选择和异常值敏感。
摘要由CSDN通过智能技术生成

github完整深度学习相关整理

引入K-means思想

  • 牧师-村民模型
  • 有四个牧师去郊区布道,一开始牧师们随意选了几个布道点,并且把这几个布道点的情况公告给了郊区所有的村民,于是每个村民到离自己家最近的布道点去听课。听课之后,大家觉得距离太远了,于是每个牧师统计了一下自己的课上所有的村民的地址,搬到了所有地址的中心地带,并且在海报上更新了自己的布道点的位置。
    牧师每一次移动不可能离所有人都更近,有的人发现A牧师移动以后自己还不如去B牧师处听课更近,于是每个村民又去了离自己最近的布道点…… 就这样,牧师每个礼拜更新自己的位置,村民根据自己的情况选择布道点,最终稳定了下来
  • 牧师的做法主要就是为了找到一个点/这个点接近于所有村民的一个中心点

算法表述

  • 初始化k个样本作为初始的聚类中心点
  • 对于数据集合中的每一个样本计算他到k个聚类中心的距离/然后选择距离最小的聚类中心所在的类别
  • 对于上一部聚类的结果,进行平均计算,得出该类别的新的聚类中心
  • 重复上述两步/直到迭代结束

优缺点

  • 优点
    • 当样本空间是高斯分布的时候/效果较好
    • 时间复杂度低
    • 简单容易/效果也还可以
  • 缺点
    • K值设定玄学
    • 初试簇的选择对结果会有影响
    • 不适合多分类
    • 对异常值敏感/出现异常值会极大影响整个算法

使用sklearn进行简单演示

from sklearn.cluster import KMeans
import numpy as np
X = np.array([[1, 2], [1, 4], [1, 0],
               [4, 2], [4, 4], [4, 0]])
kmeans = KMeans(n_clusters=2, random_state=0).fit(X)
kmeans.labels_
>>>array([0, 0, 0, 1, 1, 1], dtype=int32)
kmeans.predict([[0, 0], [4, 4]])
>>>array([0, 1], dtype=int32)
kmeans.cluster_centers_
array([[ 1.,  2.],
       [ 4.,  2.]])
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值