逻辑回归算法梳理

逻辑回归算法梳理

1.逻辑回归与线性回归的联系区别
线性回归是通过对数据进行建立模型,然后输入新数据可以得到一个预测值。而逻辑回归是一种经典得二分类算法。两者的联系在于将线性回归的输出经过一个Sigmoid函数,然后将该值映射到sigmoid函数中这样就完成了由值到概率的转换,也就是分类任务。
逻辑回归算法梳理
2.逻辑回归的原理
我们在线性回归中可以得到一个预测值,将该值映射到sigmoid函数中这样就完成了由值到概率的转换,也就是分类任务。
预测函数:

逻辑回归算法梳理
逻辑回归算法梳理
分类任务:

逻辑回归算法梳理
整合可得:
逻辑回归算法梳理
似然函数:
逻辑回归算法梳理
对数函数:

逻辑回归算法梳理
此时应用梯度上升求最大值,引入J(thea)= -1/ml(thea)转化为梯度下降问题。
3.逻辑回归损失函数推导及优化

逻辑回归算法梳理
4.正则化与模型评估指标
逻辑回归也会面临过拟合问题,所以我们也要考虑正则化。常见的有L1正则化和L2正则化。逻辑回归的L1正则化的损失函数表达式如下,相比普通的逻辑回归损失函数,增加了L1的范数做作为惩罚,超参数αα作为惩罚系数,调节惩罚项的大小
二元逻辑回归的L1正则化损失函数表达式如下:
逻辑回归算法梳理
逻辑回归的L1正则化损失函数的优化方法常用的有坐标轴下降法和最小角回归法。
二元逻辑回归的L2正则化损失函数表达式如下:
逻辑回归算法梳理
逻辑回归的L2正则化损失函数的优化方法和普通的逻辑回归类似。
评价指标
(1)精准率
精准率:预测结果为1的时候,预测正确的概率
原因:在有偏(极度偏斜)数据中,通常将1作为真正关注的对象,那么在这种情况下预测正确的概率就作为精准率。(比如:我们真正关心的是预测出了多少癌症病人,而实际上得癌症的又有多少人,即我们预测患癌症的成功率为多少)
逻辑回归算法梳理
(2)召回率
我们关注的事件真实的发生的情况下,成功预测的概率(比如:现有的癌症患者有多少人,而我们能预测出多少人)
逻辑回归算法梳理
(3)F1 score
有时候需要同时关注精准率和召回率,所以运用新的指标F1 score,兼顾精准率和召回率
逻辑回归算法梳理
(4)precision—recall的平衡(曲线)
(5)ROC曲线
描述TPR和FPR之间的关系
TPR:和召回率相同,表示TP除以真实值为1的数
FPR:用FP除以真实值为0的数
逻辑回归算法梳理
5.逻辑回归的优缺点
Logistic 回归是一种被人们广泛使用的算法,因为它非常高效,不需要太大的计算量,又通俗易懂,不需要缩放输入特征,不需要任何调整,且很容易调整,并且输出校准好的预测概率与线性回归一样,当你去掉与输出变量无关的属性以及相似度高的属性时,logistic 回归效果确实会更好。因此特征处理在 Logistic 和线性回归的性能方面起着重要的作用。Logistic 回归的另一个优点是它非常容易实现,且训练起来很高效。在研究中,我通常以 Logistic 回归模型作为基准,再尝试使用更复杂的算法。
由于其简单且可快速实现的原因,Logistic 回归也是一个很好的基准,你可以用它来衡量其他更复杂的算法的性能。
它的一个缺点就是我们不能用 logistic 回归来解决非线性问题,因为它的决策面是线性的。
6.样本不均衡问题解决方法

  1. 产生新数据型:过采样小样本(SMOTE),欠采样大样本。
  2. 对原数据的权值进行改变。
  3. 通过组合集成方法解决。
  4. 通过特征选择。

7.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
与{class_label:weight}形式的类相关联的权重。 如果没有给出,所有类都应该有一个权重。“平衡”模式使用y的值自动调整与输入数据中的类频率成反比的权重,如n_samples /(n_classes * np.bincount(y))。请注意,如果指定了sample_weight,这些权重将与sample_weight(通过fit方法传递)相乘。
random_state:int,RandomState实例或None,可选,默认值:None
在随机数据混洗时使用的伪随机数生成器的种子。 如果是int,则random_state是随机数生成器使用的种子; 如果是RandomState实例,则random_state是随机数生成器; 如果为None,则随机数生成器是np.random使用的RandomState实例。 在求解器=='sag’或’liblinear’时使用
solver:{‘newton-cg’,’lbfgs’,’liblinear’,’sag’,’saga’}
默认: ‘liblinear’ 在优化问题中使用的算法。
对于小型数据集,‘liblinear’是一个不错的选择,而’sag’和’saga’对于大型的更快。
对于多类问题,只有’newton-cg’,‘sag’,'saga’和’lbfgs’处理多项损失; ‘liblinear’仅限于’ovr’方案。‘newton-cg’,‘lbfgs’和’sag’只处理L2惩罚,而’liblinear’和’saga’处理L1惩罚。请注意,“sag”和“saga”快速收敛仅在具有大致相同比例的要素上得到保证。 您可以使用sklearn.preprocessing中的缩放器预处理数据。
max_iter: int 默认:100 仅适用于newton-cg,sag和lbfgs求解器。 求解器收敛的最大迭代次数。
muti_class:str,{‘ovr’:’multinomial’},默认:’ovr’
多类选项可以是’ovr’或’multinomial’。 如果选择的选项是’ovr’,那么二元问题适合每个标签。 另外,最小化损失是整个概率分布中的多项式损失拟合。 不适用于liblinear解算器。
verbose: int,默认:0 对于liblinear和lbfgs求解器,将verbose设置为任何正数以表示详细程度。
warm_start:bool 默认:False
设置为True时,重用上一次调用的解决方案以适合初始化,否则,只需擦除以前的解决方案。 对于liblinear解算器没用。
n_jobs: int,默认:1