聚类算法(主要是K-means)的神之问

目录

K-means

什么是叫迭代不再收敛?

如果初始的中心点选取的不一样,聚类的结果是否会不同?那如何解决呢?

在聚类算法中,当欧式距离计算的时候,每个特征的计算距离可能差别比较大,这样导致不同特征对距离的影响会很大,但不同特征对计算距离的重要程度也不一样,有没有很好的解决方式?

选择用那种距离来测聚类相似度的时候,距离的影响有多大?该如何选择?

如何提高聚类算法的效果?

在聚类算法中,如果第一维特征对模型比较重要的话,就不做归一化,如果无关紧要的话,就可以切除掉第一维特征吗?

Kmeans模型是凸函数吗?有全局最优解吗?

那该如何缓解上述的状况呢?

K的选定对算法的结果有那些影响?

K的选定方法?

假定有80万个短裤商品数据,每个数据附带一些文本描述(如颜色信息啊,尺寸信息啊,款式信息啊,面料信息啊),我想聚成一个每给类只包含80个数据大小的状态,该怎么操作?

Kmeans和Kmeans++的区别?

k-means有那些局限性?

层次聚类

层次聚类的大致流程是什么?适合什么样的场景?有什么特点?

K-means和层次聚类的区别?


题外话:

聚类算法因为天然的无监督训练,造成的预测精度不如有监督的训练精度高,不是或者很少特别的经常单独常用,但可以适用产生Feature(当特征特别庞大的时候,可以特征降维)无监督学习用的非常少,实际上是PCA这样的结构.

应用举例:邮件聚类;用户购买模式,用户,图片边缘。。。

聚类唯一可以用到的信息是:样本与样本之间的相似度来的。

让比较接近的样本,"抱团"

评判准则:

抱团紧不紧(低类内距),异族远不远(高类间距)

K-means

什么是叫迭代不再收敛?

(1)迭代中心不再变化

(2)每个样本点到对应聚类中心的聚类之和不再有很大变化。

如果只有两类,可以用垂直平分线判断,多个类的时候,还是得计算到每个聚类中心的距离的。

判断损失函数,混乱度,散度,随着迭代会逐渐变小

kmeans要选一些样本点作为初始值,但这些样本点要满足某些要求,如要求初始化的聚类中心的样本点要尽量离的远,

 

如果初始的中心点选取的不一样,聚类的结果是否会不同?那如何解决呢?

是的,很有可能,可能收敛到的局部最低点是不一样的,那聚类的结果就是不一样的了,很多package是采取选择初始值的时候按照kmeans++的方式来取(取尽量远的初始值点),而且,既然保证不了收敛到统一的局部最优点,那就多跑几次,一般情况下,聚类算法都是默认跑10次的。

 

在聚类算法中,当欧式距离计算的时候,每个特征的计算距离可能差别比较大,这样导致不同特征对距离的影响会很大,但不同特征对计算距离的重要程度也不一样,有没有很好的解决方式?

如果特征对计算距离的重要程度是一样的,那么就不需要更改,因为所有特征之间是平等的,特征所描述的点就该是原本的状态。

如果特征对计算距离的重要程度是不一样的,那么就可以用添加权重或者特征“拆分”的方式给进行处理成重要程度一样的。

比如:a[0,2,3],b[2000,5,1]这是两个三维向量,每一维代表一个特征,a,b代表样本。那么如果特征对计算距离的重要程度一样,那么a,b在空间上的距离就应该是很大的,不需要进行修正;如果重要程度不一样,如第一个特征0,2000,那么要么就是给某个特征赋以不同的权重(给2000的特征赋以一个小数权重,让它小下来),来改变某个特征的重要程度,或者,之间把第一个特征给删掉,不再考虑,拆成a[2,3],b[5,1]再进行处理。

 

选择用那种距离来测聚类相似度的时候,距离的影响有多大?该如何选择?

一般情况下都是用欧式距离来进行,因为欧式距离很直观,可以找到这个中心的定义,但余弦距离很少可以收敛,只表征的是方向,没有像欧式距离如此简洁和直观。但话说回来,这只是经验之谈,具体可以使用那种距离测度,还是要看具体的特征处理的好坏来确定。

 

如何提高聚类算法的效果?

聚类算法的结果好坏在于输入的特征是否足够能体现出所检测数据集的状态,以处理图像为例子,如果之间将RGB三通道作为特征直接输入进行聚类,得到的效果,和将提取到的HOG特征,或者GIST特征再或者通过几层卷积网络提取到的特征,再进行输入,取得的 聚类结果是不一样的,这并非是聚类算法的缘故,而是,输入聚类算法之前的特征有没有处理好,换句话说,想通过聚类来实现无监督训练,算法很关键,但如何处理好输入的特征也很关键或者说更关键。

 

