逻辑回归及逻辑回归的评估指标

news/2024/11/8 16:48:07/

一、逻辑回归介绍

逻辑回归(Logistic Regression)是机器学习中的一种分类模型,逻辑回归是一种分类算法,虽然名字中带有回归,但是它与回归之间有一定的联系。由于算法的简单和高效,在实际中应用非常广泛。

1.逻辑回归的应用场景
  • 广告点击率
  • 是否为垃圾邮件
  • 是否患病
  • 金融诈骗
  • 虚假账号

这些例子都是属于两个类别之间的判断。简单来说,逻辑回归就是解决二分类问题的利器。

2.逻辑回归的原理
  1. 定义逻辑函数:逻辑回归使用逻辑函数(sigmoid函数)将线性回归模型的输出转换为一个概率值。逻辑函数的定义如下:
    s i g m o i d ( z ) = 1 / ( 1 + e x p ( − z ) ) sigmoid(z) = 1 / (1 + exp(-z)) sigmoid(z)=1/(1+exp(z))
    其中,z是线性回归模型的输出,exp()是自然指数函数。

  2. 构建线性回归模型:假设有一个包含n个特征的样本x,对应的特征权重为w,截距项为b。线性回归模型的输出为:
    z = w 0 x 0 + w 1 x 1 + . . . + w n x n + b z = w₀x₀ + w₁x₁ + ... + wₙxₙ + b z=w0x0+w1x1+...+wnxn+b
    其中,x₀为常数项,取值为1。

  3. 应用逻辑函数:将线性回归模型的输出z带入逻辑函数中,得到样本属于某个类别的概率p。p的取值范围在0到1之间。
    p = s i g m o i d ( z ) = 1 / ( 1 + e x p ( − z ) ) p = sigmoid(z) = 1 / (1 + exp(-z)) p=sigmoid(z)=1/(1+exp(z))

  4. 设置阈值:为了进行分类,需要将概率值p转化为二分类的结果。通常,可以设置一个阈值,如0.5。当p大于等于0.5时,将样本预测为正类(1),否则预测为负类(0)。

  5. 模型训练与参数估计:使用训练数据集,通过最大似然估计或梯度下降等优化方法,估计模型的参数w和b,使得模型对训练数据的预测与实际标签尽可能一致。

二、逻辑回归的损失及优化

1.损失

在逻辑回归中,常用的损失函数是二元交叉熵损失函数(Binary Cross-Entropy Loss),也称为对数损失函数(Log Loss)。

对于二元分类问题,给定一个样本的真实标签y(0或1)和逻辑回归模型的预测概率p,二元交叉熵损失函数可以定义为:
L ( y , p ) = − [ y ∗ l o g ( p ) + ( 1 − y ) ∗ l o g ( 1 − p ) ] L(y, p) = -[y * log(p) + (1 - y) * log(1 - p)] L(y,p)=[ylog(p)+(1y)log(1p)]
其中,y是样本的真实标签,p是逻辑回归模型预测样本属于正例(类别1)的概率。

无论何时,我们都希望损失函数值,越小越好

  • 当y=1时,我们希望p值越大越好
  • 当y=0时,我们希望p值越小越好

对于逻辑回归问题,完整的损失函数是将所有训练样本的二元交叉熵损失函数的平均值或总和。

假设有m个训练样本,每个样本的真实标签为yᵢ(0或1),逻辑回归模型的预测概率为pᵢ。那么完整的损失函数可以定义为:
L ( w , b ) = ( 1 / m ) ∗ Σ [ − y i ∗ l o g ( p i ) − ( 1 − y i ) ∗ l o g ( 1 − p i ) ] L(w, b) = (1/m) * Σ[-yᵢ * log(pᵢ) - (1 - yᵢ) * log(1 - pᵢ)] L(w,b)=(1/m)Σ[yilog(pi)(1yi)log(1pi)]
其中,w是特征权重向量,b是截距项。

2.优化

同样使用梯度下降算法,去减少损失函数的值。这样去更新逻辑回归前面对应算法的权重参数,提升原本属于1类别的概率,降低原本是0类别的概率。

三、逻辑回归API

  • sklearn.linear_model.LogisticRegression(solver=“liblinear”,penalty=“l2”,C=1.0)

    • solver可选参数:(“liblinear”,“sag”,“saga”,“newton-cg”,“lbfgs”)
      • 默认:”liblinear“;用于优化问题的算法。
      • 对于小数据集来说,"liblinear"是个不错的选择,而”sag“和”saga“对于大型数据集会更快。
      • 对于多分类问题,只有”newton-cg“,”sag“,”saga“和”lbfgs“可以处理多项损失;”liblinear“仅限于二分类问题。
    • penalty:正则化种类
    • C:正则化力度

    默认将类别数量少的当作正例。

    LogisticRegression方法相当于SGDClassifier(loss=“log”,penalty""),SGDClassifier实现了一个普通的随机梯度下降算法(SG),而使用LogisticRegression(实现了SAG)

