Andrew Ng的机器学习课程概述(三)

来源:互联网 发布:js 容器大小改变事件 编辑:程序博客网 时间:2024/06/05 21:54

第十三章 无监督学习

首先讲的K-mean聚类原理还是挺简单的。就是你要分K个类,你就选择K个点做中心点,然后让所有的点进行计算,离哪个点最近,就选择成为这个点的类,然后更新这K个点的位置,让其成为新类的中心,然后再重复上面那个工作,直到最后这K个点都不动了,算法也就收敛了。

这里的cost function很简单,就是各个点到选取的点的距离:
K-mean的cost function

但是,这K个点应该怎么选取,才会让这些无标签的点真正地分成你需要的类呢,这里有个步骤:
初始化K点
就想这样多次进行K-mean找到一个cost function最优的来即可。

而对于K值的选择,多半是由你下游的需求来定的,比如你要把你的产品分成三个用户群,那你的K就定3。还有一个比较量化的方法就是elbow method:
elbow method

第十四章 PCA

这个是主成分分析的,以前看过一个挺好的文章,所以就没太看这个
这里是那个文章

第十五章 异常检测

这里首先讲的是正太分布(也叫高斯分布)的检测方法,就是利用各个特征独立且都符合正态分布的特性,通过极大似然法确定分布的均值和方差。然后建立p(x)模型,来判断新来的点是否异常,如果出现概率较小,那说明异常。具体见下图:
高斯分布异常检查

之后讲如何评价一个异常检测系统:

  1. 用training set 训练出p(x)
  2. 用cv对y进行验证
  3. 用recall,precision来评价p(x)
    评价异常检测系统

    至于什么时候使用异常检测,什么时候使用监督学习,视频中给出这样的建议:当正样本很少的时候,并且未来的正样本可能与现在的正样本不同的时候采用异常检测。而监督学习则在正负样本都很多的时候使用:
    异常检测vs监督学习

    然后给出了如何选择异常检测算法特征的方法:

    1. 采用log(x),x0.1之类的让p(x)看起来更“高斯”
    2. 从异常样本中找出特征
    3. 通过使用不同特征的组合建立新特征,找出某些异常。(??)

    多元高斯分布:
    多元高斯分布

    独立分布模型和多元高斯分布模型的对比:

独立分布模型 vs 元高斯分布模型

基本思想就是多元高斯分布可以看出来特征之间的关系,而初始模型你还需要一一构建,但是初始模型计算量比较小,更加常用,而多元的必须是样本数大于特征数否则可能会造成Σ不可逆。

第十六章 推荐系统

这张图就是推荐系统的精髓之所在:
推荐系统概括
参数说明:
参数说明

其中Θ就是用户对于各类电影的评价分数,x则是某部电影属于哪类电影的向量(比如有0.9的浪漫,0.1的动作等等),y就是用户给电影打的分数。

而具体的算法也和之前的回归啊之类的差不多:
推荐系统具体算法

而其向量化表示更加简洁:
向量化表示

最后讲了一下要是来了一个啥也不知道的用户应该咋办:全部取均值。

第十七章 大规模机器学习

对于大规模(上亿)的机器学习,传统的梯度下降法有个很大缺陷是需要把所有数据一次读入,十分耗时。所以要使用一种随机梯度下降法:
随机梯度下降

随机梯度下降法的意思,首先对于(x1,y1),让所有的参数Θ能更好拟合(x1,y1),然后让所有的参数Θ能更好拟合(x2,y2)。另外外层循环一般执行1-10次。

计算机讲究折中的艺术,因此就出现小批量梯度下降法:
小批量梯度下降法

如何判断你的梯度下降是收敛的呢:

  1. 在用(xi,yi)更新Θ前用cost function计算假设对于这个样本的表现,看更新后是否在这个样本上表现得更好了。
  2. 每1000次迭代,求出cost function的平均值,看看是否有下降的趋势。
  3. 关于学习速率α,通常是随着迭代次数增加而下降。

    最后介绍了在线学习和分布计算(mapreduce)。

    • 在线学习就是没有固定的数据集,而是对单个数据样本进行学习,学习过后实时更新模型并丢弃这个样本(但是具体怎么实现的没讲)。
    • 分布计算就是把一些求和之类的运算放在多个计算机或者一个计算机的多个核上运行最后合到一起。

第十八章 实例

这章里比较有价值的有两个知识点,一个是滑动窗口一个是上限分析。

  • 滑动窗口:通过一个窗口来检测图像中是否有你需要的对象
  • 上限分析:就是在一整套机器学习算法的运行中,分析到底修改哪个步骤会让你的算法运行的更好。例子如下图:
    上限分析

    即当文字检测由人亲自完成时,系统的准确性为89%提高了17%,当文字分割正确率是100%时,系统准确率变为90%,提高了1%;文字识别正确率为100%时,系统提高10%.这样你就会发现,如果把功夫用在文字检测上会比用在文字分割上获得的准确率提升更大。

    最后介绍如何获得更多的数据,首先要问的问题就是

    How much work would it be to get 10x as much data as we currently have?

    所以该如何获得大量数据呢,比如对于文字检测,首先你可以获得文字库的文件,然后用处理软甲使其变形,或者给其背景增加噪点之类的。当然,在获得大量数据前,你要有个低偏差的模型,否则这一切是没有用的。

写在最后

啊,终于写完了,这里是说好的课程链接。希望大家看得愉快~

1 0
原创粉丝点击