python数据挖掘学习笔记——logistic逻辑回归实现

article/2025/9/12 4:59:52

Logistic逻辑回归分析

  • logistic模型的基本介绍
  • python中实现logistic回归
  • 模型的评价
    • 混淆矩阵
    • ROC曲线,AUC值

Logistic模型是经典的用于分类问题的模型,通常用于判断一件事物的好坏或将其分类。本文着重介绍logistic模型的在二分类上的应用,对于数学的推导证明则省略,logistic模型还有很多拓展的使用,如正则化、通过惩罚项调整系数等都值得学习研究,但本文不做赘述只讨论最基本的应用。
本文仅用于个人学习笔记使用
Reference:《从零开始学习python数据分析和挖掘(第二版)》

logistic模型的基本介绍

本文研究的问题为二分类问题,一般研究的问题有两类:一是判断问题好与坏的情况;二是将某种物质进行分类。例如医学上,可通过某些体检指标来判断是否确证某种病症。若采用之前的回归模型来描述,将0.5作为阈值——函数值小于0.5则表示未得病;大于0.5则表示得病的话,可能会造成较大的误差。所以通常采用logit函数将函数值压缩到0-1之间,其表达式如下所示:
y = 1 1 + e − z y = \frac{1}{1 + e^{-z} } y=1+ez1
令: z = β 0 + β 1 x 1 + ⋯ + β p x p z = \beta_{0}+\beta _{1}x_{1} + \cdots + \beta_{p}x_{p} z=β0+β1x1++βpxp
则可以得到: p = h β ( x ) = 1 1 + e − ( β 0 + β 1 x 1 + ⋯ + β p x p ) p = h_{\beta} (x)= \frac{1}{1 + e^{-(\beta_{0}+\beta _{1}x_{1} + \cdots + \beta_{p}x_{p})}} p=hβ(x)=1+e(β0+β1x1++βpxp)1
此处的p表示正向的概率, h β ( x ) h_{\beta}(x) hβ(x)可称为logistic模型,即为本期文章的重点。继续看下面的公式:
p 1 − p = e β 0 + β 1 x 1 + ⋯ + β p x p \frac{p}{1-p} = e^{ \beta_{0}+\beta _{1}x_{1} + \cdots + \beta_{p}x_{p}} 1pp=eβ0+β1x1++βpxp
此时若我们将两边取对数,则可得:
l o g ( p 1 − p ) = β 0 + β 1 x 1 + ⋯ + β p x p log(\frac{p}{1 - p}) = \beta_{0}+\beta _{1}x_{1} + \cdots + \beta_{p}x_{p} log(1pp)=β0+β1x1++βpxp
此时又回到了线性回归的模型形式,这很神奇捏。 p 1 − p \frac{p}{1 - p} 1pp 称为发生比,表示发生正向事件的概率占发生反向事件的概率的百分比。logistic模型中的参数 β \beta β正是通过这个方程求解出来的,但是如使用一般的OLS算法无法求解,一般采用极大似然估计法以及梯度下降算法迭代进行求解。这个过程我们不做推导,可自行查阅相关文献。

python中实现logistic回归

接下来让我们来看看python是如何实现logistic模型的建立:
数据集:根据6个跟运动状态有关的自变量,三个与方向有关,三个与加速度有关,根据该数据集构建logistic模型用于判断该用户是跑步还是步行。
使用模块:sklearn的子模块:linear_model中的LogisticRegression类。
代码:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn import linear_model
from sklearn import model_selection sports = pd.read_csv(r'Run or Walk.csv')
predictors = sports.columns[4:]
X = sports[:][predictors] 
y = sports.activity 
X_train, X_test, y_train, y_test = model_selection.train_test_split(X, y, test_size = 0.25, random_state = 1234) 
# 训练模型
sklearn_logistic = linear_model.LogisticRegression().fit(X_train, y_train)
# 返回模型的各个参数
print('logistic模型的β系数:\n',sklearn_logistic.intercept_, sklearn_logistic.coef_)