在聚类算法中,如果第一维特征对模型比较重要的话,就不做归一化,如果无关紧要的话,就可以切除掉第一维特征吗?

(笔者自认为)是这样的。如果一个特征比较重要,那去做归一化,就相当于人为的把两个样本在这个特征上本来该体现的差别,给切小了,这是不合理的,当然如果无关紧要,就是在这个维度特征上无法区分两个样本的差别,那当然应该切除掉减少计算。

 

Kmeans模型是凸函数吗?有全局最优解吗?

kmeans函数严格来说是每那么凸的凸函数,我们求损失函数的过程其实是在求一个局部的最低点的过程,(这也就是为什么一般kmeans算法会采取重复10次训练的方式来确定找到的是不是最优点)

 

那该如何缓解上述的状况呢?

针对kmeans是对初始聚类中心敏感的特点,可以有一下办法来缓解这种状况,

(1)优化初始化聚类方法(K-means++)

(2)初始化第一个聚类中心为某个样本点,初始第二个聚类中心为离它最远的点,第三个为离它俩最远的。。。。

(3)(实际中最常用的)多初始化几遍(就是多重复训练几次)选所有这些聚类种损失函数(到聚类中心和)最小的

 

K的选定对算法的结果有那些影响?

如果K=1,那就是第一种状况,K=2第二种状况,依次类推,K设置为几,算法就会强行将数据分成几类,但如果K和实际的类数真的不匹配,那么很容易就出现第一种和第三种情况了。

 

K的选定方法?

肘点法。选取不同的K值进行训练,将损失函数的值(每个K值对应 的收敛了的损失函数结果)得出来,并画成图像(如下所示),从图上观察从变化很陡到变化很平缓的点,就是合适的K值(肘点),(下图的例子肘点是2)。

 

假定有80万个短裤商品数据,每个数据附带一些文本描述(如颜色信息啊,尺寸信息啊,款式信息啊,面料信息啊),我想聚成一个每给类只包含80个数据大小的状态,该怎么操作?

最low回答:直接设置K的数量为1万个,然后用肘点法训练。

这是绝对不可行的,因为太耗时。

好的方法思路

(1) 因为有文本描述信息,我可以先通过文本描述信息变成one-hot编码,然后,将商品数据根据文本描述信息聚成200个类,

最后,在这两百个类的基础上再去试试(用并行的方式,再每个类的下面进行图像Kmeans的聚类,保证类的大小只包含80个样本大小)。

(2)那不用肘点法,如何确定K的个数呢?我可以先指定K=2000,然后,开始训练,训练出结果后,检查所分出的每个类,预期每个类里面应该有400~500个数据样本点,但有的类里面的样本数据量极少,说明这个样本是个孤立点,这说明这个类不合理,把这个类给删掉,以此来调整聚类的个数。(个人理解,在数据样本量极大的情况下,K值只能找到一个大致的范围,但无法精确,所以,这种方法其实默认了2000已经是最大的超过了样本数据量可分的类数了,然后,从2000开始往下降,降到一个合适的K值)

 

Kmeans和Kmeans++的区别?

前者是随机初始化的,后者是找最远的K个点初始化。

 

k-means有那些局限性?

带状分布,就不太好: 

 

第二点补充:解决方法就是K-Median

第三点补充:如果密度不是很好,也不行。比如下图。

 

如何判断数据是带状分布的还是团状分布的?

当数据维度很大的时候是无法直观看出来的,但是,可以通过损失函数的结果看出。

 

层次聚类

层次聚类的大致流程是什么?适合什么样的场景?有什么特点?

层次聚类是根据时间的推移(步骤),来求解每个族(初始时一个样本就是一个族)之间的距离,距离近的再之后的时间点上聚成一类,然后,反复这样,直到聚成一类。中间每个时间点都可以输出一个结果,来作为聚类的结果。

但这也绝对了层次聚类的过程非常的慢,

这种方法适用于对于粒度信息的检测,适用于生物工程或者基因工程上的应用。

 

K-means和层次聚类的区别?

(1)K-MEANS是计算样本点到聚类中心的聚类,层次聚类是计算族到族的距离,每步只合并两个类。

(2) K是需要指定初始值的K,但层次聚类不用

(3)K-MEANS速度要比层次聚类快,而且用的多

(4)层次聚类根据需要的不同聚类程度有不同的聚类结果。

(5)K-means 是一种扁平(扁平的概念是相对于层次聚类而言的,层次聚类最后可以得到多层的结果,但K-means最后就一层结果,相对而言,不就是扁平的嘛)聚类产出一个聚类结果都是独立的。

 

高斯混合模型(GMM待续)

多个高斯模型线性加权混合在一起的模型。

 

附:谱聚类(是一种非常牛逼的算法,但非常吃内存)

 

 

 

 

 

 

 

 

 

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值