二元分类问题:
将线性回归应用于二元分类问题:
假设函数: hθ(x)=θTx h θ ( x ) = θ T x 分类器阈值输出 hθ(x) h θ ( x ) 为 0.5 0.5
若 hθ(x)≥0.5 h θ ( x ) ≥ 0.5 ,预测 y=1 y = 1 ;
若 hθ(x)<0.5 h θ ( x ) < 0.5 ,预测 y=0 y = 0 。
对于分类问题来说, y=0 or 1 y = 0 o r 1 ,但是对于 hθ(x) h θ ( x ) ,可以 >1 or <0 > 1 o r < 0 。
由于我们希望
0≤hθ(x)≤1
0
≤
h
θ
(
x
)
≤
1
,故引入逻辑回归算法:
(注:忽略离散值,可以使用回归算法)
假设函数:
故逻辑回归算法的假设函数为
正式写法:
逻辑回归算法的决策边界:
当 hθ(x)≥0.5 or z≥0 h θ ( x ) ≥ 0.5 o r z ≥ 0 时, y=1 y = 1 ;
当 hθ(x)<0.5 or z<0 h θ ( x ) < 0.5 o r z < 0 时, y=0 y = 0 。
若存在训练集:
{(x(1),y(1)),(x(2),y(2)),⋯,(x(m),y(m))}
{
(
x
(
1
)
,
y
(
1
)
)
,
(
x
(
2
)
,
y
(
2
)
)
,
⋯
,
(
x
(
m
)
,
y
(
m
)
)
}
其中,
假设函数为:
当 y=0 y = 0 时,若 hθ(x)=0 h θ ( x ) = 0 ,则 Cost=0 C o s t = 0 ,若 hθ(x)=1 h θ ( x ) = 1 ,则 Cost→∞ C o s t → ∞ 。
将 Cost(hθ(x),y) C o s t ( h θ ( x ) , y ) 简化可得:
向量化表示则为:
Repeat {
即:
Repeat {
向量化表示则为:
利用梯度下降法最小化 J(θ) J ( θ ) ,须计算的是 J(θ) J ( θ ) 及 ∂∂θjJ(θ) ∂ ∂ θ j J ( θ ) 。
除了梯度下降法外,还有其他方法计算 θ θ :
- 共轭梯度法;
- BFGS B F G S (变长度法)
- L L -(限制尺度法)
这三种方法的优点:
- 不需要手动选择学习速率 α α ;
- 收敛得比梯度下降法更快。
缺点:更加复杂。
举例:
θ=[θ1θ2]
θ
=
[
θ
1
θ
2
]
J(θ)=(θ1−5)2+(θ2−5)2
J
(
θ
)
=
(
θ
1
−
5
)
2
+
(
θ
2
−
5
)
2
∂∂θ1J(θ)=2∗(θ1−5)
∂
∂
θ
1
J
(
θ
)
=
2
∗
(
θ
1
−
5
)
∂∂θ2J(θ)=2∗(θ2−5)
∂
∂
θ
2
J
(
θ
)
=
2
∗
(
θ
2
−
5
)
实现方法如下:
function[jVal,gradient]=costFunction(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);
options=optimset('Gradobj','on','MaxIter','100');
initialTheta=zeros(2,1);
[OptTheta,functionVal,exitFlag]=fminunc(@costFunction,initialTheta,options);
利用梯度下降法求
J(θ)
J
(
θ
)
及
∂∂θjJ(θ)
∂
∂
θ
j
J
(
θ
)
的一般程序模板:
theta=⎡⎣⎢⎢⎢⎢θ0θ1⋮θn⎤⎦⎥⎥⎥⎥
t
h
e
t
a
=
[
θ
0
θ
1
⋮
θ
n
]
function[jVal,gradient]=costFunction(theta) f u n c t i o n [ j V a l , g r a d i e n t ] = c o s t F u n c t i o n ( t h e t a )
jVal=[code to computeJ(θ)]
j
V
a
l
=
[
c
o
d
e
t
o
c
o
m
p
u
t
e
J
(
θ
)
]
gradient(1)=[code to compute ∂∂θ0J(θ)]
g
r
a
d
i
e
n
t
(
1
)
=
[
c
o
d
e
t
o
c
o
m
p
u
t
e
∂
∂
θ
0
J
(
θ
)
]
gradient(2)=[code to compute ∂∂θ1J(θ)]
g
r
a
d
i
e
n
t
(
2
)
=
[
c
o
d
e
t
o
c
o
m
p
u
t
e
∂
∂
θ
1
J
(
θ
)
]
⋮
⋮
gradient(n+1)=[code to compute ∂∂θnJ(θ)]
g
r
a
d
i
e
n
t
(
n
+
1
)
=
[
c
o
d
e
t
o
c
o
m
p
u
t
e
∂
∂
θ
n
J
(
θ
)
]
对于多元分类问题,可将其拆解为多个二元分类问题。
即: