逻辑回归知识点讲解

知识导图

逻辑回归
├── 简介模块
│   ├── 应用场景:二分类任务(疾病预测、贷款审批、情感分析、广告点击率等)
│   └── 数学基础:Sigmoid函数、概率基础(边际/联合/条件概率)
├── 原理模块
│   ├── 预测流程:线性输出转概率,阈值判断完成分类
│   ├── 损失函数:二分类交叉熵损失,衡量分布差异
│   └── 优化逻辑:伯努利分布、极大似然估计、损失转换简化计算
└── 实战模块
    ├── 案例:癌症分类预测(缺失值处理、标准化、数据集划分)
    └── API:sklearn.linear_model.LogisticRegression()

核心名词解释

  • Sigmoid 函数:逻辑回归的激活函数,可将任意连续实数映射到 (0,1) 区间,从而将线性回归的输出转换为概率值,具备单调递增、拐点在 (0,0.5) 的特性。

  • 边际概率:描述单一事件发生的可能性,不考虑其他事件的影响。

  • 联合概率:描述两个或多个独立事件同时发生的概率。

  • 条件概率:描述在一个事件已发生的条件下,另一个事件发生的概率,体现事件间的依赖关系。

  • 二分类交叉熵损失函数:衡量真实标签分布与模型预测概率分布之间差异的指标,最小化该损失等价于最大化观测数据的对数似然性。

  • 伯努利分布:描述二分类问题中样本的概率分布,即样本取 0 或 1 的概率分布。

  • 极大似然估计:一种参数估计方法,核心是在已知观测数据的情况下,选择使得这些数据出现概率最大的参数值。


一、逻辑回归简介

本章节学习目标:

  • 知道逻辑回归的应用场景

  • 复习逻辑回归应用到的数学知识

1. 应用场景

逻辑回归是解决二分类问题的经典算法,常见的应用场景包括:

  • 疾病预测:判断检测结果是阳性还是阴性

  • 银行贷款审批:判断是否给用户放贷

  • 情感分析:判断文本的情感是正面还是负面

  • 广告点击率预测:判断用户是否会点击广告

除了上述场景,逻辑回归还可以应用在其他所有二分类的任务中

2. 数学基础

2.1 Sigmoid 函数

逻辑回归通过将线性回归的输出映射到 (0,1) 区间,使用 Sigmoid 函数将连续值转换为概率值,然后根据概率值进行分类预测。

Sigmoid 函数的核心特性:

  1. 映射能力:可以将取值范围为(−∞,+∞)(-\infty, +\infty)(,+)的输入,映射到(0,1)(0, 1)(0,1)的输出区间

  2. 单调性:是单调递增函数,保证输入越大,输出的概率值越高

  3. 拐点特性:在x=0x=0x=0时,函数值为 0.5,此处的斜率最大

  4. 分类规则

    • f(x)>0.5f(x)>0.5f(x)>0.5时,预测结果为 1

    • f(x)<0.5f(x)<0.5f(x)<0.5时,预测结果为 0

在这里插入图片描述

在这里插入图片描述

2.2 概率基础

概率是描述事件发生可能性的指标,在逻辑回归中常用的概率类型有三种,三者的对比如下:

概率类型 定义 记法 核心特点
边际概率 单一事件发生的可能性 记作P(A) 或者 P(B) 不考虑其他事件的影响,描述单个事件本身的发生概率
联合概率 两个或多个独立事件同时发生的概率 记作 P(A∩B) 或 P(A,B) 描述多个事件共同发生的情况,独立事件的联合概率可通过边际概率相乘得到
条件概率 事件 A 已发生的条件下,事件 B 发生的概率 P(B∣A) 体现事件间的依赖关系,以已知发生的事件为前提计算目标事件的概率

在这里插入图片描述

章节小结

本章节的核心知识点总结:

  1. 逻辑回归的作用:解决二分类问题

  2. Sigmoid 激活函数的作用:把数值映射到 (0,1)区间,用于分类预测

  3. 概率的分类

    • 边际概率:对应独立事件

    • 条件概率:对应事件的依赖性

    • 联合概率:对应多个事件同时发生


二、逻辑回归原理

本章节学习目标:

  • 理解逻辑回归算法的流程

  • 知道逻辑回归的原理和优化操作

1. 预测流程

**逻辑回归的基本思想是:将线性回归的输出,作为逻辑回归的输入,最终输出 (0,1) 之间的概率值,以此完成分类任务。**简单来说,逻辑回归是一种分类模型,它基于线性回归的结果,通过 Sigmoid 函数转换为概率,再根据设定的阈值完成分类。

