分类问题逻辑回归与过拟合及其正则化
分类问题
- 分类问题满足二元判断,根据计算机二进制原理,只有0,1两种情况,比如有/无,对/错,是/否等
- 分类问题需要设定阈值,高于/低于阈值对应二元分类问题的两种情况
由于线性回归曲线容易收到异常值的影响而导致同一阈值产生较大的偏差(曲率改变),因此不适合用于分类问题
假设方程
既然线性回归不合适,我们需要构建新的假设方程来解决分类问题,即逻辑方程,故称逻辑回归:
g
(
z
)
=
1
1
+
e
−
z
g(z) = \dfrac{1}{1 + e^{-z}}
g(z)=1+e−z1
其中应用于机器学习时:
假
设
方
程
:
h
θ
(
x
)
=
g
(
θ
T
x
)
其
中
:
z
=
θ
T
x
假设方程:h_\theta (x) = g(\theta^T x )\newline 其中:z = \theta^T x \newline
假设方程:hθ(x)=g(θTx)其中:z=θTx
逻辑方程曲线分布在0,1范围内,实现了数据规模的统一,且直观地表现了概率,其表达式满足:
h
θ
(
x
)
=
P
(
y
=
1
∣
x
;
θ
)
=
1
−
P
(
y
=
0
∣
x
;
θ
)
P
(
y
=
0
∣
x
;
θ
)
+
P
(
y
=
1
∣
x
;
θ
)
=
1
h_\theta(x) = P(y=1 | x ; \theta) = 1 - P(y=0 | x ; \theta) \newline P(y = 0 | x;\theta) + P(y = 1 | x ; \theta) = 1
hθ(x)=P(y=1∣x;θ)=1−P(y=0∣x;θ)P(y=0∣x;θ)+P(y=1∣x;θ)=1
决策边界
- 选定阈值,如threshold = 0.5则:
h θ ( x ) ≥ 0.5 → y = 1 h θ ( x ) < 0.5 → y = 0 h_\theta(x) \geq 0.5 \rightarrow y = 1 \newline h_\theta(x) < 0.5 \rightarrow y = 0 hθ(x)≥0.5→y=1hθ(x)<0.5→y=0则此时: θ T x ≥ 0 ⇒ y = 1 θ T x < 0 ⇒ y = 0 \theta^T x \geq 0 \Rightarrow y = 1 \newline \theta^T x < 0 \Rightarrow y = 0 \newline θTx≥0⇒y=1θTx<0⇒y=0 - 求解 θ T x = 0.5 ( t h r e s h o l d ) \theta^Tx = 0.5(threshold) θTx=0.5(threshold),其解即为决策边界,在图形上表示为一条分离数据集的曲线,其两侧则为分类后不同类的数据集
逻辑回归模型
代价函数
我们不能套用线性回归的回归方程计算,事实上,我们需要采用一套99新的算法:
J
(
θ
)
=
1
m
∑
i
=
1
m
C
o
s
t
(
h
θ
(
x
(
i
)
)
,
y
(
i
)
)
C
o
s
t
(
h
θ
(
x
)
,
y
)
=
−
log
(
h
θ
(
x
)
)
if y = 1
C
o
s
t
(
h
θ
(
x
)
,
y
)
=
−
log
(
1
−
h
θ
(
x
)
)
if y = 0
J(\theta) = \dfrac{1}{m} \sum_{i=1}^m \mathrm{Cost}(h_\theta(x^{(i)}),y^{(i)}) \newline \mathrm{Cost}(h_\theta(x),y) = -\log(h_\theta(x)) \;\text{if y = 1} \newline\mathrm{Cost}(h_\theta(x),y) = -\log(1-h_\theta(x)) \;\text{if y = 0}
J(θ)=m1i=1∑mCost(hθ(x(i)),y(i))Cost(hθ(x),y)=−log(hθ(x))if y = 1Cost(hθ(x),y)=−log(1−hθ(x))if y = 0
- 当分类结果y=1时:
假设方程输出1,代价方程结果为0
假设方程输出0,代价方程逼近无限 - 当分类结果y=0时:
假设方程输出0,代价方程结果为0
假设方程输出1,代价方程逼近无限
不考虑分类情况,我们可以对代价函数用一个公式统一表示:
J
(
θ
)
=
1
−
m
∑
i
=
1
m
[
y
(
i
)
l
o
g
(
h
θ
(
x
(
i
)
)
)
+
(
1
−
y
(
i
)
)
l
o
g
(
1
−
h
θ
(
x
(
i
)
)
)
]
J(θ)=\dfrac{1}{−m}\sum_{i=1}^m [y^{(i)}log(h_θ(x^{(i)}))+(1−y^{(i)})log(1−h_θ(x^{(i)}))]
J(θ)=−m1i=1∑m[y(i)log(hθ(x(i)))+(1−y(i))log(1−hθ(x(i)))]
矢量表达式即为:
h
=
g
(
X
θ
)
J
(
θ
)
=
1
m
⋅
(
−
y
T
log
(
h
)
−
(
1
−
y
)
T
log
(
1
−
h
)
)
h = g(X\theta)\newline J(\theta) = \frac{1}{m} \cdot \left(-y^{T}\log(h)-(1-y)^{T}\log(1-h)\right)
h=g(Xθ)J(θ)=m1⋅(−yTlog(h)−(1−y)Tlog(1−h))
梯度下降
原理相同:
R
e
p
e
a
t
{
θ
j
:
=
θ
j
−
α
∂
∂
θ
j
J
(
θ
)
}
Repeat \; \lbrace \newline \; \theta_j := \theta_j - \alpha \dfrac{\partial}{\partial \theta_j}J(\theta) \newline \rbrace
Repeat{θj:=θj−α∂θj∂J(θ)}
求偏导项:
R
e
p
e
a
t
{
θ
j
:
=
θ
j
−
α
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
x
j
(
i
)
}
Repeat \; \lbrace \newline \; \theta_j := \theta_j - \frac{\alpha}{m} \sum_{i=1}^m (h_\theta(x^{(i)}) - y^{(i)}) x_j^{(i)} \newline \rbrace
Repeat{θj:=θj−mαi=1∑m(hθ(x(i))−y(i))xj(i)}
矢量化:
θ
:
=
θ
−
α
m
X
T
(
g
(
X
θ
)
−
y
⃗
)
θ:=θ− \dfrac{\alpha}{m}X^T(g(Xθ)−\vec{y})
θ:=θ−mαXT(g(Xθ)−y)
高级优化
参数优化方法
- 梯度下降(Gradient Descent)
- 共轭梯度下降(Conjugate Gradient)
- BFGS(Broyden–Fletcher–Goldfarb–Shanno)
- L-BFGS(Limited-memory BFGS)
梯度下降不是唯一的优化参数的方法
算法实践
高级优化太高级了,非专业人士不建议自己写算法,寻找其它已经存在的算法库进行计算更加现实,如在Octave中:
照本宣科,注意fminunc为高级优化算法,参数@costFunction为计算代价函数的回调方法
多类分类
当分类问题输出结果y的类型>2,我们称此为多类分类问题,此时,采取计算机传统的二元判断已经无法满足需求
一对多模型
专业解决多类分类问题一百年
- 通过训练集(一直分类),为每个类都建立一个逻辑回归分类模型,和其它模型进行区分,即回到了二元判断模型,有n类就要建立n个模型,class i = model i
模型其实就是指的参数 θ \theta θ不同,相应的假设方程和代价函数也不通过,公式是一样的 - 为每一个样本,代入所有模型,计算出它们的概率值(逻辑方程的解,不是代价函数值)
- 选择样本概率最高的模型i,将样本归于类i,重复此步直到分类完成
过拟合
什么是过拟合
欠拟合 | 很不错 | 过拟合 |
---|---|---|
高偏差 | 刚刚好 | 高方差 |
-
减少样本集特征数:
- 人为筛选特征量
- 使用特征选择模型
-
正则化:保留所有特征,大幅减小参数 θ j \theta_j θj,适用于大量存在都有点用的特征量的情况
正则化原理
代价函数公式:
m
i
n
θ
1
2
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
2
+
λ
∑
j
=
1
n
θ
j
2
min_θ\dfrac{1}{2m}\sum_{i=1}^{m}(h_θ(x_{(i)})−y_{(i)})^2+λ\sum_{j=1}^{n}θ_j^2
minθ2m1i=1∑m(hθ(x(i))−y(i))2+λj=1∑nθj2
- λ ∑ j = 1 n θ j 2 λ\sum_{j=1}^{n}θ_j^2 λ∑j=1nθj2为正则项,正则项不包括 θ 0 \theta_0 θ0
- 其中lambda是一个较大值,如1000,此时进行梯度下降时,要使代价函数值小,相应的特征值就要小,从而能够避免高方差,实现惩罚(penalize)
惩罚究竟使如何实现的呢?答案就在于求偏导。对代价函数求偏导后, θ \theta θ在梯度下降时就会多减一个值,从而实现惩罚 - lambda过大,曲线接近于直线,欠拟合高偏差
- lambda过小,反作用
正则化线性回归
梯度下降
R
e
p
e
a
t
{
θ
0
:
=
θ
0
−
α
1
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
x
0
(
i
)
θ
j
:
=
θ
j
−
α
[
(
1
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
x
j
(
i
)
)
+
λ
m
θ
j
]
j
∈
{
1
,
2...
n
}
}
{Repeat}\ \lbrace \newline \ \ \ \ \theta_0 := \theta_0 - \alpha\ \frac{1}{m}\ \sum_{i=1}^m (h_\theta(x^{(i)}) - y^{(i)})x_0^{(i)} \newline \ \ \ \ \theta_j := \theta_j - \alpha\ \left[ \left( \frac{1}{m}\ \sum_{i=1}^m (h_\theta(x^{(i)}) - y^{(i)})x_j^{(i)} \right) + \frac{\lambda}{m}\theta_j \right] \ \ \ \ \ \ \ \ \ \ j \in \lbrace 1,2...n\rbrace\newline \rbrace
Repeat { θ0:=θ0−α m1 ∑i=1m(hθ(x(i))−y(i))x0(i) θj:=θj−α [(m1 ∑i=1m(hθ(x(i))−y(i))xj(i))+mλθj] j∈{1,2...n}}
与正则化代价函数相同,
θ
0
\theta_0
θ0也不包括在正则化范围内,换言之,
θ
0
\theta_0
θ0不受正则化影响
对
θ
j
\theta_j
θj项简单处理:
θ
j
:
=
θ
j
(
1
−
α
λ
m
)
−
α
1
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
x
j
(
i
)
θ_j:=θ_j(1−α\dfrac{λ}{m})−α\dfrac{1}{m}\sum_{i=1}^m(h_θ(x^{(i)})−y^{(i)})x_j^{(i)}
θj:=θj(1−αmλ)−αm1i=1∑m(hθ(x(i))−y(i))xj(i)
其中
(
1
−
α
λ
m
)
(1−α\dfrac{λ}{m})
(1−αmλ)项<1,使得
θ
j
\theta_j
θj不断减小,实现惩罚
正态方程
同样将
λ
\lambda
λ引入正态方程
θ
=
(
X
T
X
+
λ
⋅
L
)
−
1
X
T
y
where
L
=
[
0
1
1
⋱
1
]
\theta = \left( X^TX + \lambda \cdot L \right)^{-1} X^Ty \newline \text{where}\ \ L = \begin{bmatrix} 0 & & & & \newline & 1 & & & \newline & & 1 & & \newline & & & \ddots & \newline & & & & 1 \newline\end{bmatrix}
θ=(XTX+λ⋅L)−1XTywhere L=[011⋱1]
数组中的值都排列在在对角线上,显示不出来
- L为(n+1)×(n+1)矩阵,n为样本特征量
- m < n, X T X X^TX XTX不可逆,加上 λ . L \lambda.L λ.L后就可逆了
- m > n, X T X X^TX XTX可逆
正则化逻辑回归
正则化代价函数
同样排除 θ 0 \theta_0 θ0项,正则项也是相同的
正则化梯度下降
除公式外的原理相同,多减去的正则项也相同,没什么好多说的
吴恩达课堂补充
为什么逻辑回归的代价函数(同其他)是这样子的呢?根据吴恩达在深度学习课程上的解释:
单纯地使用平方差无法获得全局最优解,而会获得多个最优解;而使用改进后的代价函数,预测值与实际分类y都是越符合越好,亦即y --> 0时,y_hat同样要 --> 0,反之同理(绿色部分),且能够获得唯一的全局最优解。
至于梯度下降的原理:
从二维角度考虑,关键是repeat中运行梯度下降的公式的负号要注意。有了这个负号,全局最优点左边偏导为负,则
w
w
w增加,逐渐靠近最优解;右边同理,参数b同理,两者结合的效果: