Python实现逻辑回归模型教程

article/2025/8/24 8:55:28

理解多个预测变量与连续响应变量之间关系通常适用线性回归,但当响应变量为类别变量时需要适用逻辑回归。
逻辑回归是尝试从数据集中把W观测记录分为不同类别的分类算法。

常见的分类回归场景有:

  • 通过信用分和账户余额预测客户贷款是否违约
  • 通过篮球比赛中平均抢得篮板球次数及平均每场得分预测是否被NBA选中
  • 通过特定城市的房屋大小及盥洗室数量预测房价是否为200w以上

相比于线性回归的响应值是连续变量,上述示例的响应变量仅包括两个值中的一个。

逻辑回归方程

逻辑回归使用最大似然估计方法寻找下面方程:

l o g [ p ( X ) / ( 1 − p ( X ) ) ] = β 0 + β 1 X 1 + β 2 X 2 + … + β p X p {log^{[p(X) / (1-p(X))]} = β_0 + β_1X_1 + β_2X_2 + … + β_pX_p} log[p(X)/(1p(X))]=β0+β1X1+β2X2++βpXp

参数说明:

  • X j : 第 j t h 个预测变量 {X_j: 第 j^{th} 个预测变量} Xj:jth个预测变量

  • β j : 第 j t h 个预测变量的预测系数 {β_j: 第 j^{th} 个预测变量的预测系数} βj:jth个预测变量的预测系数

方程右边的公式预测了响应变量取值为1的对数概率。因此,当我们拟合逻辑回归模型时,我们可以使用以下公式来计算给定观测值为1的概率:

p ( X ) = e β 0 + β 1 X 1 + β 2 X 2 + … + β p X p / ( 1 + e β 0 + β 1 X 1 + β 2 X 2 + … + β p X p ) {p(X) = e^{β_0 + β_1X_1 + β_2X_2 + … + β_pX_p} / (1 + e^{β_0 + β_1X_1 + β_2X_2 + … + β_pX_p)}} p(X)=eβ0+β1X1+β2X2++βpXp/(1+eβ0+β1X1+β2X2++βpXp)

然后使用特定概率阈值对观测值进行分类:1或0。举例:观测概率大等于0.5则为1,反之为0。

如何解释逻辑回归响应值

假设我们使用逻辑回归模型来预测一个给定的篮球运动员是否会被NBA选中,基于他们的场均篮板和场均得分。

下面是逻辑回归模型的输出:

ItemCoefficientStd. ErrorZ-statisticP-value
Intercept-2.86900.1485-19.3199<0.0001
Rebounds0.06980.01614.3235<0.0001
Points0.16940.02995.6734<0.0001

使用上述系数,我们可以计算指定运动员被选人NBA的概率:

P ( D r a f t e d ) = e − 2.8690 + 0.0698 ∗ ( r e b s ) + 0.1694 ∗ ( p o i n t s ) / ( 1 + e − 2.8690 + 0.0698 ∗ ( r e b s ) + 0.1694 ∗ ( p o i n t s ) ) {P(Drafted) = e^{-2.8690 + 0.0698*(rebs) + 0.1694*(points)} / (1+e^{-2.8690 + 0.0698*(rebs) + 0.1694*(points)})} P(Drafted)=e2.8690+0.0698(rebs)+0.1694(points)/(1+e2.8690+0.0698(rebs)+0.1694(points))

假设某运动员场均为8个篮板、得15分,则计算结果为0.557,既然大于0.5,则预测结果为被选入NBA;

相比另一个运动员场均3个篮板、得7分,则计算结果为0.186,既然小于0.5,则预测结果不会被选人NBA.

逻辑回归假设前提

