逻辑回归算法梳理

1 逻辑回归与线性回归的区别

线性回归

逻辑回归

目的

预测

分类

逻辑回归鸢尾花分类代码 逻辑回归分为_参数估计

未知

{0,1}

函数

拟合函数

预测函数

参数计算

最小二乘

最大似然估计

  • 1 (分类和回归):逻辑回归与线性回归都属于广义线性回归模型,回归模型就是预测一个连续变量(如降水量,价格等)。在分类问题中,预测属于某类的概率,可以看成回归问题。这可以说是使用回归算法的分类方法。
  • 2(输出):直接使用线性回归的输出作为概率是有问题的,因为其值有可能小于0或者大于1,这是不符合实际情况的,逻辑回归的输出正是[0,1]区间
  • 3 (参数估计方法):
    一. 线性回归中使用的是最小化平方误差损失函数,对偏离真实值越远的数据惩罚越严重——问题:假如使用线性回归对{0,1}二分类问题做预测,则一个真值为1的样本,其预测值为50,那么将会对其产生很大的惩罚,这也和实际情况不符合,更大的预测值说明为1的可能性越大,而不应该惩罚的越严重。
    二.逻辑回归使用对数似然函数进行参数估计,使用交叉熵作为损失函数,对预测错误的惩罚是随着输出的增大,逐渐逼近一个常数,这就不存在上述问题
    三:也正是因为使用的参数估计的方法不同,线性回归模型更容易受到异常值(outlier)的影响,有可能需要不断变换阈值(threshold)
    参考:逻辑回归与线性回归的区别与联系

2 逻辑回归原理

逻辑回归鸢尾花分类代码 逻辑回归分为_逻辑回归鸢尾花分类代码_02

是一种‘逻辑回归鸢尾花分类代码 逻辑回归分为_逻辑回归鸢尾花分类代码_03’函数,它将逻辑回归鸢尾花分类代码 逻辑回归分为_损失函数_04值转化为一个接近0或者1的逻辑回归鸢尾花分类代码 逻辑回归分为_参数估计_05

本质:在线性回归模型的预测结果去逼近真实标记的对数几率

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

逻辑回归公式:
逻辑回归鸢尾花分类代码 逻辑回归分为_参数估计_06
逻辑回归鸢尾花分类代码 逻辑回归分为_参数估计_05的取值有特殊的含义,它表示结果取1的概率,因此对于输入逻辑回归鸢尾花分类代码 逻辑回归分为_逻辑回归鸢尾花分类代码_08分类结果为类别1和类别0的概率分别为:
逻辑回归鸢尾花分类代码 逻辑回归分为_参数估计_09

逻辑回归鸢尾花分类代码 逻辑回归分为_线性回归_10

将两公式合成一个:
逻辑回归鸢尾花分类代码 逻辑回归分为_损失函数_11
利用最大似然估计,假定样本与样本之间相互独立,那么整个样本集生成的概率即为所有样本生成概率的乘积
逻辑回归鸢尾花分类代码 逻辑回归分为_参数估计_12
为了方便求解,这里我们用对数似然函数最大化,对数似然函数取反即为我们的损失函数逻辑回归鸢尾花分类代码 逻辑回归分为_逻辑回归鸢尾花分类代码_13
逻辑回归鸢尾花分类代码 逻辑回归分为_损失函数_14
损失函数逻辑回归鸢尾花分类代码 逻辑回归分为_逻辑回归鸢尾花分类代码_13逻辑回归鸢尾花分类代码 逻辑回归分为_逻辑回归鸢尾花分类代码_16求导(这里只以一个训练样本为例)
逻辑回归鸢尾花分类代码 逻辑回归分为_线性回归_17
则对于逻辑回归鸢尾花分类代码 逻辑回归分为_逻辑回归鸢尾花分类代码_16的更新方式:
逻辑回归鸢尾花分类代码 逻辑回归分为_参数估计_19

  • 线性回归和逻辑回归对参数有相同的更新方式
    ps:线性回归的梯度方向
    逻辑回归鸢尾花分类代码 逻辑回归分为_参数估计_20

