本文内容算是 Andrew Ng 《机器学习》公开课的笔记
监督机器学习算法中的分类算法,都是告诉你 label (分类标签) ,然后让你找条直线(以2类为例)把这些 样本分开,如下图:
本文图片截取自Andrew Ng《机器学习》公开课
非监督机器学习算法,就是给你一堆点,你给 爱分几类分几类,反正把在一起的都找出来
本文图片截取自Andrew Ng《机器学习》公开课
这里面牵涉到两个问题
1,要分几类?(K取值是多少?)
2,分类的标准是什么?(类似 cost function 最小,最优目标)
K-means算法是这类算法中典型的代表。(先假设K已知。如何选择K,在最后再说)
算法描述:
像下图这样的一堆点,我们要分成k=2类。先随机初始化两个点,然后让这两个点慢慢的移向两个 cluster的中心
重要的事情说三遍:本文图片截取自Andrew Ng《机器学习》公开课
所谓慢慢移动两个点(C1 和C2),其实是个迭代的过程,
迭代的每一步完成一下2个任务:
1,找到input data中每个点距离哪个中心点近(C1 或者C2),标记该点属于 相应的 集合
2,找到每个 集合的 重心,更新C(C1或者C2)为其对应集合的重心,下次迭代使用
K-means算法这样进行的依据是什么?这个算法想最优化的目标是什么?
就是所有点 距离其cluster中心的距离之和最小,如下公式:
K-means算法包括两次迭代:
1,第一次是给点找距离最近的中心,这已经在朝着 Optimization objective前进了
2,第二次迭代,把中心点更新为 该cluster内所有点的重心,这样所有点距离之和又在减小
-----------------下面说明一些小问题----------------
1,如何初始化K的centroid?肯定不是都设为 0向量啊!
答:随机选择K的training examples就好了
2,如果最后分类不是很和谐,怎么办?见下图
这里引入 local optima概念,就是按照K-means算法,得到了响应的cluster,但是并不是 global optima。这个时候Andrew Ng告诉我们的办法是,进行几百次算法,每次都随机初始化K个centroid点,记录K-means结束时候的 J (cost function)。然后找到J最小的那次,那一定是最优解。看图说话:
3,K如何选?
Andrew Ng告诉我们:
1,大部分时候,还是要结合我们的业务进行分类,比如 衣服的尺寸 s,m,l
用户的身份,穷屌丝,碌碌无为,高富帅等等。
2,也可以用一个叫做Elbow method。这个方法告诉我们,在某个K值之后,minJ变化很慢,那么K就可以确定啦。
但是如果像下图右边那样,没有明显的Elbow,那么这个方法也不好用。
K具体的取值,大部分是手工选择,要人眼去看。