机器学习常用算法四:K-Means聚类

本文详细介绍了聚类的概念及K-Means聚类算法的原理与过程,包括K值的选择方法、不同距离测度的计算方式,并讨论了K-Means聚类存在的问题及其解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 理解聚类

聚类是一种无监督的机器学习任务,它可以自动将数据划分成类cluster。因此聚类分组不需要提前被告知所划分的组应该是什么样的。因为我们甚至可能都不知道我们再寻找什么,所以聚类是用于知识发现而不是预测

理解聚类

2. K-Means聚类的原理

(1) K代表要把数据分为几类,比如上面的例子,要把科学家分为3类,那么K的值为3,然后在已有数据中随机找3个点为中心点,比如,以下A、B、C3个点(有颜色的那三个点)为中心点

中心点

(2) 分别求剩余的点和3个中心点之间的距离,可以选择不同的计算距离的方法,不同的方法所得的结果会有差距,而且迭代的次数也不一样

(3) 使用距离来分配和更新类

第一次跌代的过程:

把每个点到3个中心点的距离作比较,把距离在某个范围内的一些点划分为一类,比如某个到A的距离为10,到B的距离为15,到C的距离为3,那么这个点与C是一类

第一次迭代结果

第二次迭代:

把3个中心点的位置,设置为上一步已经聚好的三个类的中心点,再进行迭代,重新计算距离,在进行聚类,那么可能上次结果中,原来属于B类的一个点,在这个迭代中划分到A类中,那么A类的B类的中心点又会改变

第二次迭代的中心点

随着一次次中心点的变化,进行不断的迭代

(4) 收敛

当中心点的位置不再变化时,开始收敛,不再迭代,但这种情况几乎不会出现,通常设置一个阈值来结束收敛

(5) K-Means聚类的问题

a. 因为第一次跌代时中心点的选取是随机的,如果选取的中心点是这样的
随机选取中心点
那么每次迭代的结果都不一样,使得计算很长时间仍然不能收敛,K-Means原生算法本身没有解决这个问题,需要人为进行评估来决定是否收敛

K-means++K-Means 2 算法对第一次中心点的选择进行了改进

b. 实际情况中,我们往往不知道原有数据能分成几类,即K的值事先不好确定

通常使用肘部法来决定聚类的数量

肘部法

3. 常用的求距离的方法

a. 欧式距离测度,就是两点间的距离

b. 平方欧式距离测度,欧式距离的平方

c. 曼哈顿距离测度
曼哈顿距离

d. 余弦距离测度(适用于文本)
余弦距离测度

e. 谷本距离测度,同时比较夹角和距离的测度

f. 加权距离测度,欧式距离中加了权重

4. 使用Mahout做K-Means聚类

Mahout做K-Means聚类的命令格式:

MAHOUT_HOME/bin/mahout kmeans
--input # 输入路径
--output # 输出路径
--distanceMeasure # 距离测度方法        
--numClusters # K的值
--randomSeed <randomSeed1> [<randomSeed2> ...] 
--convergenceDelta # 收敛的阈值
--maxIter # 最大迭代次数
--overwrite # 结果以覆盖形式追加 
--clustering # 只有加这个选项才会执行聚类
--method # 选择单机运行还是mapreduce
--tempDir <tempDir> # 临时文件存放目录
--clusters (-c) 
# 可以简写为-c
# 指定中心点所在的位置,但必须写为SequenceFile文件
# 如果指定了K的值,那么即使这里设置了中心点位置的文件
# 也会按照随机方式来取中心点
# 如果写为 -c canopy,那么第一次迭代会是一次canopy迭代

5. Canopy聚类

canopy聚类只进行一次迭代,通常不会单独使用,而把它作为K-Means聚类的第一次迭代来使用,为了使得K-Means聚类的第一次迭代时选取的中心点更合理,它的选取中心点的策略如下:

canopy聚类

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值