当前位置: 首页 > news >正文

逻辑回归以及python(sklearn)详解

一、逻辑回归的核心思想

逻辑回归是一种用于解决二分类问题的统计学习方法,虽然名字中有"回归",但它实际上是一种分类算法。

1、逻辑回归的核心思想

线性回归的公式是 z=wTx+bz = w^T x + bz=wTx+b,其输出值 z 是一个连续的实数。如果我们想用它来做分类(比如判断邮件是“垃圾邮件”还是“非垃圾邮件”),我们需要将连续的输出转换为一个代表概率的值,即介于 0 和 1 之间的值。
逻辑回归的聪明之处在于,它在线性回归的结果上套用了一个激活函数,将这个实数 z 映射到 (0, 1) 区间。这个激活函数就是 Sigmoid 函数,也叫逻辑函数。

2、 Sigmoid 函数(核心公式)

Sigmoid 函数的数学表达式为:
σ(z)=11+e−z\sigma(z) = \frac{1}{1 + e^{-z}}σ(z)=1+ez1

其中:

  • z 是线性回归模型的输出,即 z=wTx+bz = w^T x + bz=wTx+b
  • e是自然常数。
  • σ(z)\sigma(z)σ(z)的输出值在 (0, 1) 区间内。

Sigmoid 函数的特性:

  • z→+∞z \to +\inftyz+ 时,e−z→0e^{-z} \to 0ez0,所以 σ(z)→1\sigma(z) \to 1σ(z)1
  • z→−∞z \to -\inftyz 时,e−z→+∞e^{-z} \to +\inftyez+,所以 σ(z)→0\sigma(z) \to 0σ(z)0
  • z=0z = 0z=0时,σ(z)=0.5\sigma(z) = 0.5σ(z)=0.5
    这个特性完美地将线性输出转换成了概率。

3、逻辑回归的完整模型

我们将线性部分和激活函数组合起来,就得到了逻辑回归的完整模型:
P(y=1∣x)=σ(wTx+b)=11+e−(wTx+b)P(y=1 | x) = \sigma(w^T x + b) = \frac{1}{1 + e^{-(w^T x + b)}}P(y=1∣x)=σ(wTx+b)=1+e(wTx+b)1

这里:

  • P(y=1∣x)P(y=1 | x)P(y=1∣x)代表了在给定输入特征 x 的情况下,预测样本属于类别 1 的概率
  • w 是权重向量,表示每个特征的重要程度。
  • b是偏置项。
  • x是输入特征向量。

对于二分类问题,我们通常设置一个阈值(默认为 0.5)来做最终判断:

  • 如果 P(y=1∣x)≥0.5P(y=1 | x) \ge 0.5P(y=1∣x)0.5,则预测 y^=1\hat{y} = 1y^=1
  • 如果 P(y=1∣x)<0.5P(y=1 | x) < 0.5P(y=1∣x)<0.5,则预测 y^=0\hat{y} = 0y^=0

4、决策边界

从 Sigmoid 函数的特性我们知道,当 P(y=1 | x) = 0.5时,对应的 z=wTx+b=0z = w^T x + b = 0z=wTx+b=0
因此,决策边界就是由方程 wTx+b=0w^T x + b = 0wTx+b=0所定义的一个超平面(在二维空间中是一条直线)。

  • 所有使得 wTx+b>0w^T x + b > 0wTx+b>0的点,我们预测为类别 1。
  • 所有使得 wTx+b<0w^T x + b < 0wTx+b<0的点,我们预测为类别 0。
    决策边界是模型在学习过程中自己确定的,而不是人为设定的。

二、相关指标详解

1、基础:混淆矩阵

混淆矩阵是所有这些指标的基石。它是一个2x2的表格(针对二分类问题),总结了模型的预测结果与实际结果之间的关系。
假设我们研究的问题是“预测一个患者是否患病”,我们将患病定义为正例健康定义为负例

实际为正例(患病)实际为负例(健康)
预测为正例(患病)TPFP
预测为负例(健康)FNTN

这四个字母的含义是:

  • TP:真正例
    • 含义:患者确实患病,模型也正确地预测为患病。
    • 解释:预测正确,是我们喜闻乐见的结果。
  • FP:假正例(误报)
    • 含义:患者实际健康,但模型错误地预测为患病。
    • 解释第一类错误。例如“误诊”,可能带来不必要的治疗和恐慌。
  • FN:假负例(漏报)
    • 含义:患者实际患病,但模型错误地预测为健康。
    • 解释第二类错误。例如“漏诊”,后果可能非常严重,患者错过了治疗时机。
  • TN:真负例
    • 含义:患者确实健康,模型也正确地预测为健康。
    • 解释:预测正确,也是好结果。

记住这个表格,后面的所有指标都是它的“数学组合”。

2、五大指标详解

指标一:准确率
  • 公式Accuracy = (TP + TN) / (TP + TN + FP + FN) 或者Accuracy = (TP + TN) / Total测试用例
  • 含义所有预测结果中,预测正确的比例。
指标二:精准率
  • 公式Precision = TP / (TP + FP)
  • 含义在所有被模型预测为“患病”的人中,真正患病的人的比例。 它关注的是预测结果的精确性
指标三:召回率
  • 公式Recall = TP / (TP + FN)
  • 含义在所有真正“患病”的人中,被模型成功预测出来的比例。 它关注的是模型找出正例的能力
指标四:F1分数
  • 公式F1-Score = 2 * (Precision * Recall) / (Precision + Recall)
  • 含义精准率和召回率的调和平均数。