逻辑回归需遵循下面一些假设:

  1. 响应变量为二值,即响应变量只能有两种可能。
  2. 观测数据集是相互独立的。即观察结果不应该来自于对同一个体的重复测量,也不应该以任何方式相互关联。
  3. 预测变量之间不存在严重的多重共线性,即假设预测变量之间不存在高度相关。
  4. 没有极端的异常值。假设在数据集中没有极端的异常值或有影响的观察结果。
  5. 预测变量与响应变量的logit之间存在线性关系。这个假设可以使用Box-Tidwell测试进行测试。
  6. 样本量足够大。作为经验法则,每个解释变量应该有至少10个最不常见的结果。例如,如果你有3个解释变量,而最不常见结果的期望概率是0.20,那么你的样本量应该至少为(10*3)/ 0.20 = 150。

示例

载入必要的包

import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn import metrics
import matplotlib.pyplot as plt

加载数据

使用下面代码加载数据:

data = pd.read_csv("data/default.csv")# view first six rows of dataset
print(data[0:6])# find total observations in dataset
print(len(data.index))

输出结果:

   default  student      balance        income
0        0        0   729.526495  44361.625074
1        0        1   817.180407  12106.134700
2        0        0  1073.549164  31767.138947
3        0        0   529.250605  35704.493935
4        0        0   785.655883  38463.495879
5        0        1   919.588530   7491.558572
10000

数据集包含10000条客户信息,共四列:

default: 响应变量,是否违约.
student: 是否为学生.
balance: 平均余额.
income: 收入情况.

我们将使用其他三个变量预测是否违约:default字段。

创建测试集和训练集

下面把原数据集分为测试集和训练集:

# 定义预测变量和响应变量
x = data[['student', 'balance', 'income']]
y = data['default']# split the dataset into training (70%) and testing (30%) sets
x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=0.3,random_state=0)  

拟合逻辑回归模型

我们使用LogisticRegression()函数拟合模型:

# 实例化模型对象
log_regression = LogisticRegression()# 使用训练数据拟合模型
log_regression.fit(x_train, y_train)# 使用测试数据进行预测
y_pred = log_regression.predict(x_test)# 输出模型参数
print(log_regression.intercept_, log_regression.coef_, log_regression.score(x_train, y_train))
# [-2.86843745] [[-3.79999456e+00  4.03495132e-03 -1.36823955e-04]] 0.9691428571428572

模型诊断

测试完成后,我们需要分析模型表现. 首先创建混淆矩阵:

cnf_matrix = metrics.confusion_matrix(y_test, y_pred)print(cnf_matrix)

结果如下:

[[2870   17][  93   20]]
  • 正确预测不违约: 2870
  • 正确预测真违约: 20
  • 错误预测不违约: 93
  • 错误预测真违约: 17

下面获取模型准确率,它表示模型的正确预测率:

print("Accuracy:", metrics.accuracy_score(y_test, y_pred))# Accuracy: 0.9633333333333334

通过结果可以说明模型可以正确预测客户违约率为96.2% .

最后,我们可以绘制ROC (Receiver Operating Characteristic)曲线,该曲线显示模型预测的真阳性的百分比,随着预测概率的截止点从1降低到0。AUC(曲线下面积)越高,我们的模型预测结果就越准确:

在这里插入图片描述


http://chatgpt.dhexx.cn/article/spOTdU2p.shtml

相关文章

【机器学习笔记4】逻辑回归模型

目录 什么是逻辑回归&#xff1f; Sigmoid函数 决策边界 逻辑回归的损失函数 为什么平方误差模型不可行&#xff1f; 对数损失函数 单个样例损失&#xff1a; 整体损失函数 梯度下降算法 补充&#xff1a;F1-score评价指标 F1-Score简介 相关概念 F-Score 示例及…

逻辑回归模型详解(Logistic Regression)

目录 广义线性模型 极大似然法 逻辑回归的假设函数 逻辑回归的损失函数 交叉熵损失函数 为什么LR模型损失函数使用交叉熵不用均方差 交叉熵损失函数的数学原理 交叉熵损失函数的直观理解 交叉熵简介 对数损失函数和交叉熵损失函数 逻辑回归优缺点 其他 逻辑回归与…

