逻辑回归与线性回归的联系与区别
- 逻辑回归是一个非线性模型,sigmoid函数又称逻辑回归函数。
- 线性回归要求变量服从正态分布,logistic回归对变量分布没有要求。线性回归要求因变量是连续性数值变量,logistic回归要求因变量是分类型变量。线性回归要求自变量和因变量呈线性关系,而logistic回归不要求自变量和因变量呈线性关系。
- 线性回归中使用的是最小化平方误差损失函数,对偏离真实值越远的数据惩罚越严重;逻辑回归使用对数似然函数进行参数估计,使用交叉熵作为损失函数,对预测错误的惩罚是随着输出的增大,逐渐逼近一个常数
- 逻辑回归以及线性回归同属于广义线性模型(generalized linear model),不同的就是因变量不同,如果是连续的,就是多重线性回归,如果是二项分布,就是logistic回归。logistic回归的因变量可以使二分类的,也可是多分类的。
逻辑回归的原理
将Sigmoid函数作为联系函数,sigmoid函数表示为:
σ
(
z
)
=
1
1
+
e
−
z
\sigma(z)=\frac{1}{1+e^{-z}}
σ(z)=1+e−z1
sigmoid函数可以轻松处理0/1分类问题。根据sigmoid可以获取逻辑回归的预测函数:
h
θ
(
x
)
=
σ
(
θ
T
x
)
=
1
1
+
e
−
θ
T
x
h_\theta(x)=\sigma(\theta^Tx)=\frac{1}{1+e^{-\theta^Tx}}
hθ(x)=σ(θTx)=1+e−θTx1
h
(
x
)
h(x)
h(x)的值表示预测结果为1的概率,对于0/1分类问题即表示为:
P
(
y
=
1
∣
x
;
θ
)
=
h
θ
(
x
)
P
(
y
=
0
∣
x
;
θ
)
=
1
−
h
θ
(
x
)
P(y=1|x;\theta) = h_\theta(x) \\ P(y=0|x;\theta) = 1 - h_\theta(x)
P(y=1∣x;θ)=hθ(x)P(y=0∣x;θ)=1−hθ(x)
损失函数构造为:
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(\theta) =-\frac{1}{m}[\sum _{i=1} ^{m}y^(i)logh_{\theta}(x^{(i)})+(1-y^{(i)})log(1-h_{\theta}(x^{(i)}))]
J(θ)=−m1[i=1∑my(i)loghθ(x(i))+(1−y(i))log(1−hθ(x(i)))]
逻辑回归应用于垃圾邮件分类、肿瘤诊断、金融欺诈等分类判断。
逻辑回归损失函数推导及优化
以0/1分类问题为例,模型概率表示为:
P
(
y
=
1
∣
x
;
θ
)
=
h
θ
(
x
)
P
(
y
=
0
∣
x
;
θ
)
=
1
−
h
θ
(
x
)
P(y=1|x;\theta) = h_\theta(x) \\ P(y=0|x;\theta) = 1 - h_\theta(x)
P(y=1∣x;θ)=hθ(x)P(y=0∣x;θ)=1−hθ(x)
进一步将上述两个式子整合,则可以表示为:
P
(
y
(
i
)
∣
x
(
i
)
;
θ
)
=
h
θ
(
x
(
i
)
)
y
(
i
)
(
1
−
h
θ
(
x
(
i
)
)
)
(
1
−
y
(
i
)
)
P(y^{(i)}|x^{(i);\theta}) = h_\theta(x^{(i)})^{y^{(i)}}(1 - h_\theta(x^{(i)}))^{(1 - {y^{(i)}})}
P(y(i)∣x(i);θ)=hθ(x(i))y(i)(1−hθ(x(i)))(1−y(i))
把模型最优问题看作是极大似然估计问题:
L
(
θ
)
=
∏
i
=
1
m
P
(
y
(
i
)
∣
x
(
i
)
;
θ
)
=
∏
i
=
1
m
h
θ
(
x
(
i
)
)
y
(
i
)
(
1
−
h
θ
(
x
(
i
)
)
)
(
1
−
y
(
i
)
)
L(\theta) = \prod _{i = 1} ^{m}P(y^{(i)}|x^{(i);\theta}) =\prod _{i = 1} ^{m} h_\theta(x^{(i)})^{y^{(i)}}(1 - h_\theta(x^{(i)}))^{(1 - {y^{(i)}})}
L(θ)=i=1∏mP(y(i)∣x(i);θ)=i=1∏mhθ(x(i))y(i)(1−hθ(x(i)))(1−y(i))
采用log去对数似然:
l
o
g
L
(
θ
)
=
∑
i
=
1
m
y
(
i
)
h
θ
(
x
(
i
)
)
+
(
1
−
y
(
i
)
)
(
1
−
h
θ
(
x
(
i
)
)
)
logL(\theta) =\sum _{i = 1} ^{m}y^{(i)} h_\theta(x^{(i)}) + (1 - {y^{(i)}})(1 - h_\theta(x^{(i)}))
logL(θ)=i=1∑my(i)hθ(x(i))+(1−y(i))(1−hθ(x(i)))
乘以一个系数
−
1
m
-\frac{1}{m}
−m1,得到
J
(
θ
)
J(\theta)
J(θ).
梯度下降方法求 J ( θ ) J(\theta) J(θ)的最小值
θ
j
:
=
θ
j
−
α
∂
∂
θ
j
J
(
θ
)
(
j
=
0
,
…
n
)
\theta_j:=\theta_j-\alpha \frac{\partial}{\partial\theta_j}J(\theta) (j = 0,…n)
θj:=θj−α∂θj∂J(θ)(j=0,…n)
式中
α
\alpha
α为学习步长,对于sigmoid函数
σ
(
z
)
=
1
1
+
e
−
z
\sigma(z)=\frac{1}{1+e^{-z}}
σ(z)=1+e−z1,其导数为
σ
′
(
z
)
=
σ
(
z
)
(
1
−
σ
(
z
)
)
\sigma'(z)=\sigma(z)(1-\sigma(z))
σ′(z)=σ(z)(1−σ(z)),现在求
∂
J
(
θ
)
/
∂
θ
\partial J(\theta)/\partial \theta
∂J(θ)/∂θ:
∂
∂
θ
j
J
(
θ
)
=
−
1
m
∑
i
=
1
m
[
y
(
i
)
1
h
θ
(
x
(
i
)
)
∂
∂
θ
j
h
θ
(
x
(
i
)
)
−
(
1
−
y
(
i
)
)
1
1
−
h
θ
(
x
(
i
)
)
∂
∂
θ
j
h
θ
(
x
(
i
)
)
]
=
−
1
m
∑
i
=
1
m
[
y
(
i
)
1
σ
(
θ
T
x
(
i
)
)
−
(
1
−
y
(
i
)
)
1
1
−
σ
(
θ
T
x
(
i
)
)
]
σ
(
θ
T
x
(
i
)
)
(
1
−
σ
(
θ
T
x
(
i
)
)
)
∂
∂
θ
j
θ
T
x
(
i
)
=
−
1
m
∑
i
=
1
m
[
y
(
i
)
(
1
−
σ
(
θ
T
x
(
i
)
)
)
−
(
1
−
y
(
i
)
)
σ
(
θ
T
x
(
i
)
)
]
x
j
(
i
)
=
−
1
m
∑
i
=
1
m
(
y
(
i
)
−
σ
(
θ
T
x
(
i
)
)
)
x
j
(
i
)
=
−
1
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
x
j
(
i
)
=
1
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
x
j
(
i
)
\frac{\partial}{\partial\theta_j}J(\theta) = -\frac{1}{m}\sum _{i=1}^{m}[y^{(i)}\frac{1}{h_\theta(x^{(i)})}\frac{\partial}{\partial\theta_j}h_\theta(x^{(i)})-(1-y^{(i)})\frac{1}{1-h_\theta(x^{(i)})}\frac{\partial}{\partial\theta_j}h_\theta(x^{(i)})]\\ \qquad\qquad\quad =- \frac{1}{m}\sum _{i=1}^{m}[y^{(i)}\frac{1}{\sigma(\theta^Tx^{(i)})}-(1-y^{(i)})\frac{1}{1-\sigma(\theta^Tx^{(i)})}]\sigma(\theta^Tx^{(i)})(1 - \sigma(\theta^Tx^{(i)}))\frac{\partial}{\partial \theta_j}\theta^Tx^{(i)}\\ = -\frac{1}{m}\sum _{i=1}^{m}[y^{(i)}(1-\sigma(\theta^Tx^{(i)}))-(1-y^{(i)})\sigma(\theta^Tx^{(i)})]x_j^{(i)}\\ = -\frac{1}{m}\sum _{i=1}^{m}(y^{(i)} - \sigma(\theta^Tx^{(i)}) )x_j^{(i)}\\ =-\frac{1}{m}\sum _{i=1}^{m}(h_\theta(x^{(i)})-y^{(i)})x_j^{(i)}\\ =\frac{1}{m}\sum _{i=1}^{m}(h_\theta(x^{(i)})-y^{(i)})x_j^{(i)}
∂θj∂J(θ)=−m1i=1∑m[y(i)hθ(x(i))1∂θj∂hθ(x(i))−(1−y(i))1−hθ(x(i))1∂θj∂hθ(x(i))]=−m1i=1∑m[y(i)σ(θTx(i))1−(1−y(i))1−σ(θTx(i))1]σ(θTx(i))(1−σ(θTx(i)))∂θj∂θTx(i)=−m1i=1∑m[y(i)(1−σ(θTx(i)))−(1−y(i))σ(θTx(i))]xj(i)=−m1i=1∑m(y(i)−σ(θTx(i)))xj(i)=−m1i=1∑m(hθ(x(i))−y(i))xj(i)=m1i=1∑m(hθ(x(i))−y(i))xj(i)
因此,最终的
θ
\theta
θ更新过程表示为:
θ
j
:
=
θ
j
−
α
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
x
j
(
i
)
,
(
j
=
0
…
n
)
\theta_j:=\theta_j - \alpha\sum _{i=1}^{m}(h_\theta(x^{(i)})-y^{(i)})x_j^{(i)},(j = 0…n)
θj:=θj−αi=1∑m(hθ(x(i))−y(i))xj(i),(j=0…n)
正则化与模型评估指标
正则化方式
L1正则化在原来的损失函数基础上加上权重参数的绝对值的和
L
=
E
i
n
+
λ
∑
j
∣
w
j
∣
L=E_{in} + \lambda\sum _{j}|w_j|
L=Ein+λj∑∣wj∣
L2正则化在原来的损失函数基础上加上权重参数的平方和
L
=
E
i
n
+
λ
∑
j
w
j
2
L=E_{in} + \lambda\sum _{j}w_j^2
L=Ein+λj∑wj2
评估指标
均方误差(RMSE):
R
M
S
E
=
1
n
∑
i
=
1
n
(
y
(
i
)
−
y
^
(
i
)
)
2
RMSE =\sqrt{\frac{1}{n}\sum _{i=1}^{n}(y^{(i)}-\hat{y}^{(i)})^2}
RMSE=n1∑i=1n(y(i)−y^(i))2
最大绝对误差(MAE)
M
A
E
=
m
a
x
∣
y
(
i
)
−
y
^
(
i
)
∣
MAE=max|y^{(i)}-\hat{y}^{(i)}|
MAE=max∣y(i)−y^(i)∣
平均绝对误差(AAE)
A
A
E
=
∑
i
=
1
n
∣
y
(
i
)
−
y
^
(
i
)
)
∣
n
AAE=\frac{\sum _{i=1}^{n}|y^{(i)}-\hat{y}^{(i)})|}{n}
AAE=n∑i=1n∣y(i)−y^(i))∣
R-Square
R
2
=
1
−
∑
(
y
(
i
)
−
y
^
(
i
)
)
2
∑
(
y
(
i
)
−
y
ˉ
(
i
)
)
2
R^2=1-\frac{\sum(y^{(i)}-\hat{y}^{(i)})^2}{\sum(y^{(i)}-\bar{y}^{(i)})^2}
R2=1−∑(y(i)−yˉ(i))2∑(y(i)−y^(i))2
逻辑回归的优缺点
逻辑回归(LR)优点:
1-概率的形式输出结果,不只是0和1的判定
2-可解释强,可控性高
3- 训练快
4- 结果是概率,可以做ranking model
5- 添加feature简单,应用场景多,CTR预估,推荐系统的Learning to rank,电商搜索排序基线等
缺点:1)容易欠拟合,分类精度不高。2)数据特征有缺失或者特征空间很大时表现效果并不好。
样本不均衡问题解决办法
1-样本充足的情况下可以做下采样——抽样,样本不足的情况下做上采样——对样本少的做重复;
2- 修改损失函数,给不同权重。比如负样本少,就可以给负样本大一点的权重;
3- 采样后的predict结果,用作判定请还原。
逻辑回归Sklearn
参数详见:
https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html#sklearn.linear_model.LogisticRegression.decision_function 逻辑回归
penalty:惩罚参数
L
1
L1
L1或者
L
2
L2
L2选项,默认为
L
2
L2
L2。
dual:对偶或者原始方法,默认是False,对偶方法用于求解线性多核的L2惩罚项上
tol:停止求解的标准,默认1e-4。
c:正则化系数
λ
\lambda
λ的倒数,默认1.0,数值越小表示正则化系数越大
fit_intercept:是否存在截距偏差,默认为True
intercept_scaling:正则化项为“liblinear”并且“fit_incept”为True时有用,默认为1
class_weight:用于表示分类模型中各类型的权重,可以是字典类型或者“balance”字符串,默认为不输入
random_state:随机种子数,int类型,正则化优化算法为sag以及liblinear时有用。
solver:优化算法选择参数,只有五个可选参数newton-cg,lbfgs,liblinear,sag,saga,默认是liblinear。
1)liblinear --小规模数据集,sag和saga适用于大数据集
2) 多分类问题,newton-cg,sag,saga和lbfgs能处理多项损失
3) newton-cg,sag和lbfgs三种优化算法需要损失函数的一阶或者二阶连续导数,因此不能用于L1正则化,只能用于L2正则化
max_iter:算法收敛最大迭代次数,默认是10,在正则化算法为newton-cg,sag和lbfgs有用
multi_class:分类方式选择参数,可选参数为ovr(One-vs-rest)和multinomial(many-vs-many,MvM),默认为ovr。
verbose:日志冗余长度,int类型默认为0,1是偶尔输出结果,大于1,对每个子模型都有输出。
warm_start:热启动参数,默认为False,如果是True,下一次重新使用上一次调用作为初始化
n_jobs:并行数目,默认为1,1-用CPU一个内核运行,2-用CPU两个内个运行程序,-1-用所有CPU内核运行程序。