四、逻辑回归的评估指标

  1. 准确率(Accuracy):准确率是最常见的评估指标,表示模型预测正确的样本数与总样本数之比。
  2. 精确率(Precision):精确率衡量模型在所有预测为正例的样本中,真正例的比例。
  3. 召回率(Recall):召回率衡量模型在所有真实正例中,正确预测为正例的比例。
  4. F1分数(F1 Score):F1分数是精确率和召回率的调和平均值,综合考虑了两者的性能。

这些评估指标可以帮助我们全面评估逻辑回归模型的性能。准确率衡量了整体预测的准确性,精确率和召回率则关注了模型在正例预测和真实正例之间的匹配情况。F1分数综合考虑了精确率和召回率,适用于平衡精确率和召回率的情况。

除了上述指标,还可以考虑使用混淆矩阵、ROC曲线和AUC(Area Under the Curve)等指标来评估逻辑回归模型的性能,具体选择哪种指标取决于具体问题和需求。

五、混淆矩阵

1.混淆矩阵

在分类任务下,预测结果与真实结果之间存在四种不同的组合,构成混淆矩阵(适用于多分类)

在这里插入图片描述

由上图可以看出,当预测结果与真实结果一样时,才是真的;预测结果与真实结果不一致时,是伪

2.精确率(Precision)与召回率(Recall)
  • 精确率(Precision):精确率衡量模型在所有预测为正例的样本中,真正例的比例。 精确率可以计算为:
    P r e c i s i o n = T P / ( T P + F P ) Precision = TP / (TP + FP) Precision=TP/(TP+FP)

  • 召回率(Recall):召回率衡量模型在所有真实正例中,正确预测为正例的比例。召回率可以计算为:
    R e c a l l = T P / ( T P + F N ) Recall = TP / (TP + FN) Recall=TP/(TP+FN)

3.其他分类评估方法
  • F1分数(F1 Score):F1分数是精确率和召回率的调和平均值,综合考虑了两者的性能。F1分数可以计算为:

F 1 S c o r e = 2 ∗ ( P r e c i s i o n ∗ R e c a l l ) / ( P r e c i s i o n + R e c a l l ) F1 Score = 2 * (Precision * Recall) / (Precision + Recall) F1Score=2(PrecisionRecall)/(Precision+Recall)

4.分类评估API
  • sklearn.metrics.classification_report(y_true, y_pred, labels=[], target_names=None)

    • y_true:真实目标值
    • y_pred:预测的目标值
    • labels:指定类别对应的数字
    • target_names:目标类别名称
    • return:每个类别精确率与召回率
# 5.精确率\召回率指标评价
ret = classification_report(y_true=y_test,y_pred=y_pre,labels=(2,4),target_names=("良性","恶性"))
print(ret)
5.如何衡量样本不均衡下的评估?

假设这样一个情况,如果有99个样本癌症,1个样本非癌症,不管怎样我全都预测正例(默认癌症为正例),准确率就为99%。但是这样效果并不好,会有一个误诊的,这属于很严重的医学事故。这就是样本不均衡下的评估问题。

  • 怎样判断样本是否均衡?

    在二分类问题中,若两个分类的比例大于4:1,则认为这个样本不均衡。

    在样本不均衡的情况下,就需要ROC曲线和AUC指标来进行评估

六、ROC曲线与AUC指标

1.TPR与FPR
  • TPR=TP/(TP+FN)
    • 所有真实类别为1的样本中,预测类别为1的比例
  • FPR=FP/(FP+TN)
    • 所有真实类别为0的样本中,预测类别为1的比例
2.ROC曲线

在这里插入图片描述

  • ROC(Receiver Operating Characteristic)曲线是用于评估二分类模型性能的一种常用工具。它通过绘制分类器在不同阈值下的真正例率(True Positive Rate,TPR)与假正例率(False Positive Rate,FPR)之间的关系来展示模型在正例和反例之间的权衡。

  • ROC曲线的横轴是FPR,纵轴是TPR。在绘制ROC曲线时,我们通过改变分类器的阈值来计算不同情况下的TPR和FPR。

  • 理想情况下,一个性能良好的分类器的ROC曲线应该尽可能地靠近左上角,即TPR接近1且FPR接近0。这表示分类器在最小化假正例的同时,能够最大化真正例的分类。对角线上的点(FPR = TPR)代表了随机猜测的分类器。