解析: 读取文件、分割选取自变量和因变量、分割训练集测试集的基本操作不做叙述,重点来看logistic模型的求解:
通过调用LogisticRegression()类中的函数fit()对训练集的因变量和自变量进行训练,得出模型的表达式的参数 β \beta β结果如下所示:

logistic模型的β系数:#常系数以及变量前的系数:[4.36637441] [[ 0.48695898  6.87517973 -2.44872468 -0.01385936 -0.16085022  0.13389695]] 

最终可建立模型:
h β ( x ) = 1 1 + e − ( 4.37 + 0.49 x 1 + 6.86 x 2 − 2.45 x 3 − 0.01 x 4 − 0.16 x 5 + 0.13 x 6 ) h_{\beta}(x) = \frac{1}{1 + e^{-(4.37 + 0.49x_{1} + 6.86x_{2} - 2.45x_{3} - 0.01x_{4} - 0.16x_{5} + 0.13x_{6})}} hβ(x)=1+e(4.37+0.49x1+6.86x22.45x30.01x40.16x5+0.13x6)1
模型系数的意义
x 1 x_{1} x1为例,其系数为0.49,表示在其他因素均不变的情况下, x 1 x_{1} x1的数值每增加一个单位,会使得跑步发生比变化0.49倍。
模型的预测:

sklearn_predict = sklearn_logistic.predict(X_test)
res = pd.Series(sklearn_predict).value_counts()
print('预测结果:\n', res) 

输出结果

预测结果:
0    12119
1    10028
dtype: int64

使用predict()函数进行预测,得到的结果分别显示被判断为了跑步或走路的样本的个数。

模型的评价

混淆矩阵

定义:
混淆矩阵是2×2的矩阵,其基本形式如下所示。

实际为0实际为1
预测为0A, 预测正确为0B, 错将1预测为0
预测为1C, 错将0预测为1D, 预测正确为1

A可用TN表示,B可用FN表示;C可用FP表示,D可用TP表示。定义了这些数值,我们可以定义如下几个指标:
A c c u r a c y = A + D A + B + C + D , 衡 量 模 型 对 整 体 数 据 的 预 测 效 果 Accuracy =\frac{A + D}{A + B + C + D},衡量模型对整体数据的预测效果 Accuracy=A+B+C+DA+D
S e n s i t i v i t y = D B + D , 正 例 覆 盖 率 Sensitivity = \frac{D}{B + D},正例覆盖率 Sensitivity=B+DD
S p e c i f i c i t y = A A + C , 反 例 覆 盖 率 Specificity = \frac{A}{A + C},反例覆盖率 Specificity=A+CA
P r e c i s i o n = D C + D , 正 例 命 中 率 Precision = \frac{D}{C + D}, 正例命中率 Precision=C+DD
代码:

# 混淆矩阵
cm = metrics.confusion_matrix(y_test, sklearn_predict, labels = [0, 1])
print('混淆矩阵:\n', cm)# 混淆矩阵热力图
import seaborn as sns
sns.heatmap(cm, annot=True, fmt = '.2e', cmap = 'GnBu')

输出结果:混淆矩阵的热力图如下所示。该热力图颜色越深的地方其数值越大,且图中对角线上的颜色最深,表明预测正确的占比较大。
在这里插入图片描述

ROC曲线,AUC值

ROC曲线则是通过可视化结果来判断模型的好坏。它的指标有两个:一是x轴的1 - Specificity;二是y轴的Sensitivity。利用python我们可以轻松地绘制出ROC曲线以及其面积AUC数值如下所示:
代码

