依旧来自于ng的ml-003中的clustering部分课程
聚类是极其学习中永不过时的问题,一般有着有监督和无监督 还有半监督,但是视频中主要还是说的前两个。
一、聚类引言
一
上下两个图就是直观的说明什么是有监督训练什么是无监督训练。可以看出当有监督训练的时候是通过标签来辅助训练模型的参数,而在无监督中,因为缺少了标签(这样使得样本的获取更加容易,比如直接网上下数据就行,不用人为的工作进行标签)所以无法使用有监督的方式来训练。但是在众多的无标签样本中如何进行区分几个类,这就是聚类技术了。
下面是聚类用到的几个场景:
在这些算法中,最经典,用的最多的还是经久不衰的k-means。
二、k-mean 图示原理
这是得到的无标签数据的最原始状态,人为的可能说这不就是两类 吗,但是机器不知道,而且这里是将数据可视化之后才知道两类的,但是却可以通过k-mean 算法分成小于样本数m的类别数。
对于k-mean算法来说,先随机的定两个(假设分成2类)类别的中心,
然后通过计算每个样本离之前的类别中心的欧式距离来进行分类,这里红色为一类,蓝色为一类。
在计算完所有的样本之后,这时候就可以重新计算分类好的样本中心(就是计算样本的均值作为中心,或者称之为期望就是他们的中心)
这时候在按照之前随机定中心之后的操作一样,可以重新计算每个样本离新的样本的距离来重新分类,可以如图所示,这时候的中心是离最后的中心越来越近了呢
最后就是这样,当中心的位置固定,即算法收敛,也就是说不论在怎么使用k-mena算法计算,他们的中心位置都不变的时候,那么就是最终状态了。
三、k-mean数学原理
这里的k就是所需要聚类的类别数。训练的是没有标签的,即无监督数据,这里的每个样本数据是丢弃x0=1的,所以每个样本是n维不是n+1维的
上图就是k-mean计算的过程。相信一看就懂。
但是当遇到不可分的样本的时候,该如何运用k-mean算法来进行分类呢:
左边的图是可分的情况,但是假设你为了制作s,m,l三种型号的t-shirt的时候,需要收集一个班或者一个学校的人的身高和体重的时候会发现像右图那样,说不上连续,但是就是可视化的时候看不出怎么分类好。
其实不用担心,k-mean也会分类成:
这就是结果了,看上去还算不错。
三、k-mean目标函数
对于线性回归,或者是逻辑分类,他们都有个目标函数需要求得最小值来优化参数。对于k-mean来说,其实知道了目标函数,能够有两个优势:一、知道k-mean运行的对不对,二、能够避免k-mean陷入局部最小值
下面的就是k-mean的目标函数,建立在类别数和类中心的目标函数。
四、k-mean初始化
这就是随机初始化的时候对开始的类别中心的选择
但是当初始化值选得不好,容易陷入局部最小,比如上图的右边部分,第一个是理想的分类结果,后面的都是局部最小的结果,很不尽人意。
这种的解决方法就是多次的随机初始化,使得目标函数最小的那次作为结果,可以测试1-100,或者50-1000次,毕竟不知道哪次能够真正的得到全局最小,所以还是需要多次的。对于类别较多的来说,有可能不是很明显,但是当k=2,3,5的时候,即类别很少的时候,这时候是可以直接多次初始化,得到的结果也会差距较大。
五、如何选择类别数K
可以有用elbow方法,就是当不同的类别数的情况下,如果有个明显的转折,那么就是这个数值了,但是很多情况下是如下图右边那样的:
但是很多情况下分几类是为了后面着想的,比如厂家想做几种t-shirt
上面就是k-mean的讲述了。