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

python逻辑回归:数学原理到实战应用

一、逻辑回归简介

 逻辑回归(Logistic Regression)是一种广泛应用于分类问题的机器学习算法,尽管名称中带有 “回归” 二字,但它本质上是一种强大的分类模型。

1.核心思想:

逻辑回归的核心思想是通过构建一个线性函数,结合 Sigmoid 激活函数,将特征与类别概率关联起来。其工作流程大致分为几步:首先计算输入特征的线性组合,得到一个连续值;然后将这个值传入 Sigmoid 函数,将其映射到 0 到 1 之间,得到样本属于某一类别的概率;最后根据概率值与设定阈值(通常为 0.5)的比较,确定样本的类别。

2.sigmoid函数的作用:

Sigmoid 函数凭借其独特的数学特性,在多个领域都有着广泛而重要的应用,成为连接线性与非线性、连续与离散的关键工具。

在机器学习领域,Sigmoid 函数是逻辑回归算法的核心组成部分。逻辑回归作为经典的分类算法,正是通过 Sigmoid 函数将线性回归的输出值映射到 0 到 1 之间,从而得到样本属于某一类别的概率,为分类决策提供依据。例如在垃圾邮件识别中,它能将邮件特征的线性组合结果转换为 “是垃圾邮件” 的概率,帮助系统做出判断。

深度学习领域也离不开 Sigmoid 函数的身影。在早期的神经网络中,它常被用作激活函数,为网络引入非线性因素,使神经网络能够拟合复杂的非线性关系。虽然如今在深层网络中它的地位被 ReLU 等函数部分取代,但在一些特定场景,如生成对抗网络的生成器输出层,以及需要将输出限制在 0 到 1 范围内的任务中,Sigmoid 函数仍发挥着重要作用。

在生物学研究中,Sigmoid 函数能够很好地模拟某些生物生长过程。许多生物的生长曲线都呈现出 “S” 形,初期生长缓慢,接着进入快速增长期,最后生长速度逐渐减缓并趋于稳定,这与 Sigmoid 函数的曲线特征高度吻合,因此它被用来建立生物生长模型,描述种群数量随时间的变化规律。

除此之外还有许多作用。

二、逻辑回归的数学原理

上面说明了,逻辑回归的核心思想是:通过构建一个线性函数,结合 Sigmoid 激活函数,将特征与类别概率关联起来。

1.线性回归

定义:在N维空间中找一个像直线方程一样的函数来拟合数据而已。

z=w1​x1​+w2​x2​+⋯+wn​xn​+b

以一元数据为例:

 

 2.损失函数:

损失函数的核心作用:

目标:找到一条直线(或超平面),使所有数据点的预测值与真实值的总误差最小

线性回归最常用的损失函数是均方误差(Mean Squared Error, MSE)

公式如下:

符号说明
  • m:样本数量(数据点个数)。

  • x(i):第 i 个样本的特征(自变量)。

  • y(i):第 i 个样本的真实值(因变量)。

  • hθ​(x(i)):模型的预测值,即 θTx(i)。

  • θ:模型参数(权重和偏置)。

目标:使损失函数值最小,可以使用最小二乘法和梯度下降法实现。

3.sigmoid函数

Sigmoid 函数把 z 映射到 0~1:

sigmoid函数公式:

 

 把线性函数的z带入sigmo函数:

  • 当 z→+∞,概率接近 1

  • 当 z→−∞,概率接近 0

  • 当 z=0,概率 = 0.5

将数据分为0,1两类。 

 逻辑回归实操

 1.导入数据:

使用numpy导入数据:

import numpy as np

data = np.loadtxt(r"D:\pythonProject11\class\datingTestSet2.txt")

 2.提取数据:

 x = data[:,:-1]
y = data[:,-1]

 x = data[:,:-1]:除了最后一列的数据都提取出来

y = data[:,-1]:提取最后一列数据

3 训练集 / 测试集拆分:

from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(
x, y, test_size=0.2, random_state=1000)

  • split 表示将代码切分
  • test_size=0.2:80 % 数据拿去训练,20 % 留给考试。

  • random_state=1000:固定随机种子,保证每次运行得到同样的拆分(可复现实验)。

 4.训练逻辑回归:

 lr = LogisticRegression(C=0.01)
lr.fit(x_train, y_train)

  • 这里用了 ** multinomial logistic regression **(多分类逻辑回归)。

  • C=0.01:正则化系数越小,模型越“保守”,防止过拟合。

 5.查看模型参数:

a = lr.coef_      # 形状 (3, 3),每行对应一个类别的一堆权重
b = lr.intercept_ # 形状 (3,),每个类别一个偏置

6.预测评估: 

c = lr.predict(x_test)        # 对测试集做预测
score = lr.score(x_test, y_test)  # 平均准确率
print(c)
print("模型的正确率为:", score)

综合代码:

import numpy as np
from sklearn.linear_model import LogisticRegression
data = np.loadtxt(r"D:\pythonProject11\class\datingTestSet2.txt")x = data[:,:-1]
y = data[:,-1]
from sklearn.model_selection import train_test_split  #拆分数据,一部分训练一部分测试
x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=0.2,random_state=1000)
lr = LogisticRegression(C=0.01)
lr.fit(x_train,y_train)
a = lr.coef_
b = lr.intercept_
c = lr.predict(x_test)
score = lr.score(x_test,y_test)
print(c)
print("模型的正确率为:",score)

 项目2:

银行贷款,读取信用卡信息,看看谁是老赖。

 与上述不同的是,读取的信息需要进行脱敏化处理

为什么要做“信息脱敏”?:

  1. 护隐私:防止姓名、住址、身份证号等被直接识别。

  2. 合规要求:《个人信息保护法》《数据安全法》都明确要求“最小可用、最小暴露”。

  3. 降低风险:一旦出现数据泄露,脱敏后的信息也难以被恶意利用。

 常见的数据处理:

0-1标准化

也叫离差标准化,是对原始数据的线性变换,使结果映射到[0,1]区间。

z标准化

基于数据的均值和标准差进行数据的标准化。将A的原始x使用z-score标准化到x。

本次我们就会使用z标准化:

代码如下:

对Aount数据列进行z标准化

from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
data['Amount'] = scaler.fit_transform(data[['Amount']])
 2.丢弃冗余数据:
data = data.drop(['Time'], axis=1)
  • Time:秒级时间戳,对欺诈检测意义不大,直接丢掉。

其他部分与上述项目差别不大,完整代码如下:

import pandas as pd
from sklearn.linear_model import LogisticRegressiondata = pd.read_csv("creditcard.csv")
from sklearn.preprocessing import StandardScaler #z标准化
scaler = StandardScaler()
data['Amount'] = scaler.fit_transform(data[['Amount']])
data = data.drop(['Time'],axis=1)
x = data.drop("Class",axis=1)
y = data.Class
lr = LogisticRegression()
from sklearn.model_selection import train_test_split
x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=0.3,random_state=1000)
lr.fit(x_train,y_train)
y_predict=lr.predict(x_test)
score = lr.score(x_test,y_test)from sklearn import metrics
print(metrics.classification_report(y_test,y_predict)) #把模型在测试集上的预测结果 y_predict 与真实标签 y_test 做一次“体检”,打印一份一目了然的诊断报告。

运行结果如下: 

 

总结:逻辑回归的数学本质

逻辑回归的数学原理可以概括为:用 Sigmoid 函数将线性模型的输出映射为类别概率,通过最小化交叉熵损失函数学习最优参数,最终实现对类别的预测

这种算法兼具线性模型的简洁性和概率模型的可解释性,虽然简单但在实际业务中(如信用评分、欺诈检测、用户流失预测等)仍被广泛使用。理解其数学原理,不仅能帮助我们更好地调参和优化模型,也能为学习更复杂的算法(如神经网络)打下基础 —— 神经网络的输出层其实就是逻辑回归的扩展。

 

http://www.dtcms.com/a/307897.html

相关文章:

  • 逻辑回归详解:从数学原理到实际应用
  • 界面组件DevExpress WPF中文教程:网格视图数据布局 - 数据单元格
  • CentOS7 使用Docker安装MinIO完整教程
  • 使用ANSYS在系统级对降压转换器进行建模
  • 在超算平台异构加速卡AI * 1卡的Ubuntu20.04环境下安装docker服务(未成功)
  • 本土DevOps平台Gitee如何重塑中国研发团队的工作流
  • 为Github Copilot创建自定义指令/说明/注意事项
  • 计算机网络中的socket是什么?编程语言中的socket编程又是什么?python的socket编程又该如何用?
  • 浅谈“压敏电阻”
  • Kubernetes (K8s) 部署Doris
  • 智慧城市多源监控协同精度↑28%:陌讯多模态融合算法实战解析
  • 技术分享 | 悬镜亮相于“2025开放原子开源生态大会软件物料清单(SBOM)”分论坛
  • 计算机网络学习(一、Cisco Packet Tracer软件安装)
  • MySQL查询语句详解
  • matlab - 算4个数的加减法
  • pytorch的自定义 CUDA 扩展怎么学习
  • Wise Duplicate Finder 重复文件查找工具 - 永久免费专业版文件去重工具
  • linux线程封装和互斥
  • 数模混合IC设计流程
  • Redis主从复制搭建
  • Cesium 快速入门(六)实体类型介绍
  • Java试题-选择题(2)
  • DeepSeek笔记(三):结合Flask实现以WEB方式访问本地部署的DeepSeek-R1模型
  • 【机器人+相机通讯】宇树科技相机通信
  • 【MATLAB】(三)数据类型与运算符
  • 告别物业思维:科技正重构产业园区的价值坐标系
  • Excel接入deepseek
  • 7月31号打卡
  • 机器学习之逻辑回归(Logistic Regression)
  • 快速搭建Java服务指南