4 正则化与模型评估指标

  • 惩罚高阶参数,使它们趋近于0,这样就会得到较为简单的假设,也就是得到简单的函数,这样就不易发生过拟合。但是在实际问题中,并不知道哪些是高阶多项式的项,所以在代价函数中增加一个惩罚项/正则化项,将代价函数中所有参数值都最小化,收缩每一个参数。
  • 实现参数的稀疏有什么好处吗?
    1.简化模型,避免过拟合 ——因为一个模型中真正重要的参数可能并不多,如果考虑所有的参数起作用,那么可以对训练数据可以预测的很好,但是对测试数据表现性能极差
    2.参数变少可以使整个模型获得更好的可解释性
  • 参数值越小代表模型越简单
    因为越复杂的模型,越是会尝试对所有的样本进行拟合,甚至包括一些异常样本点,这就容易造成在较小的区间里预测值产生较大的波动,这种较大的波动也反映了在这个区间里的导数很大,而只有较大的参数值才能产生较大的导数。因此复杂的模型,其参数值会比较大
  • 正则化方法
    1逻辑回归鸢尾花分类代码 逻辑回归分为_线性回归_21范数:向量中非零元素的个数(逻辑回归鸢尾花分类代码 逻辑回归分为_逻辑回归鸢尾花分类代码_22
    逻辑回归鸢尾花分类代码 逻辑回归分为_线性回归_23
    若用L_0范数来规则化参数矩阵,就是希望参数矩阵大部分元素都为0,使特征矩阵稀疏。但是很难优化求解。
    2逻辑回归鸢尾花分类代码 逻辑回归分为_逻辑回归鸢尾花分类代码_24范数:向量中各个绝对值元素之和
    逻辑回归鸢尾花分类代码 逻辑回归分为_损失函数_25

3 逻辑回归鸢尾花分类代码 逻辑回归分为_线性回归_26范数:各参数的平方和再求平方根
逻辑回归鸢尾花分类代码 逻辑回归分为_损失函数_27

模型评估指标

  • 回归任务常用的性能度量:均方误差
  • 分类问题中:
    1 错误率和精度
    2 查准率、查全率、F1
    3 ROC和AUC
    4 代价敏感错误率与代价曲线

5 逻辑回归的优缺点

  • 优点
  1. 适合需要得到一个分类概率的场景
  2. 计算代价不高,容易理解实现。逻辑回归在时间和内存需求上相当高效。它可以应用于分布式数据,并且还有在线算法实现,用较少的资源处理大型数据。
  3. 逻辑回归对于数据中小噪声的鲁棒性很好,并且不会受到轻微的多重共线性的特别影响。(严重的多重共线性则可以使用逻辑回归结合L2正则化来解决,但是若要得到一个简约模型,L2正则化并不是最好的选择,因为它建立的模型涵盖了全部的特征)
  • 缺点
  1. 容易欠拟合,分类精度不高
  2. 据特征有缺失或者特征空间很大时表现效果并不好。

6 样本不均衡问题解决方向

样本不平衡:指分类任务中不同类别的训练样例数目差别很大的情况(假设正样本较少,反类样例较多)

  • 欠采样:直接对训练集中的反类样例进行‘欠采样’,即除去一些反例,使正、反例数目接近
  • 过采样:增加一些正例,使正、反数目接近
  • 阈值移动

7 sklearn 参数

  • 逻辑回归鸢尾花分类代码 逻辑回归分为_线性回归_28
class 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)

参数

逻辑回归鸢尾花分类代码 逻辑回归分为_参数估计_29

惩罚项,str类型,默认为l2

逻辑回归鸢尾花分类代码 逻辑回归分为_线性回归_30

对偶或原始方法,bool类型,默认为False

逻辑回归鸢尾花分类代码 逻辑回归分为_线性回归_31

停止求解的标准,float类型,默认为1e-4

逻辑回归鸢尾花分类代码 逻辑回归分为_参数估计_32

正则化系数λ的倒数,float类型,默认为1.0。必须是正浮点型数。像SVM一样,越小的数值表示越强的正则化

逻辑回归鸢尾花分类代码 逻辑回归分为_逻辑回归鸢尾花分类代码_33

是否存在截距或偏差,bool类型,默认为True

逻辑回归鸢尾花分类代码 逻辑回归分为_损失函数_34

仅在正则化项为”liblinear”,且fit_intercept设置为True时有用。float类型,默认为1

逻辑回归鸢尾花分类代码 逻辑回归分为_参数估计_35

用于标示分类模型中各种类型的权重

逻辑回归鸢尾花分类代码 逻辑回归分为_损失函数_36

随机数种子,int类型,可选参数,默认为无,仅在正则化优化算法为sag,liblinear时有用

逻辑回归鸢尾花分类代码 逻辑回归分为_参数估计_37

优化算法选择参数,只有五个可选参数,即newton-cg,lbfgs,liblinear,sag,saga

逻辑回归鸢尾花分类代码 逻辑回归分为_逻辑回归鸢尾花分类代码_38

算法收敛最大迭代次数,int类型,默认为10。仅在正则化优化算法为newton-cg, sag和lbfgs才有用,算法收敛的最大迭代次数。

逻辑回归鸢尾花分类代码 逻辑回归分为_逻辑回归鸢尾花分类代码_39

分类方式选择参数,str类型,可选参数为ovr和multinomial,默认为ovr。ovr即前面提到的one-vs-rest(OvR),而multinomial即前面提到的many-vs-many(MvM)。如果是二元逻辑回归,ovr和multinomial并没有任何区别,区别主要在多元逻辑回归上

逻辑回归鸢尾花分类代码 逻辑回归分为_逻辑回归鸢尾花分类代码_40

日志冗长度,int类型。默认为0。就是不输出训练过程,1的时候偶尔输出结果,大于1,对于每个子模型都输出。

逻辑回归鸢尾花分类代码 逻辑回归分为_逻辑回归鸢尾花分类代码_41

热启动参数,bool类型。默认为False。如果为True,则下一次训练是以追加树的形式进行(重新使用上一次的调用作为初始化)

逻辑回归鸢尾花分类代码 逻辑回归分为_参数估计_42

并行数。int类型,默认为1。1的时候,用CPU的一个内核运行程序,2的时候,用CPU的2个内核运行程序。为-1的时候,用所有CPU的内核运行程序