吴恩达机器学习笔记——监督学习
监督学习的两大问题是——回归、分类
1. 单变量线性回归
- 所谓回归,就是通过一些已知点来拟合一条曲线,从而能够预测一些未知点的值。
线性回归
就是用一次函数 y = a x + b y=ax+b y=ax+b ,进行拟合。不过在机器学习中更加喜欢写成
h θ ( x ) = θ 0 + θ 1 x h_\theta(x) = \theta_0 + \theta_1x hθ(x)=θ0+θ1x - 如何确定最佳的参数
θ
0
\theta_0
θ0,
θ
1
\theta_1
θ1?
通过模型预测值和实际值作差(类似于方差的求法),求得代价函数
:
通过最小化代价函数,来实现最佳参数 θ 0 \theta_0 θ0, θ 1 \theta_1 θ1的寻找。 - 最小化代价函数的两种手段
-
梯度下降法。沿着梯度的反方向进行迭代计算,直到达到最小值点。这种方向比较依赖于学习率 α \alpha α的选取, α \alpha α过大,可能不会收敛; α \alpha α过小,可能收敛时间很长;
-
正规方程法。即直接对代价函数J求偏导,令导函数为0,求得此时对应的 θ 0 \theta_0 θ0, θ 1 \theta_1 θ1
2. 多变量线性回归
- 多变量和单变量的区别就是数据集中,数据的特征数量。比如研究房子和房价的关系,如果只考虑房子的面积和房价的关系,那么就是单变量的问题,如果考虑房子的面积、房子的装修、房子的周围环境和房价的关系,那么这就是一个多变量的问题。
- 多变量的线性回归本质上还是线性回归,因此它的假设函数仍然是一个一次的函数,为:
代价函数J为:
此时要想最小化代价函数,仍然可以用前述的两种方法,但是在梯度下降法使用前,为了达到更好的收敛速度,需要首先使用特征缩放,就是把每个特征x放缩在大致相同的区间范围内。
- 在回归问题中,可能用线性回归不能达到很好的效果,这个时候可以采用多项式回归的方法。采用一些根式多项式,或者二次、三次等高次多项式进行回归。
- 在多变量线性回归问题中,导数法通常都是比较快的,当然它有一个新的名字,叫做正规方程。只要是线性回归问题(正规方程法不能解决非线性问题),只需通过以下的矩阵进行计算即可求解最优参数
θ
\theta
θ值
- 以下是梯度下降法和正规方程法的比较:
3. 逻辑回归(Logistic Regression)
-
虽然叫回归,但这是一个分类的算法。这里首先将分为两类的情况,即positive类和negative类。
-
逻辑回归模型的假设是:
函数g内部 θ T X \theta^TX θTX是一个线性的模型,而g是sigmoid函数:
sigmoid函数的函数图像为:
我们通常用 h θ ( x ) h_\theta(x) hθ(x)来代表输出变量等于1的可能性,也就是为positive的概率。 -
通常,在逻辑回归中,
如果 h θ ( x ) > = 0.5 h_\theta(x) >= 0.5 hθ(x)>=0.5, 预测 y = 1 y=1 y=1;
如果 h θ ( x ) < 0.5 h_\theta(x) < 0.5 hθ(x)<0.5, 预测 y = 0 y=0 y=0;
通过sigmoid函数可知,上述条件就等价于:
如果 θ T X > = 0 \theta^TX >= 0 θTX>=0, 预测 y = 1 y=1 y=1;
如果 θ T X < 0 \theta^TX < 0 θTX<0, 预测 y = 0 y=0 y=0;
而这,就相当于用一条线,把数据集划分为两部分。如下图所示
当然,如果只是用线性函数 θ T X \theta^TX θTX放在g里面,只能得到直线,但是用一些多项式函数,就能得到各种各样的边界线。
-
代价函数——用于评价逻辑回归的分类效果。逻辑回归的代价函数不能像线性回归那样,用误差的平方和再取平均的方式得到,因为它这样得到的是非凸函数,有很多个局部最小值。为了让整个代价函数有只有一个最小值,定义以下的函数为代价函数:
上述代价函数的含义非常好理解,注意 h θ ( x ) h_\theta(x) hθ(x)的取值范围介于0到1之间。如果某个点,它的实际分类为“1”类,那么就用-log ( h θ ( x ) ) (h_\theta(x)) (hθ(x))来计算它的代价误差,越靠近1,计算得到的代价越小,越靠近0,计算得到的代价越大(因为预测错了)。
那么如果某个点为“0”类,也是同样的道理。
这种结构的代价函数能够保证只有一个最小值点。
把上式的代价函数稍作整理,即得:
-
最小化代价函数的方式,只有梯度下降法,没有正规方程法。
可以证明J对任意一个角度求偏导时,其计算得到的函数形式如下所示:
因为梯度下降法需要人工地选择学习率,所以还存在一些不需要人工地选择学习率的更加复杂的算法,如:共轭梯度(Conjugate Gradient),局部优化法(Broyden fletcher goldfarb shann,BFGS)和有限内存局部优化法(LBFGS),这里不作详细的介绍。 -
一对多的分类问题。之前介绍的都是二元分类问题,对于存在两个以上的类别,应该如何分类?
基本的策略就是,多训练几个分类器。比如上图是三个类别,那么就分三次,训练出三个分类器。第一次三角形的为positive类,其余的是negative类。第二次类似,让叉为一类。第三次让方形为一类。然后对于一个新的样本,分别代入这三个分类器进行计算,选择可行度最高(也就是计算的h值最大)的那个作为最终的类别。
4. 正则化
-
无论对于回归问题还是分类问题,都存在过拟合现象。产生过拟合现象的根本原因是高次项的存在,因此只要对高次项加入一定的惩罚就可以避免过拟合。
-
正则化线性回归的代价函数为:
其中 λ \lambda λ又称为正则化参数(Regularization Parameter)
因为是线性回归,所以最小化代价函数可以用梯度下降法:
还可以用正规方程法:
-
正则化逻辑回归的代价函数为:
它只能用梯度下降法。 -
注意无论是线性回归还是逻辑回归, θ 0 \theta_0 θ0不参与其中的任何一个正则化
5. 神经网络
-
无论是线性回归还是逻辑回归,当特征数量很多时,计算量都会非常地庞大。为了有效地解决多特征的问题,需要神经网络。
-
神经网络模型是许多逻辑单元按照不同层级组织起来的网络,每一层的输出变量都是下一层的输入变量。下图为一个3层的神经网络,第一层成为
输入层(Input Layer)
,最后一层称为输出层(Output Layer)
,中间一层为隐藏层(Hidden Layers)
。我们为每一层都增加一个偏差单位(bias unit)
神经网络的计算过程:首先计算上一层的各个元素的值对这一层的影响,这通过权重来决定。然后通过sigmoid函数,得到最终的这一次元素的值
-
多类的分类,可以用神经网络输出多个值来决定。
比如在以上的神经网络中,输出向量为4*1,每次只有一个元素为1,其余的三个元素为0. -
评价神经网络模型的好坏,同样是使用代价函数。其代价函数的形式如下:
其中,m是样本的数量,L是神经网络的层数,k代表输出向量的维度(或者说元素个数), s l s_l sl代表第 l l l层的元素个数(或者说神经元个数)
为了选出合适的参数能够最小化代价函数,可以运用反向传播算法
。在反向传播的时候,为了防止出现一些不易察觉的错误,如虽然代价看上去在不断减小,但最终的结果可能并不是最优解的情况,那么这个时候就需要用到梯度检验法
,所谓梯度检验法就是数值求解导数,选两个很接近的数进行求导。 -
训练神经网络的步骤:
6.支持向量机(Support Vector Machines)
在分类算法中,与逻辑回归和神经网络相比,支持向量机,或者简称SVM,在学习复杂的非线性方程时提供了一种更为清晰,更加强大的方式。
-
在引入支持向量机之前,首先看看逻辑回归。逻辑回归的代价函数如下:
由于y的取值只能是0或1,所以代价函数要么取第一个对数函数,要么取第二个对数函数。这两个函数的图像如下所示:
为代价函数的计算方便,将原本的黑色曲线用紫色的两段直线近似,紫线的拐点假设在±1的位置处。
那么如果y=0,原本只有当z趋向于负无穷时,代价函数才等于0,现在只需要z小于-1就等于0了;
同理:如果y=1,原本只有当z趋向于正无穷时,代价函数才等于0,现在只需要z大于1就等于0了。 -
通过对逻辑回归改造,就能得到支持向量机了。
逻辑回归的代价函数为:
相比于逻辑回归的代价函数,支持向量机的代价函数只是将内部的两个对数函数修改为两个只有两段直线的函数。显然代价函数的最小值问题与m无关,因此可以将1/m作为公因式提出来,然后删除。而 λ \lambda λ这个可调参数,可以把它放在第一项的前面,并记为C,注意这个参数只是觉得在求解的时候应该更看重第一项还是更看重第二项。
综上,支持向量机的代价函数应该写成:
那么在预测的时候,支持向量机的假设函数为:
只要 θ T x \theta^Tx θTx大于或等于0,就预测样本点的标记为1,否则为0.这和逻辑回归的概率式预测不同,逻辑回归输出的h是样本点标记为1的概率。 -
对比支持向量机的代价函数和假设函数,可以看到代价函数对 θ \theta θ的拟合值要求更高,在假设函数中,只要能让 θ T x \theta^Tx θTx大于或等于0就可以区分开了,但是在代价函数中,只有 θ T x \theta^Tx θTx大于或等于1才能保证误差项为0,正是这样,给支持向量机嵌入了一个额外的安全因子。也因为有这样一个安全因子,在分类的时候,支持向量机会做得更好,会尽量找一个大的间距来分离样本。如下图黑线
-
与逻辑回归类似,支持向量机通过选择不同的参数C来调节过拟合或欠拟合现象。
C很大,容易产生过拟合现象,导致高方差(对新样本不适应)
C很小,容易产生欠拟合现象,导致高偏差(对训练集的拟合效果不好) -
从SVM的代价函数中可以看到,在能使第一项为0的前提下,第二项想要最小,只能让各个数据点在分割线 θ T x = 0 \theta^Tx=0 θTx=0的法向量上的投影尽可能地大,从而在数学上可以理解为什么这个分类间隔会很大。
7. 核函数
- 前面讲述的大多数是直线分割类型,对于无法用直线分割的情况,可以构造多项式函数模型,即:
显然,对于上述的f,可以使用各点与“地标”之间的距离代替。
通过对 θ \theta θ的赋值,可以找到一些不规则的边界,来将y=1和y=0区分开来。
假设函数为:
h θ ( x ) = θ T f h_\theta(x)=\theta^Tf hθ(x)=θTf
当假设函数的计算结果大于等于0时,预测y=1,否则y=0
代价函数为:
- 有时候为了简化计算,将最后面一项写为
θ
T
M
θ
\theta^TM\theta
θTMθ,其中
M
M
M是根据我们选择的核函数不同而不同的一个矩阵。
另外,支持向量机也可以不使用核函数,不使用核函数又称为线性核函数(linear kernel),当我们不采用非常复杂的函数,或者我们的训练集特征非常多而样本非常少的时候,可以采用这种不带核函数的支持向量机。(前面的直线分割就是这样) - 总结一些普遍使用的准则: