逻辑回归算法梳理2
- 逻辑回归与线性回归的联系和区别
——线性回归要求变量服从正态分布,logistic回归对变量分布没有要求;
——线性回归要求因变量是连续性数值变量,而logistic回归要求因变量是分类型变量;
——线性回归要求自变量和因变量呈线性关系,而logistic回归不要求自变量和因变量呈线性关系;
——logistic回归是分析因变量取某个值的概率与自变量的关系,而线性回归是直接分析因变量与自变量的关系
logistic回归与线性回归都属于广义线性模型(generalized linear model),不同的就是因变量不同,如果是连续的,就是多重线性回归,如果是二项分布,就是logistic回归。logistic回归的因变量可以是二分类的,也可以是多分类的,但是二分类的更为常用,也更加容易解释。所以实际中最为常用的就是二分类的logistic回归。
- 逻辑回归的原理
逻辑回归是利用回归类似的方法来解决分类问题。假设有一个二分类问题,输出y{0,1},而线性模型(下文将展示这个模型)的的预测值z是实数值,我们希望找到一个阶跃函数将实数z映射为{0,1},这样我们就能很好的处理分类问题了。用对数几率函数sigmoid函数:
- 逻辑回归损失函数推导及优化
优化:梯度下降;向量化
- 正则化与模型评估指标
正则化:过拟合的解决方法:减少模型复杂度(正则化)、增加训练集个数。
正则化以最小化损失和复杂度为目标(结构风险最小化),对逻辑回归来说可以在目标函数(经验风险)中加上一个λ*正则化项(L1或L2范数)。
模型评估指标:
错误率:分类错误的样本数/样本总数
精度:分类正确的样本数/样本总数
查准率/准确率(precision):P = TP/(TP+FP),即正确预测的正例数 /预测正例总数
查全率/召回率(recall):R = TP/(TP+FN),即正确预测的正例数 /实际正例总数
F1:F1=2PR/(P+R),即查准率和查全率的调和平均
ROC曲线:纵轴是“真正例率”(TPR = TP/(TP+FN)),横轴是“假正例率”(FPR = FP/(TN+FP))
AUC:可通过对ROC曲线下各部分面积求和而得,考虑样本预测的排序质量
- 逻辑回归的优缺点
优点:1)适合需要得到一个分类概率的场景。2)计算代价不高,容易理解实现。LR在时间和内存需求上相当高效。它可以应用于分布式数据,并且还有在线算法实现,用较少的资源处理大型数据。3)LR对于数据中小噪声的鲁棒性很好,并且不会受到轻微的多重共线性的特别影响。(严重的多重共线性则可以使用逻辑回归结合L2正则化来解决,但是若要得到一个简约模型,L2正则化并不是最好的选择,因为它建立的模型涵盖了全部的特征。)
缺点:1)容易欠拟合,分类精度不高。2)数据特征有缺失或者特征空间很大时表现效果并不好。
- 样本不均衡问题解决办法
欠采样(undersampling):去除一些反例使得正、反例数目接近。不能随机丢弃反例,比如可以通过EasyEnsemble算法,利用集成学习机制将反例划分为若干个集合供不同学习器使用,这样看来对每个学习器都进行了欠采样,但是在全局看来却不会丢失重要信息。
过采样(oversampling):增加一些正例使得正、反例数目接近。不能简单对正例样本进行重复采样,可以通过SMOTE算法对训练集的正例进行插值来产生额外的正值
阈值移动(threshold-moving):直接基于原始训练集进行学习,但在用训练好的分类器进行预测时,基于样本中正反例比例对预测值进行调整。
- Sklearn参数
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=’liblinear’, max_iter=100, multi_class=’ovr’,verbose=0, warm_start=False, n_jobs=1)
penalty:’l1’ or ‘l2’ ,默认’l2’ #惩罚
dual:bool 默认False ‘双配方仅用于利用liblinear解算器的l2惩罚。’
tol: float, 默认: 1e-4 ‘公差停止标准’
C:float 默认:1.0 正则化强度, 与支持向量机一样,较小的值指定更强的正则化。
fit_intercept: bool 默认:True 指定是否应将常量(a.k.a. bias或intercept)添加到决策函数中。
intercept_scaling:float ,默认:1 仅在使用求解器“liblinear”且self.fit_intercept设置为True时有用。 在这种情况下,x变为[x,self.intercept_scaling],即具有等于intercept_scaling的常数值的“合成”特征被附加到实例矢量。 截距变为intercept_scaling * synthetic_feature_weight
class_weight: dict or ‘balanced’ 默认:None
random_state:int,RandomState实例或None,可选,默认值:None
solver:{‘newton-cg’,’lbfgs’,’liblinear’,’sag’,’saga’}
max_iter: int 默认:100 仅适用于newton-cg,sag和lbfgs求解器。 求解器收敛的最大迭代次数。
muti_class:str,{‘ovr’:’multinomial’},默认:’ovr’
verbose: int,默认:0 对于liblinear和lbfgs求解器,将verbose设置为任何正数以表示详细程度。
warm_start:bool 默认:False
n_jobs: int,默认:1