斯坦福机器学习笔记-第三周

分类

分类问题如同回归问题,只不过其预测值变成了有限的特定集合。对于二分类来说,预测值仅仅为0或者1,称为逻辑回归

假设函数

对于逻辑回归其假设函数是$h_\theta(x)=\theta^TX$,而对于分类问题,假设函数变为:$h_\theta(x)=g(\theta^Tx)$,其中$g(z)=\frac{1}{1+e^{-z}}$,称该函数为$Sigmoid$ 函数或者$Logistic$ 函数。该函数图像如下:

Sigmoid函数

这里,$h$给出的结果是对预测的概率值,取值为从0到1。$h_\theta(x)=P(y=1|x;\theta)=1-P(y=0|x;\theta)$

决策边界

为了对分类进行预测,给定一个阈值0.5,当$h_\theta(x)>0.5$时,则预测$y=1$,反之则为$y=0$。而该分界点对应着$\theta^Tx=0$,也就是说:

$$\theta^Tx\geq0\Rightarrow y=1$$

$$\theta^Tx\leq 0\Rightarrow y=0$$

决策边界就是将$y=0;y=1$分离开来的边界线,对应着$h_\theta(x)=0.5$,这是由假设函数所决定的线。当然,值得强调一点的是,决策边界可能是直线,也可能是任意形状,比如下图:

决策边界示意

逻辑回归的损失函数

在线性回归中,曾讨论过线性回归的损失函数$J(\theta)=\frac{1}{2m}\sum\limits_{i=1}^m{(h_\theta(x^i)-y^i)^2}$,首先我们定义一个代价函数$Cost(h_\theta(x),y)=\frac{1}{2}(h_\theta(x)-y)^2$,对于线性回归​,由于$h_\theta(x)$是多项式,其损失函数总是$凸函数Convex$,而对于逻辑回归函数,由于$h_\theta(x)$当中有一项$\frac{1}{1+e^{-z}}$,导致其损失函数是一个非凸函数,进而会导致函数求解存在局部最优解,如下图示意:

左:非凸函数;右:凸函数

鉴于以上原因,需要重新定义逻辑回归的损失函数,给出定义如下:

$J(\theta)=\frac{1}{m}\sum\limits_{i=1}^m(Cost(h_\theta(x),y))$

$Cost(h_\theta(x),y)=-log(h_\theta(x)) \quad if\ y=1 $

$Cost(h_\theta(x),y)=-log(1-h_\theta(x))\quad if\ y=0$

上述的两个代价函数可以合并为以下形式:

$Cost(h_\theta(x),y)=-ylog(h_\theta(x))-(1-y)log(1-h_\theta(x))$

函数图像如下示意:

逻辑回归损失函数

现在,逻辑回归的损失函数可以完整表示为:$J(\theta)=-\frac{1}{m}\sum\limits_{i=1}^m[y^{(i)}log(h_\theta(x^{(i)}))-(1-y)log(1-h_\theta(x^{(i)}))]$

向量化表示为:$h=g(X\theta);J(\theta)=\frac{1}{m}(-y^Tlog(h)-(1-y)^Tlog(1-h))$

其梯度下降更新公式为:$\theta_j:=\theta_j-\alpha\frac{\partial}{\partial\theta_j}J(\theta)=\theta_j-\frac{\alpha}{m}\sum\limits_{i=1}^m(h_\theta(x^{(i)})-y^{(i)})x_j^{(i)}$

向量化表示为:$\theta :=\theta-\frac{\alpha}{m}X^T(g(X\theta)-y)$

高级优化器

为了求解参数,我们使用了梯度下降算法作为优化算法,事实上,有其他更多高级的优化算法,比如BFGS(共轭梯度),L-BFGS等。这些算法通常有着比梯度下降更好的性能、更快的收敛速度,但是实现更为复杂。在Octave中,可以使用fminunc函数来使用这些优化器,函数会自动选择合适的优化器。

% 计算损失J及其梯度
function [jVal, gradient] = costFunction(theta)
  jVal = [...code to compute J(theta)...];
  gradient = [...code to compute derivative of J(theta)...];
