初级算法班(2) ——逻辑回归

本文深入探讨逻辑回归,从模型定义、损失函数的推导和优化算法讲起,阐述其与线性回归的联系和区别,包括在分类问题上的优势和不足,以及正则化和模型评估方法,如L1、L2正则化和混淆矩阵、ROC曲线等。此外,还介绍了处理样本不均衡问题的策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

写在前面:由于昨天实验室毕业聚餐,和老师师兄们喝酒耽误了一天,所以没有太多的时间仔细梳理一下逻辑回归,这里就把我以前的笔记 po 出来,由于时间不够,所以公式就没有自己手打,全是图片,等后期有时间后再来优化这篇博客,按自己的理解梳理整个算法,并把公式全部打出来。

逻辑回归

和前面线性回归一样,从模型,代价函数和优化算法三个方面来描述逻辑回归算法

1. 逻辑回归模型

逻辑回归从本质上来说就是在线性回归的外面套了一个sigmoid函数,使样本能够映射到[0,1]之间,即为
线性在这里插入图片描述
在二维坐标中的表现是这样的
在这里插入图片描述

2. 逻辑回归损失函数

2.1 推导

逻辑回归不是连续的,所以线性回归损失函数定义的经验就用不上了。不过我们仍然可以用最大似然法来推导出我们的损失函数。逻辑回归的代价函数为交叉熵函数:
在这里插入图片描述
其中:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.2 优化

在这里插入图片描述

3. 优化算法

梯度下降法
在这里插入图片描述

4. 逻辑回归和线性回归的联系和区别

4.1 联系

(1)都属于广义线性回归模型
(2)输出值都是一个连续变量,分类问题可以视为某类的概率
(3)都用梯度下降法作为优化算法

4.2 区别

(1)二者的本质区别是逻辑回归是分类问题,线性回归是回归问题
(2)二者的损失函数不同,线性回归是平方误差损失函数,逻辑回归是交叉熵损失函数
(3)线性回归要求变量满足正态分布,自变量和因变量之间是线性关系;逻辑回归对自变量分布没有要求,也不要求自变量和因变量满足线性关系,但要求因变量是分类型变量,本质上是分析因变量取哪个值的概率与自变量的关系
(4)逻辑回归对异常值有更好的稳定性

5. 逻辑回归的优缺点

5.1 优点

  • LR是以概率的形式输出结果,不只是0和1的判定
  • LR的可解释强,可控性高
  • 训练快,feature engineering之后效果赞
  • 因为结果是概率,可以做ranking model
  • 添加feature简单

5.2 缺点

  • 容易欠拟合,分类精度不高
  • 数据特征有缺失或者特征空间很大时表现效果并不好

6. 正则化和模型评估

6.1 正则化

(1) 当损失过于小的时候,也就是模型能够拟合绝大部分的数据,这时候就容易出现过拟合。为了防止过拟合,我们会引入正则化

(2)L1 正则化: Lasso 回归,相当于为模型添加了这样一个先验知识,即 服从零均值拉普拉斯分布
在这里插入图片描述
其中μ,b为常数,且μ>0。
下面证明这一点,由于引入了先验知识,所以似然函数这样写:
在这里插入图片描述
取log再取负,得到目标函数:
在这里插入图片描述
等价于原始的cross−entropy后面加上了L1正则,因此L1正则的本质其实是为模型增加了“模型参数服从零均值拉普拉斯分布”这一先验知识

(3)L2 正则化: 相当于为模型添加了这样一个先验知识: 服从零均值正态分布
正态分布公式:
在这里插入图片描述
由于引入了先验知识,所以似然函数这样写:
在这里插入图片描述
在这里插入图片描述
取log再取负,得到目标函数:
在这里插入图片描述
等价于原始的cross−entropy后面加上了L2正则,因此L2正则的本质其实是为模型增加了“模型参数服从零均值正态分布”这一先验知识