举个例子,当我们设定阈值为 0.6 时:

  • 如果模型输出的概率大于 0.6,就预测为正类

  • 如果小于 0.6,就预测为负类

在这里插入图片描述

2. 损失函数:二分类交叉熵

交叉熵是衡量两个概率分布(真实分布yyy和预测分布ppp)差异的指标,最小化交叉熵损失函数,实际上就是在寻找能够最大化观测数据的对数似然性的模型。

交叉熵损失的计算是对所有样本的损失求和。

在这里插入图片描述

3. 优化逻辑:似然函数与极大似然估计

3.1 伯努利分布

逻辑回归处理的是二分类问题,这类问题的样本服从伯努利分布:

在这里插入图片描述

  • pip_ipi:表示每个样本被分类正确时的概率

  • yiy_iyi:表示每个样本的真实类别(0 或 1)

3.2 极大似然估计

基于伯努利分布,我们的问题可以转化为:寻找使得联合概率事件最大时的权重参数w、bw、bwb,这就是极大似然估计

其核心思想是:在已知观测数据的情况下,选择使得这些数据出现概率最大的参数值。

3.3 交叉熵与似然函数的关系

伯努利分布的似然函数,正是逻辑回归交叉熵损失的来源,我们可以通过两个转换,将最大化似然的问题,转化为最小化交叉熵的问题:

  1. 问题转换:把最大化似然函数的问题,变为最小化交叉熵损失的问题(取负对数)

  2. 计算转换:把连乘问题变为连加问题,简化计算,同时避免数值下溢

在这里插入图片描述

章节小结

本章节的核心知识点总结:

  1. 逻辑回归核心思想:解决分类问题,把线性回归的输出作为逻辑回归的输入

  2. 逻辑回归的优化操作:极大化似然函数取负对数得到最小化交叉熵损失,这种转换让计算更简单,也更稳定


三、API 与实战案例

本章节学习目标:

  • 知道逻辑回归的 API

  • 动手实现癌症分类案例

1. 癌症分类预测案例

我们以癌症分类预测为例,来实践逻辑回归的应用。

数据描述

该数据集的基本信息:

  1. 共 699 条样本,11 列数据:

    • 第 1 列:用于检索的 id

    • 中间 9 列:与肿瘤相关的医学特征

    • 最后 1 列:肿瘤类型的数值

  2. 数据中包含 16 个缺失值,用?标出

  3. 标签含义:2 表示良性肿瘤,4 表示恶性肿瘤

在这里插入图片描述

2. API 与代码实现

在 sklearn 中,逻辑回归的 API 为:sklearn\.linear\_model\.LogisticRegression\(\)

完整的代码实现如下:

*# 导包*
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler *#sklearn.preprocessing(预处理):作用:给数据 “整容、标准化、清洗”,让模型更好训练。*
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score  *#sklearn.metrics(评估指标):模型训练完,给模型打分、评判好坏。*
*# 1.获取数据*
df =pd.read_csv('data/breast-cancer-wisconsin.csv')
print(df.shape) *# (699, 11)*
print(df.head()) *# 默认查看前5行数据*
print(df.columns) *# 查看所有的列名*
print('-------')
*# 2.数据预处理(异常值、缺失值、数据切割...)*
df.replace('?',np.nan,inplace=True) *# 把数据集中表示缺失值的 ?,替换成 Pandas 标准的缺失值 np.nan,方便后续处理*
df.dropna(inplace=True) *#删除所有包含 np.nan 的行,得到一个无缺失值的干净数据集。*
print(df.shape)
print('-----------')
*# 先获取所有得到的数据*
x=df.iloc[:,1:-1]*#包左不包右 ## 取特征:所有行,第1列 ~ 倒数第2列*
y=df.iloc[:,-1]  *# 取标签:所有行,最后一列*
*# 数据切割*
X_train, X_test, y_train, y_test = train_test_split(
  x, y, test_size=0.2, random_state=22)
*# 3.特征工程(标准化...)*
ss = StandardScaler()
x_train = ss.fit_transform(X_train)
x_test =ss.transform(X_test)
*# 4.模型选择*
model = LogisticRegression()
*# 5.模型训练*
model.fit(x_train,y_train)
*# 6.模型评估/预测*
*# 查看准确率:方式1 底层先自动预测再评估*
print(model.score(x_test,y_test))
*# 查看准确率:方式2 手动先预测,在评估*
y_predict = model.predict(x_test)
print(accuracy_score(y_test,y_predict))
Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