逻辑回归算法梳理

逻辑回归与线性回归的联系与区别

  • 逻辑回归是一个非线性模型,sigmoid函数又称逻辑回归函数。
  • 线性回归要求变量服从正态分布,logistic回归对变量分布没有要求。线性回归要求因变量是连续性数值变量,logistic回归要求因变量是分类型变量。线性回归要求自变量和因变量呈线性关系,而logistic回归不要求自变量和因变量呈线性关系。
  • 线性回归中使用的是最小化平方误差损失函数,对偏离真实值越远的数据惩罚越严重;逻辑回归使用对数似然函数进行参数估计,使用交叉熵作为损失函数,对预测错误的惩罚是随着输出的增大,逐渐逼近一个常数
  • 逻辑回归以及线性回归同属于广义线性模型(generalized linear model),不同的就是因变量不同,如果是连续的,就是多重线性回归,如果是二项分布,就是logistic回归。logistic回归的因变量可以使二分类的,也可是多分类的。

逻辑回归的原理

将Sigmoid函数作为联系函数,sigmoid函数表示为:
σ(z)=11+ez\sigma(z)=\frac{1}{1+e^{-z}}
逻辑回归算法梳理
sigmoid函数可以轻松处理0/1分类问题。根据sigmoid可以获取逻辑回归的预测函数:
hθ(x)=σ(θTx)=11+eθTxh_\theta(x)=\sigma(\theta^Tx)=\frac{1}{1+e^{-\theta^Tx}}
h(x)h(x)的值表示预测结果为1的概率,对于0/1分类问题即表示为:
P(y=1x;θ)=hθ(x)P(y=0x;θ)=1hθ(x)P(y=1|x;\theta) = h_\theta(x) \\ P(y=0|x;\theta) = 1 - h_\theta(x)
损失函数构造为:
J(θ)=1m[i=1my(i)loghθ(x(i))+(1y(i))log(1hθ(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)}))]
逻辑回归应用于垃圾邮件分类、肿瘤诊断、金融欺诈等分类判断。

逻辑回归损失函数推导及优化

以0/1分类问题为例,模型概率表示为:
P(y=1x;θ)=hθ(x)P(y=0x;θ)=1hθ(x)P(y=1|x;\theta) = h_\theta(x) \\ P(y=0|x;\theta) = 1 - h_\theta(x)
进一步将上述两个式子整合,则可以表示为:
P(y(i)x(i);θ)=hθ(x(i))y(i)(1hθ(x(i)))(1y(i))P(y^{(i)}|x^{(i);\theta}) = h_\theta(x^{(i)})^{y^{(i)}}(1 - h_\theta(x^{(i)}))^{(1 - {y^{(i)}})}
把模型最优问题看作是极大似然估计问题:
L(θ)=i=1mP(y(i)x(i);θ)=i=1mhθ(x(i))y(i)(1hθ(x(i)))(1y(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)}})}
采用log去对数似然:
logL(θ)=i=1my(i)hθ(x(i))+(1y(i))(1hθ(x(i)))logL(\theta) =\sum _{i = 1} ^{m}y^{(i)} h_\theta(x^{(i)}) + (1 - {y^{(i)}})(1 - h_\theta(x^{(i)}))
乘以一个系数1m-\frac{1}{m},得到J(θ)J(\theta).

梯度下降方法求J(θ)J(\theta)的最小值

θj:=θjαθjJ(θ)(j=0,n)\theta_j:=\theta_j-\alpha \frac{\partial}{\partial\theta_j}J(\theta) (j = 0,…n)
式中α\alpha为学习步长,对于sigmoid函数σ(z)=11+ez\sigma(z)=\frac{1}{1+e^{-z}},其导数为σ(z)=σ(z)(1σ(z))\sigma'(z)=\sigma(z)(1-\sigma(z)),现在求J(θ)/θ\partial J(\theta)/\partial \theta:
θjJ(θ)=1mi=1m[y(i)1hθ(x(i))θjhθ(x(i))(1y(i))11hθ(x(i))θjhθ(x(i))]=1mi=1m[y(i)1σ(θTx(i))(1y(i))11σ(θTx(i))]σ(θTx(i))(1σ(θTx(i)))θjθTx(i)=1mi=1m[y(i)(1σ(θTx(i)))(1y(i))σ(θTx(i))]xj(i)=1mi=1m(y(i)σ(θTx(i)))xj(i)=1mi=1m(hθ(x(i))y(i))xj(i)=1mi=1m(hθ(x(i))y(i))xj(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)}
因此,最终的θ\theta更新过程表示为:
θj:=θjαi=1m(hθ(x(i))y(i))xj(i),(j=0n)\theta_j:=\theta_j - \alpha\sum _{i=1}^{m}(h_\theta(x^{(i)})-y^{(i)})x_j^{(i)},(j = 0…n)

正则化与模型评估指标

正则化方式

L1正则化在原来的损失函数基础上加上权重参数的绝对值的和
L=Ein+λjwjL=E_{in} + \lambda\sum _{j}|w_j|

L2正则化在原来的损失函数基础上加上权重参数的平方和
L=Ein+λjwj2L=E_{in} + \lambda\sum _{j}w_j^2

评估指标

均方误差(RMSE):RMSE=1ni=1n(y(i)y^(i))2RMSE =\sqrt{\frac{1}{n}\sum _{i=1}^{n}(y^{(i)}-\hat{y}^{(i)})^2}
最大绝对误差(MAE)MAE=maxy(i)y^(i)MAE=max|y^{(i)}-\hat{y}^{(i)}|
平均绝对误差(AAE)AAE=i=1ny(i)y^(i))nAAE=\frac{\sum _{i=1}^{n}|y^{(i)}-\hat{y}^{(i)})|}{n}
R-Square R2=1(y(i)y^(i))2(y(i)yˉ(i))2R^2=1-\frac{\sum(y^{(i)}-\hat{y}^{(i)})^2}{\sum(y^{(i)}-\bar{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:惩罚参数 L1L1或者L2L2选项,默认为L2L2
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内核运行程序。