文章目录
前言
逻辑回归,又称逻辑斯蒂回归,与线性回归一样,都是线性模型家族的经典的分类方法。线性回归以及逻辑回归都属于广义线性模型。逻辑回归是基于线性模型进行实值预测,通过非线性函数(sigmoid函数)映射到0,1之间,来处理二分类任务。
逻辑回归的目的是寻找一个非线性函数的最佳拟合参数,求解过程可以由最优化算法来完成。在优化算法中最常用的就是梯度上升或者下降(具体需要看目标函数的表达,一般情况下,求目标函数的最大可以转换为求目标函数取反后的最小值,使用梯度下降)算法,在梯度下降算法中,随机梯度下降算法与梯度下降算法的效果相当,但占用更少的计算资源。
逻辑回归模型
1.逻辑斯蒂分布
定义:设X是连续随机变量,X服从逻辑斯蒂分布是指X具有下列分布函数和密度函数:
F
(
x
)
=
P
(
X
≤
x
)
=
1
1
+
e
−
(
x
−
μ
)
/
γ
F(x)=P(X \leq x)=\frac{1}{1+e^{-(x-\mu)/\gamma} }
F(x)=P(X≤x)=1+e−(x−μ)/γ1
f
(
x
)
=
F
′
(
x
)
=
e
−
(
x
−
μ
)
/
γ
γ
(
1
+
e
(
x
−
μ
)
/
γ
)
2
f(x)=F'(x)=\frac{e^{-(x-\mu)/\gamma}}{\gamma(1+e^(x-\mu)/\gamma)^2}
f(x)=F′(x)=γ(1+e(x−μ)/γ)2e−(x−μ)/γ
式中,
μ
\mu
μ为位置参数,
γ
>
0
\gamma>0
γ>0为形状参数。
函数图像如下:
2.二项逻辑斯蒂回归模型
一种分类模型,由条件概率分布
P
(
Y
∣
X
)
P(Y|X)
P(Y∣X)表示,形式为参数化的逻辑斯蒂分布。随机变量X取值为 实数,随机变量Y取值为1或0,通过监督学习的方法来估计模型参数。
二项逻辑斯蒂回归模型定义如下:
P
(
Y
=
1
∣
x
)
=
e
w
⋅
x
+
b
1
+
e
w
⋅
x
+
b
P(Y=1|x)=\frac{e^{w\cdot x+b}}{1+e^{w\cdot x+b}}
P(Y=1∣x)=1+ew⋅x+bew⋅x+b
P
(
Y
=
0
∣
x
)
=
1
1
+
e
w
⋅
x
+
b
P(Y=0|x)=\frac{1}{1+e^{w\cdot x+b}}
P(Y=0∣x)=1+ew⋅x+b1
这里,
x
∈
R
n
x\in R^n
x∈Rn是输入,
Y
∈
0
,
1
Y\in {0,1}
Y∈0,1是输出,
w
∈
R
n
w\in R^n
w∈Rn和
b
∈
R
b\in R
b∈R是参数,w称为权重向量,b称为偏 置,
w
⋅
x
w\cdot x
w⋅x为w和x的内积。
有时为了方便,把b扩充到w中,x用对应b的1扩充,即
w
=
(
w
(
1
)
,
w
(
2
)
,
.
.
.
,
w
(
n
)
,
b
)
T
w=(w^{(1)},w^{(2)},...,w^{(n)},b)^T
w=(w(1),w(2),...,w(n),b)T,
x
=
(
x
(
1
)
,
x
(
2
)
,
.
.
.
,
x
(
n
)
,
1
)
T
x=(x^{(1)},x^{(2)},...,x^{(n)},1)^T
x=(x(1),x(2),...,x(n),1)T。这时的逻辑斯蒂回归模型为:
P
(
Y
=
1
∣
x
)
=
e
w
⋅
x
1
+
e
w
⋅
x
P(Y=1|x)=\frac{e^{w\cdot x}}{1+e^{w\cdot x}}
P(Y=1∣x)=1+ew⋅xew⋅x
P
(
Y
=
0
∣
x
)
=
1
1
+
e
w
⋅
x
P(Y=0|x)=\frac{1}{1+e^{w\cdot x}}
P(Y=0∣x)=1+ew⋅x1
逻辑斯蒂回归模型的特点:
一个事件的几率是指该事件发生的概率与该事件不发生的概率的比值。如果事件发生的概率是p,那么该事件发生的几率是
p
1
−
p
\frac{p}{1-p}
1−pp,该事件的对数几率是
l
o
g
i
t
(
p
)
=
l
o
g
p
1
−
p
logit(p)=log\frac{p}{1-p}
logit(p)=log1−pp。
对逻辑斯蒂回归而言,就是
l
o
g
P
(
Y
=
1
∣
X
)
1
−
P
(
Y
=
1
∣
X
)
=
w
⋅
x
log\frac{P(Y=1|X)}{1-P(Y=1|X)}=w\cdot x
log1−P(Y=1∣X)P(Y=1∣X)=w⋅x。这也展示了在逻辑斯蒂回归模型中,输出Y=1的对数几率是输入x的线性函数,或者说,输出Y=1的对数几率是由输入x的线性函数表示的模型,即逻辑斯蒂回归模型。
以逻辑斯蒂回归模型的参数估计,是对目标函数为对数似然函数使用梯度下降,拟牛顿法等求解。
逻辑斯蒂回归模型的似然函数为:
∏
i
=
1
N
[
π
(
x
i
)
]
y
i
[
1
−
π
(
x
i
)
]
1
−
y
i
\prod_{i=1}^N[\pi(x_i)]^{y_i}[1-\pi(x_i)]^{1-y_i}
i=1∏N[π(xi)]yi[1−π(xi)]1−yi
对数似然函数为:
L
(
w
)
=
∑
i
=
1
N
[
y
i
l
o
g
π
(
x
i
)
+
(
1
−
y
i
)
l
o
g
(
1
−
π
(
x
i
)
)
]
L(w)=\sum_{i=1}^N[y_i log\pi(x_i)+(1-y_i)log(1-\pi(x_i))]
L(w)=i=1∑N[yilogπ(xi)+(1−yi)log(1−π(xi))]
L
(
w
)
=
∑
i
=
1
N
[
y
i
l
o
g
π
(
x
i
)
1
−
π
(
x
i
)
+
l
o
g
(
1
−
π
(
x
i
)
)
]
L(w)=\sum_{i=1}^N\left[y_ilog\frac{\pi(x_i)}{1-\pi(x_i)}+log(1-\pi(x_i))\right]
L(w)=i=1∑N[yilog1−π(xi)π(xi)+log(1−π(xi))]
L
(
w
)
=
∑
i
=
1
N
[
y
i
(
w
⋅
x
i
)
−
l
o
g
(
1
+
e
w
⋅
x
i
)
]
L(w)=\sum_{i=1}^N[y_i(w\cdot x_i)-log(1+e^{w\cdot x_i})]
L(w)=i=1∑N[yi(w⋅xi)−log(1+ew⋅xi)] 其中
P
(
Y
=
1
∣
x
)
=
π
(
x
)
,
P
(
Y
=
0
∣
x
)
=
1
−
π
(
x
)
P(Y=1|x)=\pi (x), P(Y=0|x)=1-\pi(x)
P(Y=1∣x)=π(x),P(Y=0∣x)=1−π(x)
对
L
(
w
)
L(w)
L(w)求极大值,得到
w
w
w的估计值。
以似然函数为目标函数最优化问题通常采用迭代法求解。这时的目标函数是凸函数,具有很好的性质。
假设w的极大似然估计值是
w
^
\hat{w}
w^,那么学习到的逻辑斯蒂回归模型为:
P
(
Y
=
1
∣
x
)
=
e
w
^
⋅
x
1
+
e
w
^
⋅
x
P(Y=1|x)=\frac{e^{\hat{w}\cdot x}}{1+e^{\hat{w}\cdot x}}
P(Y=1∣x)=1+ew^⋅xew^⋅x
P
(
Y
=
0
∣
x
)
=
1
1
+
e
w
^
⋅
x
P(Y=0|x)=\frac{1}{1+e^{\hat{w}\cdot x}}
P(Y=0∣x)=1+ew^⋅x1
3.多项逻辑斯蒂回归模型
将二项逻辑斯蒂回归推广为多项逻辑斯蒂回归模型,用于多分类。假设离散型随机变量Y的取值集合是{1,2,3,…,K},那么多项逻辑斯蒂回归模型是:
P
(
Y
=
k
∣
x
)
=
e
w
k
⋅
x
1
+
∑
k
=
1
K
−
1
e
w
k
⋅
x
,
k
=
1
,
2
,
.
.
.
,
K
−
1
P(Y=k|x)=\frac{e^{w_k\cdot x}}{1+\sum_{k=1}^{K-1}e^{w_k\cdot x}},k=1,2,...,K-1
P(Y=k∣x)=1+∑k=1K−1ewk⋅xewk⋅x,k=1,2,...,K−1
P
(
Y
=
K
∣
x
)
=
1
1
+
∑
k
=
1
K
−
1
e
w
k
⋅
x
P(Y=K|x)=\frac{1}{1+\sum_{k=1}^{K-1}e^{w_k\cdot x}}
P(Y=K∣x)=1+∑k=1K−1ewk⋅x1这里,
x
∈
R
n
+
1
,
w
k
∈
R
n
+
1
x\in R^{n+1},w_k\in R^{n+1}
x∈Rn+1,wk∈Rn+1。
基于极大似然法估计w,似然函数具有很好的性质,因为它是光滑的凸函数,多种优化算法都能找到全局最优。优化求解参数方法有:迭代尺度法,梯度下降法,牛顿法或拟牛顿法(BFGS或者DFP)。(note:迭代尺度和BFGS在统计学习方法中第六章中讲述)。下面只介绍梯度下降法。
4.梯度下降法
令
J
(
w
)
=
−
1
N
L
(
w
)
J(w)=-\frac{1}{N}L(w)
J(w)=−N1L(w),
∂
J
(
w
)
∂
w
=
−
1
N
∑
i
=
1
N
(
y
i
⋅
x
i
−
1
1
+
e
w
x
i
e
w
x
i
⋅
x
i
)
\frac{\partial J(w)}{\partial w}=-\frac{1}{N}\sum_{i=1}^N {(y_i \cdot x_i-\frac{1}{1+e^{wx_i}}e^{wx_i}\cdot x_i)}
∂w∂J(w)=−N1i=1∑N(yi⋅xi−1+ewxi1ewxi⋅xi)
∂
J
(
w
)
∂
w
=
−
1
N
∑
i
=
1
N
x
i
(
y
i
−
π
(
x
i
)
)
\frac{\partial J(w)}{\partial w}=-\frac{1}{N}\sum_{i=1}^Nx_i(y_i-\pi (x_i))
∂w∂J(w)=−N1i=1∑Nxi(yi−π(xi))
∂
J
(
w
)
∂
w
=
1
N
∑
i
=
1
N
x
i
(
π
(
x
i
)
−
y
i
)
\frac{\partial J(w)}{\partial w}=\frac{1}{N}\sum_{i=1}^Nx_i(\pi(x_i)-y_i)
∂w∂J(w)=N1i=1∑Nxi(π(xi)−yi)
进而
w
j
=
w
j
−
α
1
N
∑
i
=
1
N
x
i
[
p
i
(
x
i
)
−
y
i
]
w_j=w_j-\alpha \frac{1}{N}\sum_{i=1}^Nx_i[pi(x_i)-y_i]
wj=wj−αN1i=1∑Nxi[pi(xi)−yi].
sklearn.linear_model.LogisticRegression参数详解
官方文档
sklearn.linear_model.LogisticRegression(penalty=’l2’, dual=False, tol=0.0001, C=1.0, fit_intercept=True, intercept_scaling=1, class_weight=None, random_state=None, solver=’warn’, max_iter=100, multi_class=’warn’, verbose=0, warm_start=False, n_jobs=None)[source]
参数 | 解释 | 数值类型(默认值) | 选项 |
---|---|---|---|
penalty | 惩罚项,用于指定惩罚中使用的范式 | str,默认l2 | l1/l2 |
dual | 用于指定使用对偶形式还是原形式;对偶形式只有在liblinear solver使用l2范式时设定;当样本数>特征数时,通常dual=False | bool,默认False | True/False |
tol | 停止标准的容忍度 | float,默认1e-4 | |
C | 正则化强度的倒数;必须是一个正浮点数; | float(1.0) | |
fit_intercept | 指定是否应该在决策函数中添加一个常数(也称为偏差或截距) | bool(True) | True/False |
intercept_scaling | 只有当’liblinear’被用,并且self.fit_intercept也设置为True时,该参数有效 | float(1) | |
class_weight | 与类别标签相关的权重,如果没有给出,所有类的权重都为1;'balanced’根据y的值自动调节与类频率成反比的权重 | 默认(None) | dict/balanced |
random_state | 对数据洗牌的时候伪随机数生成器的种子; | 可选参数,default(None) | int/Random State instance/None |
solver | 指定用于优化问题的算法 ;[取值说明待定] | str(‘liblinear’) | newton-cg/lbfgs/liblinear/sag/saga |
max_iter | 仅当newton-cg/sag/lbfgs使用的时候有效;最大的迭代次数 | int(100) | |
multi_class | 分类方式的选择 | str(ovr) | ovr/multinomial/auto |
verbose | solver是liblinear或者lbfgs时,设置此参数为任意的正数来应对冗长问题 | int(0) | |
warm_start | 当设置为True时,重复使用上次的解决方案以适应初始化,否则只需要擦除上次的解决方案;除非是solver是‘liblinear’ | bool(False) | True/False |
n_jobs | 可选参数,当multi_class=‘ovr’,并行化处理时使用的CPU核数 | default(None) | int/None |
属性:
属性 | 解释 |
---|---|
coef_ | array,shape(1,n_features)/(n_classes,n_features) ,输入模型的系数(权重) |
intercept_ | array,shape(1,)/(n_classes,) 截距 |
n_iter_ | array,shape(n_classes,)/(1,) ,所有类的实际迭代次数。如果二进制或多项式,它只返回1个元素。对于liblinear求解器,只给出了所有类中迭代的最大数量。 |
适用场景
多分类算法的基础组件,输出值映射到了0,1之间,具有概率意义。
CAML机器学习系列1:深入浅出ML之Regression家族
sklearn逻辑回归文档
《机器学习西瓜书》学习笔记——第三章_线性模型:对数几率回归(逻辑回归)
机器学习算法-逻辑回归
知乎问答机器学习算法应用场景