机器学习算法(一):逻辑回归模型(Logistic Regression, LR)

目录 1 LR 1.1 直观表述 1.2 决策边界&#xff08;Decision Boundary&#xff09; 2. 权值求解 2.1 代价函数&#xff08;似然函数&#xff09; 2.1.1 为什么损失函数不用最小二乘&#xff1f;即逻辑斯蒂回归损失函数为什么使用交叉熵而不是MSE&#xff1f; 2.1.2 代价函…

详解逻辑回归

目录 1. 逻辑回归模型介绍1.1 Logistic分布1.2 Logistic回归1.3 代价函数1.4 求解1.5 正则化1.5.1 L1正则化1.5.2 L2正则化1.5.3 L1正则化和L2正则化区别 2 与其他模型的对比2.1 与线性回归2.2 与 SVM2.3 与朴素贝叶斯 3. 模型细节3.1 为什么适合离散特征3.2 为什么不用平方误差…

逻辑回归模型(Logistic Regression)

逻辑回归符合伯努利分布。伯努利分布就是我们常见的0-1分布&#xff0c;即它的随机变量只取0或者1&#xff0c;各自的频率分别取1−p和p&#xff0c;当x0或者x1时&#xff0c;我们数学定义为&#xff1a; 所以在常规的逻辑回归模型中&#xff0c;只有两个类别&#xff0c;0或者…

逻辑回归(Logistic Regression)详解

逻辑回归也称作logistic回归分析&#xff0c;是一种广义的线性回归分析模型&#xff0c;属于机器学习中的监督学习。其推导过程与计算方式类似于回归的过程&#xff0c;但实际上主要是用来解决二分类问题&#xff08;也可以解决多分类问题&#xff09;。通过给定的n组数据&…

逻辑回归模型及案例(Python)

1 简介 逻辑回归也被称为广义线性回归模型&#xff0c;它与线性回归模型的形式基本上相同&#xff0c;最大的区别就在于它们的因变量不同&#xff0c;如果是连续的&#xff0c;就是多重线性回归&#xff1b;如果是二项分布&#xff0c;就是Logistic回归。 Logistic回归虽然名…

PyCharm如何修改配置大内存

现在的电脑标配都8G以上内存了&#xff0c;不过很多IDE仍然是以低配电脑为标准&#xff0c;去配置软件占用硬件的程度 因为内存会直接影响到软件的性能&#xff0c;可以通过手动去设置大内存 一、首先启动虚拟机 进入pychram的bin目录&#xff0c;可以看到2个以vmoptions为后…

jvm最大内存限制多少?

(1)堆内存分配 JVM初始分配的内存由-Xms指定&#xff0c;默认是物理内存的1/64&#xff1b;JVM最大分配的内存由-Xmx指定&#xff0c;默认是物理内存的1/4。默认空余堆内存小 于40%时&#xff0c;JVM就会增大堆直到-Xmx的最大限制&#xff1b;空余堆内存大于70%时&#xff0c;…

大内存时代虚拟内存现在还有用吗

但凡用过Windows的人&#xff0c;大多听说过“虚拟内存”这四个字。尤其在当年物理内存还普遍偏低的年代&#xff0c;虚拟内存几乎成了每一个玩电脑的人都曾摆弄过 的东东。不过随着硬件技术不断发展&#xff0c;内存价格逐步白菜化&#xff0c;我们的电脑再也不像当年那样算计…

笔记本电脑查看几个卡槽,支持最大内存,内存条参数详细步骤,开启双通道条件

1&#xff1a;一个命令&#xff0c;轻松查看电脑支持多大内存 使用 Win R组合快捷键&#xff0c;打开 运行 操作框&#xff0c;然后在打开后面 输入命令 cmd &#xff0c;并点击下方的“确定”进入命令操作窗口&#xff0c;如下图所示。 然后在打开的CMD命令窗口输入命令&am…

