逻辑回归(Logistic Regression)
逻辑回归虽然带有“回归”两个字,实际上却是分类问题,此时要预测的值y是离散的。例如判断一封邮件是否是垃圾邮件,判断肿瘤是恶性还是良性。
先从二元逻辑回归问题开始,也就是y的值只有0和1两种取法。
假说模型
假设我们采用之前线性回归的模型
线性拟合后,我们用h(x)大于0.5预测1,小于0.5预测0 。看上去此时它工作良好。但是,如果新加一个数据点
<img class="alignnone size-large wp-image-2444" src="http://7d9rd6.com1.z0.glb.clouddn.com/wp-content/uploads/2016/03/scrn20160330184827-1024x334.png" alt="scrn20160330184827" width="1024" height="334" /></a></p>这会导致预测错误。可以看出线性回归的模型不再适合这个分类问题了,因为此时h(x)的值并不是0到1之间,而可能大于1.
因此在逻辑回归中,我们需要引入新的模型
其中的g代表逻辑函数(logistic function),其中最常用的一种叫做S 形函数(Sigmoid function),其定义如下:
当z趋于负无穷时,g(z)趋向0;当z趋于正无穷时,g(z)趋向于1;当z=0时,g(z) = 0.5 。g(z)的图形大致 如下:
<img class="alignnone size-full wp-image-2445" src="http://7d9rd6.com1.z0.glb.clouddn.com/wp-content/uploads/2016/03/scrn20160330190056.png" alt="scrn20160330190056" width="628" height="297" /></a></p>合起来就可以得到用于逻辑回归的模型
此时h(x)给出的结果是x对应的输出y=1的概率,也就是
当h(x)大于0.5时,我们预测结果为1;当h(x)小于0.5时,预测结果为0。根据上面的图形
θ T x>0 θTx>0时,对应h(x) > 0.5,应该预测结果为1;
θ T x<0 θTx<0时,对应h(x) < 0.5,应该预测结果为0;
决策边界(Decision Boundary)
模型中的分界线,将预测为1的区域和预测为0的趋于分成两部分。
<img class="alignnone size-full wp-image-2458" src="http://7d9rd6.com1.z0.glb.clouddn.com/wp-content/uploads/2016/03/scrn20160330202324.png" alt="scrn20160330202324" width="726" height="321" /></a></p>
代价函数(Cost Function)
在线性回归模型中的代价函数是每个实例误差的平方和
但是逻辑回归中,h(x)的形式变了。如果沿用上述公式,将导致J()是一个非凸函数,不利于我们找最值。因此,代价函数也需要重新定义:
其中
h(x)和Cost(h(x), y)之间的关系如下:
<img class="alignnone size-full wp-image-2449" src="http://7d9rd6.com1.z0.glb.clouddn.com/wp-content/uploads/2016/03/scrn20160330192223.png" alt="scrn20160330192223" width="428" height="186" /></a></p>
当y=1时,h(x)越接近1,Cost越小;h(x)越接近0,Cost越大。
当y=0时,h(x)越接近1,Cost越大;h(x)越接近0,Cost越小。
因此,Cost的定义是合理的,估计误差越大,代价就越大。
为了把Cost从两种情形合并为一种,可以写成如下的形式:
代入到代价函数中得到:
之后我们便可以使用梯度下降算法来求使代价函数最小的参数值了
求导后得到(待推导)
这看上去和线性回归中的更新规则相似,但却是不同的。因为其中的h(x)函数不一样。
线性回归中的假设函数
逻辑回归中的假设函数
调用matlab中的高级算法
可以调用 共轭梯度(Conjugate Gradient),局部优化法(Broyden fletcher goldfarb shann,BFGS)和有限内存局部优化法(LBFGS)等高级算法。只需要告诉计算机 如何求 J(θ) J(θ) 和 ∂∂θ j J(θ) ∂∂θjJ(θ) 。
这些高级算法的特点:不必手动选择学习率α α ,收敛速度很快; 实现复杂,不过库中已经实现了。
下面是一个例子:
<img class="alignnone size-full wp-image-2455" src="http://7d9rd6.com1.z0.glb.clouddn.com/wp-content/uploads/2016/03/scrn20160330195258.png" alt="scrn20160330195258" width="394" height="239" /></a></p>我们要来求使J(θ) J(θ)最小的参数值。需要实现一个函数
1
2
3
4
5
6
|
function
[
jVal
,
gradient
]
=
costFunc
(
theta
)
jVal
=
(
theta
(
1
)
-
5
)
^
2
+
(
theta
(
2
)
-
5
)
^
2
;
gradient
=
zeros
(
2
,
1
)
;
gradient
(
1
)
=
2
*
(
theta
(
1
)
-
5
)
;
gradient
(
2
)
=
2
*
(
theta
(
2
)
-
5
)
;
end
|
调用
1
2
3
4
5
6
7
8
9
10
11
|
options
=
optimset
(
'GradObj'
,
'on'
,
'MaxIter'
,
100
)
;
>>
initialTheta
=
zeros
(
2
,
1
)
;
>>
[
optTheta
,
functionVal
,
exitFlag
]
=
fminunc
(
@
costFunc
,
initialTheta
,
options
)
Local
minimum
found
.
Optimization
completed
because
the
size
of
the
gradient
is
less
than
the
default
value
of
the
function
tolerance
.
<
stopping
criteria
details
>
optTheta
=
5
5
|
多分类问题
多分类问题中的y输出多余2个值,一种可能的情况如下:
<img class="alignnone size-full wp-image-2456" src="http://7d9rd6.com1.z0.glb.clouddn.com/wp-content/uploads/2016/03/scrn20160330200140.png" alt="scrn20160330200140" width="209" height="229" /></a></p>使用一对多(One-vs-All)的方法可以解决这个问题。在一对多方法中,每次我们把数据分为y=某个和y=其他。
例如,先分成y=1和其他两部分,得到 h (1) (x) h(1)(x)
类似,y=2时可以得到 h (2) (x) h(2)(x)
<img class="alignnone size-full wp-image-2461" src="http://7d9rd6.com1.z0.glb.clouddn.com/wp-content/uploads/2016/03/scrn20160330203213.png" alt="scrn20160330203213" width="784" height="434" /></a></p>最后,我们得到一系列假说
在多分类问题时,我们把每个假说函数运行一遍,求出其中最大的概率。
正则化(Regularization)
过拟合(Overfitting)
<img class="alignnone size-full wp-image-2459" src="http://7d9rd6.com1.z0.glb.clouddn.com/wp-content/uploads/2016/03/scrn20160330202647.png" alt="scrn20160330202647" width="757" height="189" /></a></p>第一个用线性来拟合,显然不够准确,这称为欠拟合。
第二个看上去刚刚好。
第三个用过高次数的多项式,虽然完美拟合了训练集中的每个数据,但显然预测新数据时并不可靠。这称为过拟合。
分类问题中也有类似的问题
<img class="alignnone size-full wp-image-2460" src="http://7d9rd6.com1.z0.glb.clouddn.com/wp-content/uploads/2016/03/scrn20160330202941.png" alt="scrn20160330202941" width="791" height="298" /></a></p>正则化代价函数
上面回归问题中过拟合的模型是
如果减少 θ 3 θ3 和 θ 4 θ4的值,可以考虑修改代价函数,给它们添加一些惩罚。修改后的代价函数如下:
这样会使θ 3 θ3 和 θ 4 θ4的值减小很多。
假设我们有很多特征,不知道要缩小哪一个,可以采用下面的办法
根据惯例,我们不对θ 0 θ0进行惩罚。
其中 λ λ又叫做正则化参数(Regularization Parameter)。如果正则化参数太大,则会把所有参数最小化,导致近似直线,造成欠拟合。
正则化线性回归
代价函数
更新规则
把上式变形一下
对比不正则化的线性回归,正则化线性回归的梯度下降中,每θ θ的因数从1变为1–αλm 1–αλm,因此θ θ要额外缩小了一点。
使用正规方程也可以求解正则化线性回归问题,公式是
<img class="alignnone size-full wp-image-2463" src="http://7d9rd6.com1.z0.glb.clouddn.com/wp-content/uploads/2016/03/scrn20160330210145.png" alt="scrn20160330210145" width="524" height="130" /></a></p>正则化逻辑回归
代价函数
通过求导得出的梯度下降算法更新规则
这看上去和线性回归一样,但是h(x)是不同的。
仍然可以使用fminuc等函数来求解,只需修改参数的更新规则。