由于目前网络中数据的爆炸性增长,以及目前硬件方面升级迭代,机器学习的很多算法再次被开发,并进行了实际的工业使用。
第一个视频介绍了一些机器学习的应用,例如:
使用到机器学习的一些案例:
总之就是,机器学习的出现让很多不可能成为了可能,让许多可能变得更好。
Arthur Samuel (1959). Machine Learning: Field of study that gives computers the ability to learn without being explicitly programmed.
这个定义是非正式但是是最早的,来自于一个会计算机编程的下棋菜鸟,计算机通过不断的对弈,通过对弈计算布局的好坏,通过不断“学习”,积累经验,成为了一个厉害的棋手。
Tom Mitchell (1998) Well-posed Learning Problem: A computer program is said to learn from experience E with respect to some task T and some performance measure P, if its performance on T, as measured by P, improves with experience E.
这个定义是第一个正式的机器学习定义,有点拗口,视频介绍了一个例子,即垃圾邮件分类的例子,对于垃圾邮件分类,三个字母分别代表:
机器学习算法
主要有两种机器学习的算法分类
两者的区别为是否需要人工参与数据标注。这两部分的内容占比很大,并且很重要,掌握的不好很容易在实际的运用中浪费大量的时间。
还有一些算法也属于机器学习领域,诸如:
监督学习,即为教计算机如何去完成预测任务(有反馈),预先给一定数据量的输入和对应的结果,建模拟合,最后让计算机进行预测未知数据的结果。
监督学习一般有两种:
回归问题(Regression)
回归问题即为预测一系列的连续值。
视频中举了房屋价格预测的例子,即给出了一系列的房屋数据,根据其预测任意给定数据的房屋价格。
分类问题(Classification)
分类问题即为预测一系列的离散值。
即根据数据预测被预测对象属于哪个分类。视频中举了癌症肿瘤这个例子,分类分为良性和恶性。上个视频中的垃圾邮件分类问题,也同样是监督学习中的分类问题。
视频中提到支持向量机这个算法,当特征量很大的时候(特征即如癌症例子中的肿块大小,颜色,气味等各种特征),计算机内存一定会不够用,支持向量机则能用于大量特征值,能让计算机处理无限多个特征。
相对于监督学习,训练集不会有人为标注的结果(无反馈),而是由计算机通过无监督学习算法来自行分析,计算机可能会把特定的数据集归为几个不同的簇,故叫做聚类算法。
无监督学习一般由两种:
这里列举一些无监督学习的例子:
在鸡尾酒会上,大家说话声音彼此重叠,几乎很难分辨出面前的人说了什么。而这里的机器学习鸡尾酒算法就可以将说话者的声音同背景音乐分离出来,效果还不错呢~~。
嗯,这块是打打鸡血的,只需要一行代码,就是这么简单!嗯,当然,我没复现过 ^_^。
神奇的代码:
[W,s,v] = svd((repmat(sum(x.*x,1),size(x,1),1).*x)*x');
提到了在机器学习刚开始时,推荐使用 Matlab 类的工程编程语言,因为在 C++ 或 Java 等编程语言中,编写对应的代码需要用到复杂的库以及大量的冗余代码,比较耗费时间,建议可以在学习过后再考虑使用其他语言来构建系统。(其实 tensorflow 的代码也非常简单,尚可一试。)
另外,尤其是在做原型搭建的时候,也仍然使用 Octave,当其已经可以工作后,才将模型移植到其他的高级编程语言中。
Size in $feet^2$ ($x$) | Price ($) in 1000's($y$) |
---|---|
2104 | 460 |
1416 | 232 |
1534 | 315 |
852 | 178 |
... | ... |
这个训练集中,既给出了输入 $x$ ,又给出了输出结果 $y$,即”正确结果“,预测的量是连续的,属于监督学习中的回归问题。
下图解决了这个回归问题:
其中 $h$ 代表结果函数,也称为假设(hypothesis) 。这个结果函数根据输入(即房屋的面积大,给出预测结果输出(即房屋的价格)。
$h_\theta(x)=\theta_0+\theta_1x$,为其中一种可行的表达式。
上式中,$\theta$ 为参数,$\theta$ 的变化决定了输出结果,不同以往,这里的 $x$ 被我们视作已知(即不论是数据集还是预测前的输入),所以怎样解得 $\theta$ 以拟合数据,成了求解该问题的最终问题。
单变量即只有一个特征(房屋的面积)
为了求解上个视频中提到的 $\theta$,本视频引入了损失函数(Cost Function)这个概念,损失函数,用于度量预测结果于实际结果的建模误差。
目的在于求解预测结果 $h_\theta(x)$ 最接近于实际结果 $y$ 时 $\theta$ 的取值,则可以把问题转化为求解 $\sum\limits_{i=0}^{n}(h_\theta(x^{(i)})-y^{(i)})$ 的最小值。
上图中,为在 $\theta$ 取不同值时的拟合情况,蓝色虚线代表的即为误差,要最小化的就是每个预测点的误差值。
这里则要引入损失函数的概念,我们对求最小值的式子进行数学建模,让其变得易于求最小值,而其中一种办法就是建模为二次函数,即统计学上的平方损失函数(最小二乘法):
$$ J\left( \theta \right)=\frac{1}{2m}\sum\limits_{i=1}^{m}{{{\left( {{h}_{\theta }}\left( {{x}^{(i)}} \right)-{{y}^{(i)}} \right)}^{2}}} $$ ,其中 $m$ 为训练集中的样本数量。
对于之前的房价问题来说,我们的问题就转化成了求解 $J\left( \theta_0, \theta_1 \right)$ 的最小值。