3.AUC指标
  • AUC(Area Under the Curve)是ROC曲线下的面积,是一种常用的评估指标,用于度量二分类模型的性能。AUC值的范围在0到1之间,值越接近1表示分类器的性能越好值越接近0.5表示分类器的性能越接近于随机猜测
  • 当AUC值接近1时,说明模型能够很好地将正样本排在负样本之前;当AUC值接近0.5时,说明模型的性能等同于随机猜测;当AUC值小于0.5时,说明模型的性能较差,甚至比随机猜测还要差。
  • AUC作为一种综合评估指标,相对于简单的准确率或精确率等指标,能够更全面地反映分类器的性能,尤其在类别不平衡的情况下更为有效它不受分类阈值的影响,能够对分类器在不同阈值下的性能进行比较和评估。
4.AUC计算API
  • from sklearn.metrics import roc_auc_score

    • sklearn.metrics.roc_auc_score(y_true,y_score)
      • 计算ROC曲线面积,即AUC值
      • y_true:每个样本的真实类别,必须为0(反例),1(正例)标记
      • y_score:预测得分,可以是正类的估计概率、置信值或者分类器方法的返回值
  • AUC只能用来评价二分类

  • AUC非常适合评价样本不均衡中的分类器性能


http://www.ppmy.cn/news/87529.html

相关文章

hive02

查询练习 练习1 2022-08-07 1,liuyan 2,tangyan 3,jinlian 4,dalang 5,ximenqing ​ 2022-08-08 1,liuyan 2,tangyan 4,dalang 6,wusong ​ -- 创建分区表记录每天用户登陆信息 create table tb_login (uid int,name string ) partitioned by (dt string)row format delimit…

opencv实践-图像去畸变

目录 1.背景2.镜头成像畸变原因3.去畸变方法4. opencv去畸变函数5.代码实现 1.背景 由于相机的镜头并不完全理想,成像时会产生线条扭曲、失真等。对双目图像、鸟瞰图等进行处理时,首先要矫正去畸变。 2.镜头成像畸变原因 相机的镜头前有一块透镜&…

Flutter_环境配置

FlutterSDK 下载FlutterSDK管理工具<SideKick>下载安装<SideKick>下载FlutterSDK设置全局SDK 修改Flutter配置文件获取全局SDK路径 验证配置是否成功验证环境配置 下载FlutterSDK管理工具 下载安装 SideKick下载链接 下载FlutterSDK 打开 SideKick选择需要的SD…

探秘 | 如何分辨内网和外网?

目录 &#x1f4a1; 什么是外网IP、内网IP&#xff1f; &#x1f4a1; 对于自有路由器上网的用户&#xff0c;可以这样理解外网IP、内网IP &#x1f4a1; 几个大家经常会问的问题 什么是外网IP、内网IP&#xff1f;很多用户都有一个疑惑&#xff0c;如果不使用路由器拨号上网…

五大网络IO模型

网络IO模型 1. IO是什么&#xff1f; I/O&#xff08;英语&#xff1a;Input/Output&#xff09;&#xff0c;即输入&#xff0f;输出&#xff0c;通常指数据在存储器&#xff08;内部和外部&#xff09;或其他周边设备之间的输入和输出&#xff0c;是信息处理系统&#xff0…

android 12.0控制Camera开启功能实现

1.概述 在12.0的产品开发中,需要增加系统属性, 通过系统属性值来控制camera开关来实现是否可用camera的目的,这就需要通过相关管理类来控制相机是否可用打开来实现 2.控制Camera开启功能实现的核心代码 frameworks/base/core/java/android/hardware/camera2/CameraManager…

mysql时间字段属性:datetime、date、timestamp 作用及区别

MySQL字段属性&#xff1a; datetime: 用于存储日期和时间&#xff0c;格式为YYYY-MM-DD HH:MM:SS&#xff0c;范围从’1000-01-01 00:00:00’到’9999-12-31 23:59:59’。 date: 用于存储日期&#xff0c;格式为YYYY-MM-DD&#xff0c;范围从’1000-01-01’到’9999-12-31’…

​Win10更新清理怎么做?

“我有一台华硕二合一笔记本电脑&#xff0c;发现它开始运行缓慢。有时&#xff0c;屏幕会卡在加载界面上&#xff0c;不得不重新启动。为了让电脑更加流畅&#xff0c;我已经将其更新到Windows 10版本&#xff0c;现在希望通过Win10更新清理来进一步提升性能。请问如何进行Win…