逻辑回归公式推导
sigmoid函数形式:
g
(
z
)
=
1
1
+
e
−
z
g\left( z \right) = \frac{1}{{1 + {e^{ - z}}}}
g(z)=1+e−z1当z趋近于负无穷时,g(z)趋近于0,令z=wx,就得到了逻辑回归模型:
h
w
(
x
)
=
1
1
+
e
−
w
x
{h_w}\left( x \right) = \frac{1}{{1 + {e^{ - wx}}}}
hw(x)=1+e−wx1h(x)表示模型输出,可以理解为输出是正样本的概率,w是模型的参数。
参数估计:
设:
P
(
y
=
1
∣
x
,
w
)
=
h
w
(
x
)
P\left( {y = 1|x,w} \right) = {h_w}\left( x \right)
P(y=1∣x,w)=hw(x),
P
(
y
=
0
∣
x
,
w
)
=
1
−
h
w
(
x
)
P\left( {y = 0|x,w} \right) = 1 - {h_w}\left( x \right)
P(y=0∣x,w)=1−hw(x)
合成一个式子就是:
P
(
y
∣
x
,
w
)
=
h
w
(
x
)
y
(
1
−
h
w
(
x
)
1
−
y
)
P\left( {y|x,w} \right) = {h_w}{\left( x \right)^y}\left( {1 - {h_w}{{\left( x \right)}^{1 - y}}} \right)
P(y∣x,w)=hw(x)y(1−hw(x)1−y)通过最大似然函数来估计参数w。
似然函数为:
∏
i
=
1
n
[
h
w
(
x
i
)
]
y
i
[
1
−
h
w
(
x
i
)
]
1
−
y
i
{\prod\limits_{i = 1}^n {\left[ {{h_w}\left( {{x_i}} \right)} \right]} ^{{y_i}}}{\left[ {1 - {h_w}\left( {{x_i}} \right)} \right]^{1 - {y_i}}}
i=1∏n[hw(xi)]yi[1−hw(xi)]1−yi其中n为样本的个数。
对数似然函数为:
L
(
w
)
=
∑
i
=
1
n
[
y
i
l
o
g
h
w
(
x
i
)
+
(
1
−
y
i
)
l
o
g
(
1
−
h
w
(
x
i
)
)
]
L\left( w \right) = \sum\limits_{i = 1}^n {\left[ {{y_i}log{h_w}\left( {{x_i}} \right) + \left( {1 - {y_i}} \right)log\left( {1 - {h_w}\left( {{x_i}} \right)} \right)} \right]}
L(w)=i=1∑n[yiloghw(xi)+(1−yi)log(1−hw(xi))]带入
h
w
(
x
)
=
1
1
+
e
−
w
x
{h_w}\left( x \right) = \frac{1}{{1 + {e^{ - wx}}}}
hw(x)=1+e−wx1,经过推导可得
L
(
w
)
=
∑
i
=
1
n
[
y
i
x
i
w
−
log
(
1
+
e
w
x
i
)
]
L\left( w \right) = \sum\limits_{i = 1}^n {\left[ {{y_i}{x_i}w - \log \left( {1 + {e^{w{x_i}}}} \right)} \right]}
L(w)=i=1∑n[yixiw−log(1+ewxi)]极大化对数似然函数就可以得到w的估计值。
梯度上升法更新参数w:
∂
L
∂
w
=
∑
i
=
1
n
y
i
x
i
−
e
w
x
i
1
+
e
w
x
i
x
i
=
∑
i
=
1
n
(
y
i
−
h
w
(
x
i
)
)
x
i
\frac{{\partial L}}{{\partial w}} = \sum\limits_{i = 1}^n {{y_i}{x_i} - \frac{{{e^{w{x_i}}}}}{{1 + {e^{w{x_i}}}}}{x_i} = \sum\limits_{i = 1}^n {\left( {{y_i} - {h_w}\left( {{x_i}} \right)} \right){x_i}} }
∂w∂L=i=1∑nyixi−1+ewxiewxixi=i=1∑n(yi−hw(xi))xi
w
j
+
1
=
w
j
+
η
∑
i
=
1
n
(
y
i
−
h
w
(
x
i
)
)
x
i
{w_{j + 1}} = {w_j} + \eta \sum\limits_{i = 1}^n {\left( {{y_i} - {h_w}\left( {{x_i}} \right)} \right){x_i}}
wj+1=wj+ηi=1∑n(yi−hw(xi))xi
注:这里采用极大化对数似然函数,故使用梯度上升法更新参数。
三种梯度下降法
- 批量梯度下降法(Batch Gradient Descent)
批量下降法指的是每一次迭代使用所有样本来进行参数的更新,优点是当目标函数为凸函数时,能得到全局最优,缺点是每迭代一次计算量大。 - 随机梯度下降法(Stochastic Gradient Descent)
随机梯度下降法每次只使用一个样本来更新参数。
w j + 1 = w j + η ( y i − h w ( x i ) ) x i {w_{j + 1}} = {w_j} + \eta \left( {{y_i} - {h_w}\left( {{x_i}} \right)} \right){x_i} wj+1=wj+η(yi−hw(xi))xi优点是迭代一次的计算量小,参数更新快,缺点是可能会收敛到局部最优、不容易并行。SGD迭代次数比较多,在解空间的搜索过程中比较盲目。 - 小批量梯度下降(Mini-Batch Gradient Descent)
每次迭代使用部分样本来更新参数,综合了上述两种梯度下降的优缺点。是深度学习中最常见的参数更新方法。
逻辑回归工具包
#sklearn中逻辑回归
from sklearn.linear_model import LogisticRegression
#C表示正则化参数,C是正数,值越小表示正则化越强
#penalty选择l1还是l2取决于数据集大小,大样本(大于10万)用l2,过拟合情况严重用l1,做特征选择用l1
clf= LogisticRegression(C=1.0, penalty='l2',random_state=0)
clf.fit(data, labels)
逻辑回归优缺点
优点:
- 实现简单,在工业界广泛应用
- 计算量小,适合大规模训练,比如十亿级别的广告特征
- 从权重可以看出特征重要性
缺点:
- 准确率不高
- 不太适合处理非线性特征
逻辑回归面试问题
- 逻辑回归的损失函数为什么是对数损失?为什么不用平方损失?
答:对数损失更新梯度快,平方损失求导和sigmoid有关,sigmoid的导函数值不大于0.25,训练慢。- 参数更新时可以使用梯度下降也可以用牛顿法,这两种方法有什么区别?
答:梯度下降只用到一阶导数,牛顿法用了二阶导数信息。牛顿法收敛速度快但是计算复杂。- 多类别如何使用逻辑回归?
答:One-Vs-All,把多分类问题转化成多个二分类问题,选择一个类别作为正类,其余类则为负类,这样就可以训练出n个二元分类器,n表示类别数量。对每个样本找出输出值最大的作为它的类别。第二种方法是One-Vs-One,它是两两训练一个分类器,最后得到n个分类器,通过投票决定测试样本类别。最常用的方法是用softmax函数作为激活函数。