3
判定边界
在逻辑回归中,我们预测:
当
h
θ
大于等于
0.5
时,预测
y=1
当
h
θ
小于
0.5
时,预测
y=0
根据上面绘制出的
S
形函数图像,我们知道当
z=0
时
g(z)=0.5
z>0
时
g(z)>0.5
z<0
时
g(z)<0.5
又
z=θ
T
X
,即:
θ
T
X
大于等于
0
时,预测
y=1
θ
T
X
小于
0
时,预测
y=0
现在假设我们有一个模型:
并且参数
θ
是向量
[-3 1
1]
。 则当
-3+x
1
+x
2
大于等于
0
,即
x
1
+x
2
大于等于
3
时,模型将预测
y=1
。
我们可以绘制直线
x
1
+x
2
=3
,这条线便是我们模型的分界线,将预测为
1
的区域和预测
为
0
的区域分隔开。
假使我们的数据呈现这样的分布情况,怎样的模型才能适合呢?
因为需要用曲线才能分隔 y=0 的区域和 y=1 的区域,我们需要二次方特征: 假设参数 是[-1 0 0 1 1],则我们得到的判定边界恰好是圆点在原点且半径为 1 的圆形。
我们可以用非常复杂的模型来适应非常复杂形状的判定边界。
4 代价函数
对于线性回归模型,我们定义的代价函数是所有模型误差的平方和。理论上来说,我们
也可以对逻辑回归模型沿用这个定义,但是问题在于,当我们将
带入到
这样定义了的代价函数中时,我们得到的代价函数将是一个非凸函数(non-convex function)。
这意味着我们的代价函数有许多局部最小值,这将影响梯度下降算法寻找全局最小值。
因此我们重新定义逻辑回归的代价函数为:
hθ(x)与 Cost(hθ(x),y)之间的关系如下图所示:
这样构建的
Cost(h
θ
(x),y)
函数的特点是:当实际的
y=1
且
h
θ
也为
1
时误差为
0
,当
y=1
但
h
θ
不为
1
时误差随着
hθ
的变小而变大;当实际的
y=0
且
h
θ
也为
0
时代价为
0
,当
y=0
但
h
θ
不为
0
时误差随着
hθ
的变大而变大。
将构建的
Cost(h
θ(x),y)简化如下:
带入代价函数得到:
在得到这样一个代价函数以后,我们便可以用梯度下降算法来求得能使代价函数最小的
参数了。算法为:
求导后得到:
注:虽然得到的梯度下降算法表面上看上去与线性回归的梯度下降算法一样,
但是这里
的
h
θ
(x)=g(θ
T
X)
与线性回归中不同,所以实际上是不一样的
。另外,在运行梯度下降算法之
前,进行特征缩放依旧是非常必要的。
一些梯度下降算法之外的选择: 除了梯度下降算法以外,还有一些常被用来令代价函
数最小的算法,这些算法更加复杂和优越,而且通常不需要人工选择学习率,通常比梯度下
降算法要更加快速。这些算法有:共轭梯度(
Conjugate Gradient
),局部优化法
(Broyden fletcher
goldfarb shann,BFGS)
和有限内存局部优化法
(LBFGS) fminunc
是
matlab
和
octave
中都带的一
个最小值优化函数,使用时我们需要提供代价函数和每个参数的求导,下面是 octave 中使用
fminunc
函数的代码示例:
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);