end

% 调用优化器
options = optimset('GradObj', 'on', 'MaxIter', 100);
initialTheta = zeros(2,1);
[optTheta, functionVal, exitFlag] = fminunc(@costFunction, initialTheta, options);

多分类问题

逻辑回归多分类原理

逻辑回归的多分类问题可以通过一对多实现,即:对于n个分类,针对每一个类别与其他类别,分别训练一个分类器,共训练n个分类器。对于某样本的预测值,最后取n个分类器概率最大值即可。

过拟合

如下图,对于房价预测的例子,假设我们有$A,B,C,D,E,F,G,H,I$这样一组数据,想要做出一个拟合模型。最简单的就是直线拟合$h_\theta(x)=\theta_0+\theta_1x$,如图中灰色线,但此时很多点都在直线外;进一步,使用三次多项式拟合$h_\theta(x)=\theta_0+\theta_1x+\theta_2x^2+\theta_3x^3$,此时对点的拟合效果较好;更进一步,如果使用5次多项式进行拟合$h_\theta(x)=\theta_0+\theta_1x+\theta_2x^2+\theta_3x^3+\theta_4x^4+\theta_5x^5$,此时几乎所有点都在直线上,但是这也明显看得出来这条预测线对已知数据拟合得“太好了” ,几乎已经失去了对新数据进行合理预测的能力。因此称这种现象为过拟合(Over fitting) ,而第一种情况则相应的称为欠拟合

各种情况的的拟合

一般的,欠拟合:存在着高偏差(bias),而过拟合,则存在着高方差(variance)。

为了减少过拟合的问题,可采用的方法包括:

  1. 减少特征数量
  2. 正则化

代价函数的改进

为了解决过拟合的问题,我们可以在代价函数上进行改进。在上面的房价预测中,我们希望假设函数是一个接近二次或者三次的多项式,但实际上我们的假设函数是五次多项式:$h_\theta(x)=\theta_0+\theta_1x+\theta_2x^2+\theta_3x^3+\theta_4x^4+\theta_5x^5$,此时,实际上我们希望$\theta_3,\theta_4,\theta_5$接近0,那么真实的预测函数就会接近二次多项式。这种情况可以通过在损失函数中添加正则化项来实现。

$J(\theta)=\frac{1}{2m}\sum\limits_{i=1}^m(h_\theta(x^{(i)}-y^{(i)})^2)+\lambda\sum\limits_{j=1}^n\theta_j^2$

上式中,$\lambda$称为正则化参数,该参数能平滑拟合函数,减少过拟合。当其过大,会造成拟合线趋近于水平线,导致欠拟合,而当其过小(接近于0),则起不到平滑作用,导致过拟合

正则化线性回归

首先,将参数更新修改为以下形式:

将$\theta_0$分离出来的原因是正则化项并不从0开始。这是一种约定俗成。

将上述更新公式稍作改变:$\theta_j:=\theta_j(1-\alpha\frac{\lambda}{m})-\frac{\alpha}{m}\sum\limits_{i=1}^m(h_\theta(x^{(i)}-y^{(i)})x_j^{(i)}$

可以发现,正则化后的更新公式就是在原来的更新公式基础上对$\theta_j$做了缩放,并且,由于$\alpha>0,\lambda>0,m>0\rightarrow 1-\alpha\frac{\lambda}{m}<1$。所以正则化总是将参数进行了压缩

正规方程解法的改进

添加了正则化项后的正规方程变化为以下形式:

当然,此时同样需要注意矩阵的不可逆问题

正则化逻辑回归

对于逻辑回归,其原理跟线性回归完全一致,只不过相应的损失函数变为:

$J(\theta)=-\frac{1}{m}\sum\limits_{i=1}^m[y^{(i)}log(h_\theta(x^{(i)}))+(1-y^{(i)})log(1-h_\theta(x^{(i)}))]+\frac{\lambda}{2m}\sum\limits_{j=1}^n\theta^2$


   转载规则


《斯坦福机器学习笔记-第三周》 查永春 采用 知识共享署名 4.0 国际许可协议 进行许可。
  目录