逻辑回归与线性回归的联系与区别
- 逻辑回归是一个非线性模型,sigmoid函数又称逻辑回归函数。
- 线性回归要求变量服从正态分布,logistic回归对变量分布没有要求。线性回归要求因变量是连续性数值变量,logistic回归要求因变量是分类型变量。线性回归要求自变量和因变量呈线性关系,而logistic回归不要求自变量和因变量呈线性关系。
- 线性回归中使用的是最小化平方误差损失函数,对偏离真实值越远的数据惩罚越严重;逻辑回归使用对数似然函数进行参数估计,使用交叉熵作为损失函数,对预测错误的惩罚是随着输出的增大,逐渐逼近一个常数
- 逻辑回归以及线性回归同属于广义线性模型(generalized linear model),不同的就是因变量不同,如果是连续的,就是多重线性回归,如果是二项分布,就是logistic回归。logistic回归的因变量可以使二分类的,也可是多分类的。
逻辑回归的原理
将Sigmoid函数作为联系函数,sigmoid函数表示为:
σ(z)=1+e−z1
sigmoid函数可以轻松处理0/1分类问题。根据sigmoid可以获取逻辑回归的预测函数:
hθ(x)=σ(θTx)=1+e−θTx1
h(x)的值表示预测结果为1的概率,对于0/1分类问题即表示为:
P(y=1∣x;θ)=hθ(x)P(y=0∣x;θ)=1−hθ(x)
损失函数构造为:
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(i)∣x(i);θ)=hθ(x(i))y(i)(1−hθ(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去对数似然:
logL(θ)=i=1∑my(i)hθ(x(i))+(1−y(i))(1−hθ(x(i)))
乘以一个系数−m1,得到J(θ).
梯度下降方法求J(θ)的最小值
θj:=θj−α∂θj∂J(θ)(j=0,…n)
式中α为学习步长,对于sigmoid函数σ(z)=1+e−z1,其导数为σ′(z)=σ(z)(1−σ(z)),现在求∂J(θ)/∂θ:
∂θ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)
因此,最终的θ更新过程表示为:
θj:=θj−αi=1∑m(hθ(x(i))−y(i))xj(i),(j=0…n)
正则化与模型评估指标
正则化方式
L1正则化在原来的损失函数基础上加上权重参数的绝对值的和
L=Ein+λj∑∣wj∣
L2正则化在原来的损失函数基础上加上权重参数的平方和
L=Ein+λj∑wj2
评估指标
均方误差(RMSE):RMSE=n1∑i=1n(y(i)−y^(i))2
最大绝对误差(MAE)MAE=max∣y(i)−y^(i)∣
平均绝对误差(AAE)AAE=n∑i=1n∣y(i)−y^(i))∣
R-Square 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:惩罚参数 L1或者L2选项,默认为L2。
dual:对偶或者原始方法,默认是False,对偶方法用于求解线性多核的L2惩罚项上
tol:停止求解的标准,默认1e-4。
c:正则化系数λ的倒数,默认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内核运行程序。