分类问题
逻辑回归算法
性质:它的输出值永远在0到 1 之间。
实质:分类算法,适用于标签y值取值离散的情况。
假说表示
根据线性回归模型我们只能预测连续的值,然而对于分类问题,我们需要输出0或1,我们可以预测:
当时,预测y = 1;
当 时,预测y= 0;
逻辑回归假设模型
其中
:对于给定的输入变量,根据选择的参数计算输出变量=1的可能性
函数图像如下图:
取值在(0,1)之间,更贴合于分类问题。
例:
如果对于给定的x,通过已经确定的参数计算得出,则表示有70%的几率y为正向类,相应地y为负向类的几率为1-0.7=0.3。
判定边界
根据上面绘制出的 S 形函数图像,我们知道当
判定边界:分隔y=0 与 y=1的分界线,由假设模型确定
例子:
参数是向量[-3 1 1]。 则当 ,即时,模型将预测 y=1。 我们可以绘制直线,这条线便是我们模型的分界线,将预测为1的区域和预测为 0的区域分隔开。
代价函数
逻辑回归的代价函数为
其中
与 之间的关系如下图所示
当实际的y=1且 也为h(x)=1时误差为 0,当y=1但h(x)不为1时误差随着h(x)变小而变大;当实际的y=0且 也h(x)为0 时代价为 0,当y=0但h(x)不为0时误差随着h(x)的变大而变大。
构建的cost简化
带入代价函数,得到逻辑回归代价函数为:
更新参数规则
向量化表示:
优化算法
计算参数更优化的算法:
共轭梯度(Conjugate Gradient),局部优化法(Broyden fletcher goldfarbshann,BFGS)和有限内存局部优化法(LBFGS)
使用library库即可使用这些算法
octave使用优化算法示例:
首先定义代价函数及每个参数的求导
function [jVal, gradient] = costFunction(theta)
jVal = [...code to compute J(theta)...];
gradient = [...code to compute derivative of J(theta)...];
end
使用fminunc()计算参数 使用optimset设置优化参数
options = optimset('GradObj', 'on', 'MaxIter', 100);
initialTheta = zeros(2,1);
[optTheta, functionVal, exitFlag] = fminunc(@costFunction, initialTheta, options);
多类别分类:一对多
将多个类中的一个类标记为正向类(y=1),然后将其他所有类都标记为负向类,这个模型记作 。接着,类似地第我们选择另一个类标记为正向类(y=2),再将其它类都标记为负向类,将这个模型记作 ,依此类推。
最后我们得到一系列的模型简记为: 其中:i=(1,2,3...k)
在需要做预测时,我们将所有的分类机都运行一遍,然后对每一个输入变量,选择最高可能性的输出变量。