# ROC曲线和AUC数值
# y得分为模型预测正例的概率
plt.figure()
y_score = sklearn_logistic.predict_proba(X_test)[:, 1]fpr, tpr, threshold = metrics.roc_curve(y_test, y_score)
# 计算AUC的值
roc_auc = metrics.auc(fpr, tpr)import matplotlib.pyplot as plt
#绘制面积图
plt.stackplot(fpr, tpr, colors='steelblue', alpha = 0.5, edgecolor = 'black')
# 添加ROC曲线的轮廓
plt.plot(fpr, tpr, color = 'black', lw = 1)
# 添加对角线
plt.plot([0, 1], [0, 1], color = 'red', linestyle = '--')
# 添加文本信息
plt.text(0.5, 0.3, 'ROC curve (area = %0.2f)' % roc_auc)plt.xlabel('1-Specificity')
plt.ylabel('Specificity')plt.show()

输出结果:该ROC曲线下的面积即为AUC的数值,为0.93。其值越接近1表明该模型的拟合效果越好。
在这里插入图片描述
后记
分类模型除logistic模型外,fisher判别分析、SVM支持向量机、决策树等大量的机器学习算法都可解决分类问题。在真实的项目中或数学建模竞赛时,通常是利用python自动化编程的优势,将所有可能用到的模型进行训练、测试,并使用模型评估的方法对该算法下的结果进行评估,最终选择最为优秀的模型进行应用,这也是机器学习算法选择的基本思路。


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

相关文章

logistic回归分类与softmax回归

目录 Logistic回归 逻辑回归的定义式: 损失函数 梯度下降 Logistic回归防止过拟合: Softmax回归: loss函数 逻辑回归与Softmax回归的联系 与神经网络的关系 logistic回归(多分类)和softmax的关系&#xff1a…

spss-logistic回归

logistic回归的因变量可以是二分类的,也可以是多分类的,但是二分类的更为常用,也更加容易解释,多类可以使用softmax方法进行处理。 Logistic回归分析也用于研究影响关系,即X对于Y的影响情况。Y为定类数据,…

logistic回归——PYTHON实现

logistic回归——PYTHON实现 概述: ​ logistic回归又称logistic回归分析,是一种线性回归模型。logistic回归应用最广泛的是处理二分类问题。比如,探讨引发疾病的危险因素,判断该病人是否患有该病;探讨房价的涨跌&am…

二项logistic回归案例分析(附操作数据)

当因变量数据类型为分类变量时,线性回归不再适用,应当做logistic回归。根据因变量分类水平的不同,具体包括二项logistic回归、多项logistic回归和有序logistic回归。 1.案例背景与分析策略 1.1 案例背景介绍 现收集到银行贷款客户的个人、…

Logistic回归--实例