指标五:ROC曲线与AUC
  • ROC曲线:描绘了当分类模型的阈值从0变化到1时,真正例率(TPR)假正例率(FPR) 的关系。
    • TPR(真正例率):其实就是召回率TPR = Recall = TP / (TP+FN)
    • FPR(假正例率)在所有实际负例中,被错误预测为正例的比例。 FPR = FP / (FP+TN)
  • AUCROC曲线下的面积。这个值在0.5到1之间。
    • AUC = 1:完美分类器。
    • AUC = 0.5:模型没有区分能力,和随机猜测一样(对角线)。
    • AUC > 0.5:模型具有一定的区分能力,值越大,说明模型在“排序”能力上越好(即把正样本排在前面的概率越高)。

3、总结与如何选择

指标公式关注点适用场景
准确率A(TP+TN)/Total整体预测的正确性数据平衡,简单快速的评估
精准率PTP/(TP+FP)预测的精确度(降低误报FP)FP代价高:垃圾邮件检测、推荐系统
召回率RTP/(TP+FN)找出正例的能力(降低漏报FN)FN代价高:疾病诊断、欺诈检测
F1分数2*P*R/(P+R)精准率和召回率的调和平衡数据不平衡,需要综合评估
AUCROC曲线下面积模型的整体排序能力评估模型区分正负样本的整体能力,对阈值不敏感

实战建议:

  1. 永远不要只看准确率,尤其是当你的数据不平衡时。
  2. 首先问自己一个业务问题:“在我的场景中,误报(FP)和漏报(FN)哪个代价更高?”
    • 怕误报(FP) -> 优先看精准率
    • 怕漏报(FN) -> 优先看召回率
    • 两个都重要,想找平衡 -> 看F1分数
  3. 使用混淆矩阵作为起点,它能最直观地展示模型的错误类型。
  4. 使用ROC曲线来评估模型的整体区分能力。

三、 python(sklearn)代码详解

1、LogisticRegression

from sklearn.linear_model import LogisticRegression# 创建并训练模型,使用平衡的类别权重和较强的正则化
model = LogisticRegression(penalty='l2',        # 使用 L2 正则化C=0.1,               # 较强的正则化solver='lbfgs',      # 默认求解器,适用于此数据集max_iter=200,        # 增加最大迭代次数class_weight='balanced', # 处理类别不平衡(虽然此数据集平衡,仅为演示)multi_class='multinomial', # 使用 multinomial 进行多分类random_state=42
)model.fit(X_train_scaled, y_train)# 进行预测
y_pred = model.predict(X_test_scaled)
y_pred_proba = model.predict_proba(X_test_scaled)

参数列表详解

参数默认值类型可选值解释
penalty‘l2’str‘l1’, ‘l2’, ‘elasticnet’, None择用来惩罚模型复杂度(系数大小)的正则化类型。
C$1.0float正则化强度的倒数。C 值越小,正则化强度越大。
max_iter100int求解器收敛的最大迭代次数。如果数据复杂或特征多,可能需要增加这个值以避免“未收敛”的警告。

2、指标函数详解

from sklearn.metrics import (accuracy_score, precision_score, recall_score, f1_score, roc_curve, auc, confusion_matrix, classification_report, RocCurveDisplay)
函数使用描述
accuracy_scoreaccuracy_score(y_test, y_pred)获取测试集的准确率
precision_scoreprecision_score(y_test, y_pred)获取测试集的精准率
recall_scorerecall_score(y_test, y_pred)获取测试集的召回率
F1-Scoref1_score(y_test, y_pred)获取测试集F1分数 (F1-Score)
classification_reportclassification_report(y_test, y_pred)完整评估报告
http://www.dtcms.com/a/601288.html

相关文章:

  • RESTful规范
  • 四川高端网站建设女生做网站开发
  • PDF转图片:轻松实现工程图纸的高效共享与高清展示
  • 【ZeroRange WebRTC】ICE 服务器列表解析(KVS WebRTC)
  • 【考证资讯】注意!2026 年HCIE实验考试内容重要调整!
  • uni-app中表格分页
  • LeetCode hot100:142 环形链表 II:寻找环的入口节点
  • vue下载依赖报错npm ERR node-sass@4.14.1 postinstall: `node scripts/build.js`的解决方法
  • 二分查找专题(十三):“答案二分”的“三连击”——「制作m束花所需的最少天数」
  • 快3网站制作 优帮云简述网站建设的方法
  • Java1112 基类 c#vscode使用 程序结构
  • 第30节:大规模地形渲染与LOD技术
  • Goer-Docker系列1-容器数据持久化
  • 天机学堂——day1(修改bug)
  • 国外网站设计欣赏长沙网页设计哪家专业
  • php做图片交互网站代码成都制作网站公司
  • AI应用开发神器coze(扣子):使用智能体生成文案和图片
  • Java·如何区别多态中的“重写”与“重载”。
  • B端系统自动化MCP工具开发指南
  • 外贸整合营销网站如何快速开发手机app
  • 谢赛宁×李飞飞×LeCun联手重磅|Cambrian-S:「视频空间超感知」新范式,实现真正持续视频感知
  • 在服务器网站上做跳转网站运营推广方式
  • Ansible 安装与入门
  • VMMap 学习笔记(8.7):命令行模式与自动抓取——无界面采集内存证据的正确姿势
  • 大型网站服务器得多少钱app大全免费软件排行榜
  • AXI-5.3.2~5.3.5
  • Anaconda安装与配置:构建人工智能开发环境
  • 从入门到精通:周志华《机器学习》第一、二章深度解析
  • 网站建设品牌策划装修设计软件排名
  • 社区投稿 | Oinone应用于整车制造供应链决策