在Jupyter里按需删除大内存变量并且释放内存

使用情形&#xff1a; 项目需要对多个大内存变量进行处理&#xff0c;但是每个大内存变量处理的时候都需要加载一个另外共同的大内存变量。现在处理完一个变量之后&#xff0c;只能重启kernel然后处理另一个变量&#xff1b;但是理论上我们可以删除一个变量的内存并读入下一个…

xp计算机如何查看内存大小,xp如何查看内存大小

想知道怎么查看电脑内存的大小吗&#xff0c;下面是学习啦小编带来的关于xp如何查看内存大小的内容&#xff0c;欢迎阅读! xp查看内存大小方法一&#xff1a; 一&#xff1a; 右键单击 我的电脑&#xff0c;选择 【属性】 查看 二&#xff1a; 打开控制面板&#xff0c;打开【系…

Android Studio如何设置占用的最大内存?

1.File-Settings,如下图&#xff0c;是应用到所有项目中的。 2.下方的“Daemon Heap Size Setting”是设置当前项目编译时所能使用的最大内存的&#xff0c;所以如果我们需要仅当前项目有效&#xff0c;可以在这里设置,设置好之后点击“确定”&#xff0c;完成更改。

不花里胡哨看电脑主板支持最大内存与频率

怎么看电脑主板支持最大内存 WinR输入Cmd回车 wmic memphysical get maxcapacity如上图 Maxcapacity&#xff1a;最大内存 k/1024M/1021G 33554432/1024/102132GB说明最高支持32GB的内存 怎么看电脑主板内存条卡槽 CtrlShiftEsc 可以看到卡槽、速度频率 怎么看电脑主板支…

确定你的台式计算机支持的内存类型,怎么查看电脑主板支持多大内存?教你看主板支持多大内存2种方法...

在我们使用电脑时&#xff0c;都希望电脑有这极强的性能&#xff0c;在想要电脑有极强的情况下&#xff0c;电脑的硬件其重要性毋庸置疑。很多喜欢DIY的小伙伴都会选择性能强但是极具性价比的硬件组装。不过不少用户在选择内存条的时候都是往大了选&#xff0c;通常情况下&…

确定你的台式计算机支持的内存类型,怎么看主板支持多大内存 教你看主板支持多大内存2种方法...

怎么看主板支持多大内存&#xff1f;由于不同的主板最大支持的内存大小不同&#xff0c;一些老主板最大支持4G/8GB内存&#xff0c;一些新主板可以支持16GB或者更高。对于DIY装机或者打算为电脑升级内存的时&#xff0c;就需要先了解主板最大支持多大的内存&#xff0c;这样才能…

win10设置虚拟内存_大内存时代,电脑系统还需要设置虚拟内存吗?

大家都知道,内存是组成电脑的重要硬件之一,甚至内存的大小决定了电脑系统运行的快慢,那么在电脑硬件高速发展的今天,电脑系统是否只需要物理内存就可以了呢?要搞清楚这个问题,我们需要先来认识一下物理内存和虚拟内存。 什么是物理内存,什么是虚拟内存? 虚拟内存是相对…

python设置程序最大内存_限制你的Python程序所能使用的最大内存

如果程序开发不当&#xff0c;可能会出现占用过多内存的情况。特别是在Docker里面&#xff0c;如果Python程序占用太多内存&#xff0c;可能会导致Docker容器死掉。 为了限制Python程序所能使用的最大内存&#xff0c;我们可以使用Python自带的resource模块。 首先获取系统默认…

64位 计算机 最大内存,win10 64位最大支持内存是多少_win10系统最高支持多大内存...

许多用户认为&#xff0c;win10电脑应该内存越大那么运行速度也就会越快&#xff0c;因此常常会给自己的win10 64位系统增加内存条&#xff0c;可是有些用户可能不知道&#xff0c;win10系统所能承受的内存空间也是有限制的&#xff0c;那么win10 64位最大支持内存是多少呢&…