逻辑回归 Logistic回归一种二分类算法,它利用的是Sigmoid函数阈值在[0,1]这个特性。Logistic回归进行分类的主要思想是:根据现有数据对分类边界线建立回归公式,以此进行分类。其实,Logistic本质上是一个基于条件概率的判别模型(D…

SPSS(八)logistic回归(图文+数据集)

SPSS(八)logistic回归 我们之前的线性回归也好、线性回归衍生方法也好、非线性回归也好,因变量的类型都是连续性的,假如因变量的类型是分类的呢?logistic回归针对的是二分类的因变量 logistic回归 基于线性回归模型…

2.2、logistic回归

一、什么是logistics回归 首先我们先要了解回归的概念,现有一些数据点,我们用 一条直线对这些点进行拟合,该线称为最佳拟合直线,这个拟合过程就称作回归。logistic回归虽然说是回归,但确是为了解决分类问题&#xff0…

Logistic Regression(逻辑回归)详细讲解

Logistic Regression(逻辑回归) 以前在学校学到Logistic Regression的时候,虽然最后会使用,但是对于许多地方有很多的疑惑,今天在这里详细梳理一下Logistic Regression的过程: Logistic Regression逻辑回归 回归的思想Logistic R…

第13章Stata Logistic回归分析

目录 13.1二元Logistic回归分析 案例延伸 延伸1:设定模型预测概率得具体值 延伸2:使用Probit模型对二分类因变量进行拟合 13.2多元Logistic回归分析 案例延伸 延伸:根据模型预测每个样本视力低下程度的可能性 13.3有序Logistic回归 …

机器学习笔记-Logistic回归

0 - 回顾 l i n e a r r e g r e s s i o n linear\ regression linear regression如果使用平方错误的话,我们可以很方便的解析出最好的 w w w是什么。即 w b e s t X † y w_{ best}X^{\dagger} y wbest​X†y 1 - 逻辑斯蒂回归问题 1.1 - 问题的提出 从一个人…

logistic回归详解

逻辑斯谛回归(logistic regression)是统计学习中的经典分类方法,虽然带有回归的字眼,但是该模型是一种分类算法,逻辑斯谛回归是一种线性分类器,针对的是线性可分问题。利用logistic回归进行分类的主要思想是…

机器学习笔记(六)Logistic回归

目录 一、什么是Logistics回归 二、sigmoid函数 三、梯度上升法 四、代码实现 数据导入 决策边界 梯度上升 五、总结 一、什么是Logistics回归 logistic回归是一种广义线性回归(generalized linear model),因此与多重线性回归分析有很多相…

【机器学习】Logistic回归(重新整理)

Logistic回归学习笔记 Logistic回归学习线路预备知识:建议先去B站学习一下信息量,熵,BL散度,交叉熵的概念。Logistic回归的函数模型损失函数、损失最小化架构对数损失作为损失函数损失最小化架构 分类函数最大概率分类函数阈值分类…

C语言 fprintf 函数 - C语言零基础入门教程

目录 一.fprintf 函数简介二.fprintf 函数使用三.猜你喜欢 零基础 C/C 学习路线推荐 : C/C 学习目录 >> C 语言基础入门 一.fprintf 函数简介 fprintf 是 C / C 中的一个格式化库函数,位于头文件 中,其作用是格式化输出到一个流文件中&#xff1…

【printf函数的具体用法】

一、printf()函数 1、基本输出语句 printf()函数是C语言的输出函数,功能是按指定的输出格式把相应的参数值在标准的输出设备中显示出来。 printf 的格式 printf(格式控制串,参数1,参数2,…),…

C语言printf函数详解

文章目录 1、类型符(type)2、宽度(width)3、对齐标志(flags)4、精度(prec)5、格式化输出到字符串6、版权声明 C语言格式化输出的函数有printf、sprintf和snprintf等,功能…

printf函数讲解

printf函数讲解 #include <stdio.h>/*辗转相除法求最大公约数*/ int gcd(int m, int n); int factrial(int a); int main(void){int m, n, t;scanf_s("%d %d", &m, &n);if (m < n){t m;m n;n t;}//n gcd(m, n);//printf("%d", n);pr…

C语言中fscanf和fprintf函数的使用

目录 一、前言 二、对比 1、scanf和fscanf&#xff1a; 2、printf和fprintf&#xff1a; 三、结论&#xff1a; 四、代码实现 1、fprintf相关代码 2、fscanf代码实现 3、 用fscanf和fprintf实现scanf和printf功能&#xff1a; 一、前言 在了解fscanf和fprintf之前我…

printf()函数详解

感谢博主的分享&#xff1a;https://me.csdn.net/blog/K346K346 1.printf()简介 printf()是C语言标准库函数&#xff0c;用于将格式化后的字符串输出到标准输出。标准输出&#xff0c;即标准输出文件&#xff0c;对应终端的屏幕。printf()申明于头文件stdio.h。 函数原型&am…

有关于fprintf()函数的用法

fprintf&#xff08;简介&#xff09; fprintf是C/C中的一个格式化库函数&#xff0c;位于头文件中&#xff0c;其作用是格式化输出到一个流文件中&#xff1b;函数原型为int fprintf( FILE *stream, const char *format, [ argument ]…)&#xff0c;fprintf()函数根据指定的格…