6.2 模型评估

  • 混淆矩阵
    混淆矩阵是监督学习中的一种可视化工具,主要用于比较分类结果和实例的真实信息。矩阵中的每一行代表实例的预测类别,每一列代表实例的真实类别
    在这里插入图片描述
    `真正(True Positive , TP):被模型预测为正的正样本。
    假正(False Positive , FP):被模型预测为正的负样本。
    假负(False Negative , FN):被模型预测为负的正样本。
    真负(True Negative , TN):被模型预测为负的负样本。
    真正率(True Positive Rate,TPR):TPR=TP/(TP+FN),即被预测为正的正样本数 /正样本实际数。
    假正率(False Positive Rate,FPR) :FPR=FP/(FP+TN),即被预测为正的负样本数 /负样本实际数。
    假负率(False Negative Rate,FNR) :FNR=FN/(TP+FN),即被预测为负的正样本数 /正样本实际数。
    真负率(True Negative Rate,TNR):TNR=TN/(TN+FP),即被预测为负的负样本数 /负样本实际数/2

  • 准确率(Accuracy)
    准确率是最常用的分类性能指标。Accuracy = (TP+TN)/(TP+FN+FP+TN)即正确预测的正反例数 /总数
  • 精确率(Precision)
    精确率容易和准确率被混为一谈。其实,精确率只是针对预测正确的正样本而不是所有预测正确的样本。表现为预测出是正的里面有多少真正是正的。可理解为查准率。 Precision = TP/(TP+FP) 即正确预测的正例数 /预测正例总数
  • 召回率(Recall)
    召回率表现出在实际正样本中,分类器能预测出多少。与真正率相等,可理解为查全率。Recall = TP/(TP+FN),即正确预测的正例数 /实际正例总数
  • F1 score
    F值是精确率和召回率的调和值,更接近于两个数较小的那个,所以精确率和召回率接近时,F值最大。很多推荐系统的评测指标就是用F值的。
    2/F1 = 1/Precision + 1/Recall
  • ROC曲线
    逻辑回归里面,对于正负例的界定,通常会设一个阈值,大于阈值的为正类,小于阈值为负类。如果我们减小这个阀值,更多的样本会被识别为正类,提高正类的识别率,但同时也会使得更多的负类被错误识别为正类。为了直观表示这一现象,引入ROC。根据分类结果计算得到ROC空间中相应的点,连接这些点就形成ROC curve,横坐标为False Positive Rate(FPR假正率),纵坐标为True Positive Rate(TPR真正率)。一般情况下,这个曲线都应该处于(0,0)和(1,1)连线的上方。
    在这里插入图片描述
    ·ROC曲线中的四个点和一条线:
    点(0,1):即FPR=0, TPR=1,意味着FN=0且FP=0,将所有的样本都正确分类。
    点(1,0):即FPR=1,TPR=0,最差分类器,避开了所有正确答案。
    点(0,0):即FPR=TPR=0,FP=TP=0,分类器把每个实例都预测为负类。
    点(1,1):分类器把每个实例都预测为正类。
    总之:ROC曲线越接近左上角,该分类器的性能越好。而且一般来说,如果ROC是光滑的,那么基本可以判断没有太大的overfitting

  • AUC
    AUC(Area Under Curve)被定义为ROC曲线下的面积(ROC的积分),通常大于0.5小于1。随机挑选一个正样本以及一个负样本,分类器判定正样本的值高于负样本的概率就是 AUC 值。AUC值(面积)越大的分类器,性能越好,如图:
    在这里插入图片描述
  • PR曲线
    PR曲线的横坐标是精确率P,纵坐标是召回率R。评价标准和ROC一样,先看平滑不平滑(蓝线明显好些)。一般来说,在同一测试集,上面的比下面的好(绿线比红线好)。当P和R的值接近时,F1值最大,此时画连接(0,0)和(1,1)的线,线和PRC重合的地方的F1是这条线最大的F1(光滑的情况下),此时的F1对于PRC就好像AUC对于ROC一样。一个数字比一条线更方便调型。
    在这里插入图片描述

7.样本不均衡问题解决办法

  • 样本的过采样和欠采样
    (1)过采样:将稀有类别的样本进行复制,通过增加此稀有类样本的数量来平衡数据集。该方法适用于数据量较小的情况。
    (2)欠抽样:从丰富类别的样本中随机选取和稀有类别相同数目的样本,通过减少丰富类的样本量啦平衡数据集。该方法适用于数据量较大的情况。
    (3)也可以将过采样和欠采样结合在一起使用。

  • 使用多个分类器进行分类
    (1)模型融合 (bagging的思想 )
    思路:从丰富类样本中随机的选取(有放回的选取)和稀有类等量样本的数据。和稀有类样本组合成新的训练集。这样我们就产生了多个训练集,并且是互相独立的,然后训练得到多个分类器。若是分类问题,就把多个分类器投票的结果(少数服从多数)作为分类结果。若是回归问题,就将均值作为最后结果。
    (2)增量模型 (boosting的思想)
    思路:使用全部的样本作为训练集,得到分类器L1。从L1正确分类的样本中和错误分类的样本中各抽取50%的数据,即循环的一边采样一个,此时训练样本是平衡的,训练得到的分类器作为L2。从L1和L2分类结果中,选取结果不一致的样本作为训练集得到分类器L3.最后投票L1,L2,L3结果得到最后的分类结果。

  • 将二分类问题转换成其他问题
    可以将不平衡的二分类问题转换成异常点检测,或者一分类问题(可使用one-class svm建模)

  • 改变正负类别样本在模型中的权重
    使用代价函数学习得到每个类的权值,大类的权值小,小类的权值大。刚开始,可以设置每个类别的权值与样本个数比例的倒数,然后可以使用过采样进行调优。

由于时间原因还未在 pycharm 上跑逻辑回归的代码,所以目前关于sklearn参数这一块暂时就不写了,等后期实操后再补充上

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值