逻辑回归(Logistic Regression)
分类问题(classification)是机器学习要解决的另一大类问题,这里用到的方法是逻辑回归(logistic regression),也是目前机器学习领域应用最广泛的方法。先从基本的二分类问题入手,即输出
对于分类问题,只有离散有限的取值,显而易见的,用线性回归的表示方法并不能很好地表示,因此需要把假设函数的形式改写一下,引入S型函数(sigmoid function),也称逻辑函数(logistic function)。改写形式如下:
直观地看
其值域的范围是
例如,
通过计算
决策边界并不一定是直线,对于非线性的情况,会出现不同的形状。
而另一点需要强调的是,决策边界并不是样本的性质,而是决定于假设函数,或者说对问题的建模。
类比于线性回归,需要建立一个代价函数(cost function)来表示假设函数
直观地看代价函数就是
这里这样理解:当
整合上面的两个等式,可以得到一个统一的表达式:
在此类似于在线性回归中用梯度下降法优化代价函数的问题,这里应用梯度下降法的迭代公式:
代入
把
在实际应用中,相对于梯度下降法有很多算法可以使迭代收敛速度更快,如共轭梯度(Conjugate gradient)、BFGS、L-BFGS。Andrew教授的建议是利用现成的库去实现这些算法而不需要自己编写代码。如在Matlab/Octave的实现:
首先写出代价函数及其偏导
function [jVal, gradient] = costFunction(theta)
jVal = [...code to compute J(theta)...];
gradient = [...code to compute derivative of J(theta)...];
end
然后调用fminunc()优化函数
options = optimset('GradObj', 'on', 'MaxIter', 100);
initialTheta = zeros(2,1);
[optTheta, functionVal, exitFlag] = fminunc(@costFunction, initialTheta, options);
多分类问题(Multiclass Classification)
多分类问题是用一对多(one-vs-all)方法,把多分类的问题转化成多个二分类的问题,再用逻辑回归的方法解决。
假设
过拟合问题(Overfitting)
下图从左到右分别是对同一个样本的欠拟合(underfitting)、合适、过拟合(overfitting)。
欠拟合是指拟合形式过于简单不能反映样本的走向而不能对数据进行准确预测。与之相对的,所谓过拟合,即对一个样本的拟合形式过于严格(要求经过所有样本点),导致曲线的形式变得奇怪而不能正确反映样本的趋势走向,不能对样本以外的数据进行正确预测。
解决过拟合的方法是:
- 减少特征的数量
- 手动选择需要保留的数据
- 使用模型选择的算法
- 正规化
- 保留所有特征,但是减小参数
θ 的大小
- 保留所有特征,但是减小参数
对于正规化(regularization)可以这样理解:
假设现在假设函数的形式是
这样,通过改写代价函数的形式,增加“惩罚”项,以增加对参数
对于线性回归,代价函数为:
其中对于梯度下降法,每次的迭代方程为:(
对于标准方程法,改写成:
改写成这样有一个附加好处,就是加入
对于逻辑回归,代价方程改写为:
而梯度下降法的迭代方程与线性回归中的形式一样,只是其中假设函数的表达式不一样。