【视频讲解】非参数重采样bootstrap的逻辑回归Logistic应用及模型差异Python实现

news2024/9/24 21:45:05

全文链接:https://tecdat.cn/?p=37759

原文出处:拓端数据部落公众号 

 分析师:Anting Li    

 

本文将深入探讨逻辑回归在心脏病预测中的应用与优化。通过对加州大学欧文分校提供的心脏病数据集进行分析,我们将揭示逻辑回归模型的原理、实现过程以及其在实际应用中的优势和不足。同时,我们还将介绍多种优化方法,如牛顿迭代、随机梯度下降和贝叶斯逻辑回归等,以提高模型的性能和准确性。

此外,本文还将结合代码和数据探讨非参数化的自助重采样方法在逻辑回归中的应用及模型差异分析。通过对不同计算逻辑回归参数抽样分布方法的比较,我们将深入了解这些方法的假设和适用场景,为实际应用中选择合适的方法提供参考。

 逻辑回归在心脏病预测中的应用与优化

本视频教程聚焦于逻辑回归这一广泛应用的分析模型,旨在处理因变量二元分类问题。逻辑回归在传统线性回归基础上引入 sigmoid 函数,通过假设数据服从特定分布并运用极大似然估计进行参数估计。在众多领域如金融、医学、市场营销和网络安全中,逻辑回归都有着重要应用。以加州大学欧文分校提供的心脏病数据集为例,该数据集包含 303 个样本,涵盖 14 个不同特征指标。经过数据清洗,包括处理缺失值和异常值后得到 297 条可用数据,并进行标准化处理。将数据按前 70% 作为训练集、后 30% 作为测试集,选取相关系数最高的两个连续型自变量,即指标 thalach 和 oldpeak,对心脏病发病情况二分类变量 target 建立逻辑回归模型进行分析与预测。模型结果显示自变量均显著,AUC 值为 0.79,表明模型拟合良好。此外,对模型进行了优化,采用牛顿迭代、随机梯度下降和贝叶斯逻辑回归等方法,获得新的参数、准确性及迭代次数。最后对逻辑回归模型进行评价,该模型具有简单高效、可解释性强、对特征依赖性较小等优点,但也存在容易受异常值影响、无法处理复杂关系以及容易出现过拟合等不足。

关键词:逻辑回归;心脏病预测;数据清洗;模型优化;模型评价

一、引言

逻辑回归作为一种经典的统计学习方法,在二元分类问题中发挥着重要作用。本文以心脏病数据集为研究对象,深入探讨逻辑回归模型的原理、实现过程、优化策略以及评价指标。

二、逻辑回归模型原理

(一)模型主体
逻辑回归假定观测的 y 服从伯努利分布,通过将线性回归的结果输入 sigmoid 函数,将输出值映射到 0 到 1 之间,代表事件发生的概率。即 logit (P (Y = 1)) = β₀ + β₁X₁ + …… + βₖXₖ,其中 P = g (β₀ + β₁X₁ +... + βₖXₖ),g (X) = 1 / (1 + e⁻ˣ)。

(二)对数似然函数
逻辑回归的对数似然函数为 L = log [∏₁ᵢ₌₁ⁿ pᵢʸⁱ(1 - pᵢ)¹⁻ʸⁱ] = ∑₁ᵢ₌₁ⁿ[yᵢlog (pᵢ) + (1 - yᵢ) log (1 - pᵢ)] = ∑₁ᵢ₌₁ⁿ[yᵢβₜXᵢ - log (1 + e⁽ᵦₜˣᵢ⁾)],通过最大化这个对数似然函数来估计模型参数。

三、模型实现

(一)数据集介绍
选用的心脏病数据集由加州大学欧文分校(UCI)提供,是一个开放性的数据集,包含 303 个样本,每个样本具有 14 个不同的特征指标,如年龄、性别、胸痛类型、血压、最高心率、ST 段抬高等。

(二)数据清洗

  1. 对数据进行缺失值和异常值处理,得到 297 条可用数据。
  2. 进行标准化处理,消除不同特征之间的量纲差异。
  3. 将处理后的数据划分为训练集(前 70%)和测试集(后 30%)。

(三)模型建立
选择相关系数最高的两个连续型自变量 thalach 和 oldpeak,针对心脏病发病情况二分类变量 target 构建逻辑回归模型进行分析和预测。使用 R 语言的 glm 函数,令 link = "logit"。

四、模型结果

  1. thalach 和 oldpeak 在连续型变量中的相关系数最高,均大于 0.4。
  2. 模型中的自变量均显著。
  3. 模型的 AUC 值为 0.79,显示出良好的拟合效果。

五、模型优化

为提升模型性能,采用了以下优化方法:

(一)牛顿迭代
得到新的参数 Beta₀ₑ、Beta₁ₑ、Beta₂ₑ,准确性为 0.719101123595506,迭代次数为 5 次。

(二)随机梯度下降
得到新的参数 Beta₀ₑ、Beta₁ₑ、Beta₂ₑ,准确性为 0.6966292134831462,迭代次数为 173 次。

(三)贝叶斯逻辑回归
得到新的参数 Beta₀ₑ、Beta₁ₑ、Beta₂ₑ,准确性为 0.7356010452689,迭代次数为 693 次;以及新的参数 Beta₀ₑ、Beta₁ₑ、Beta₂ₑ,准确性为 0.7963,迭代次数为 1000 次。

六、模型评价

(一)优点

  1. 简单高效,适用于处理二元分类问题。
  2. 可解释性强,模型参数具有明确的实际意义。
  3. 对特征依赖性较小,在特征较少的情况下仍能进行有效预测。

(二)缺点

  1. 容易受到异常值影响,可能导致参数估计偏差较大。
  2. 无法处理复杂的非线性关系。
  3. 容易出现过拟合,尤其是在数据量较小或特征较多时。

七、结论

本文深入研究了逻辑回归模型在心脏病预测中的应用。通过对 UCI 心脏病数据集的分析,阐述了逻辑回归的原理、实现方法、优化策略和评价指标。尽管该模型存在一些不足,但在二元分类问题上仍具有一定优势。未来可进一步探索更有效的优化方法,提高模型的性能和泛化能力。

 非参数化的自助重采样方法在Logistic回归应用及模型差异分析|附数据代码

 本文探讨了计算逻辑回归参数抽样分布的不同方法,包括非参数化的自助重采样方法、参数化的自助方法以及一种混合模式。通过对这些方法的实施和分析,揭示了它们基于不同的建模假设,产生不同的结果。同时指出,在实际应用中,应根据差异的重要性选择最适合的方法,而不是认为某种方法是唯一正确的。

关键词:重采样;逻辑回归;参数化自助法;非参数化自助法

一、引言

计算抽样分布的不同方法会产生不同结果,但在实践中差异通常较小,我们可以选择方便的方法。本文由 Reddit 上的一个问题引发,探讨了逻辑回归的参数化引导问题中随机误差项的确定,并介绍了两种计算逻辑回归参数抽样分布的方法。本文将实施这些方法并解释其假设,提出混合方法,并给出选择方法的标准。

二、数据来源与处理

(一)数据来源
本文使用来自一般社会调查(GSS)的数据,存储库下载包含已重新采样的 GSS 数据子集的 HDF 文件。

(二)数据处理

  1. 导入所需的库,设置随机种子,下载数据文件并读取数据。

 

  1. 选取特定问题的数据,并对因变量进行重新编码。使用 GSS 中的一个关于大麻合法化的问题数据,将因变量中表示 “不应该合法化” 的值2替换为0

gss['GRASS'].value_counts()
gss['GRASS'].replace(2, 0, inplace=True)

  1. 为了对二次关系进行建模,添加包含AGEEDUC平方值的列,并删除有缺失值的行。

gss['AGE2'] = gss['AGE']**2
gss['EDUC2'] = gss['EDUC']**2
data = gss.dropna(subset=['AGE', 'EDUC', 'SEX', 'GUNLAW', 'GRASS'])

三、逻辑回归结果

使用 StatsModels 进行逻辑回归,得到回归结果。绘制男性和女性受访者支持大麻合法化的预测概率随年龄变化的曲线。

import statsmodels.formula.api as smf

formula = 'GRASS ~ AGE + AGE2 + EDUC + EDUC2 + C(SEX)'
result_hat = smf.logit(formula, data=data).fit()
result_hat.summary()

df = pd.DataFrame()
df['AGE'] = np.linspace(18, 89)
df['EDUC'] = 16

df['AGE2'] = df['AGE']**2
df['EDUC2'] = df['EDUC']**2

df['SEX'] = 1
pred1 = result_hat.predict(df)
pred1.index = df['AGE']

df['SEX'] = 2
pred2 = result_hat.predict(df)
pred2.index = df['AGE']

pred1.plot(label='Male', alpha=0.6)
pred2.plot(label='Female', alpha=0.6)

plt.xlabel('Age')
plt.ylabel('Fraction')
plt.title('Support for legal marijuana')
plt.legend();

结果显示男性比女性更有可能支持合法化,年轻人比老年人更有可能支持合法化。 

_images/8af7ba77a6fecc56242c59571f76b10610be119782c36852342161d96d058489.png

四、非参数化自助重采样方法

(一)方法描述
基于自助重采样,对data的行进行有放回抽样,并对重新采样的数据运行回归模型。

options = dict(disp=False, start_params=result_hat.params) 

def bootstrap(i):
    bootstrapped = data.sample(n=len(data), replace=True)
    results = smf.logit(formula, data=bootstrapped).fit(**options)
    return results.params

(二)结果分析
通过多次运行该过程,从抽样分布中生成样本。分析其中一个参数的抽样分布,发现抽样分布的平均值接近使用原始数据集估计的参数,标准差接近 StatsModels 计算的标准误差。

estimates = pqdm(range(101), bootstrap, n_jobs=4)
sampling_dist = pd.DataFrame(estimates)

ci90 = sampling_dist['C(SEX)[T.2]'].quantile([0.05, 0.95])
sns.kdeplot(sampling_dist['C(SEX)[T.2]'])
[plt.axvline(x, ls=':') for x in ci90]
plt.title('Sampling distribution of a parameter');

pd.DataFrame({"Sampling mean": sampling_dist.mean(), 
              "Estimates": result_hat.params})

def standard_errors(sampling_dist, result_hat):
    df = pd.DataFrame({"Sampling std": sampling_dist.std(), 
                       "Standard error": result_hat.bse})
    num, den = df.values.T
    df['Percent diff'] = (num / den - 1) * 100
    return df
standard_errors(sampling_dist, result_hat)

 

五、参数化自助方法

(一)方法描述
假设从原始数据中估计的参数是正确的,使用回归模型计算每个受访者的预测概率,然后用这些概率为每个受访者生成有偏差的抛硬币,将模拟值作为因变量运行回归模型。

pi_hat = result_hat.predict(data)

from scipy.stats import bernoulli

simulated = bernoulli.rvs(pi_hat.values)

def bootstrap2(i):
    flipped = data.assign(GRASS=bernoulli.rvs(pi_hat.values))
    results = smf.logit(formula, data=flipped).fit(**options)
    return results.params

(二)结果分析
多次运行该方法得到抽样分布样本,分析参数的抽样分布,其标准差也接近标准误差。

estimates = pqdm(range(101), bootstrap2, n_jobs=4)
sampling_dist2 = pd.DataFrame(estimates)

ci90 = sampling_dist2['C(SEX)[T.2]'].quantile([0.05, 0.95])
sns.kdeplot(sampling_dist2['C(SEX)[T.2]'])
[plt.axvline(x, ls=':') for x in ci90]
plt.title('Sampling distribution of a parameter');

standard_errors(sampling_dist2, result_hat)

_images/6d2d63591b6f8d7fba892d3046dd8e05dfae969148bcd6582c6dda3b1d640f63.png

六、混合模式方法

(一)方法描述
结合非参数化和参数化方法,先使用自助抽样模拟调查不同的人,再用参数化方法模拟他们的响应。

def bootstrap3(i):
    bootstrapped = data.sample(n=len(data), replace=True)
    pi_hat = result_hat.predict(bootstrapped)
    flipped = bootstrapped.assign(GRASS=bernoulli.rvs(pi_hat.values))
    results = smf.logit(formula, data=flipped).fit(**options)
    return results.params

(二)结果分析
得到抽样分布样本,分析参数的抽样分布,标准误差与 StatsModels 计算的误差相当。

estimates = pqdm(range(101), bootstrap3, n_jobs=4)
sampling_dist3 = pd.DataFrame(estimates)

ci90 = sampling_dist3['C(SEX)[T.2]'].quantile([0.05, 0.95])
sns.kdeplot(sampling_dist3['C(SEX)[T.2]'])
[plt.axvline(x, ls=':') for x in ci90]
plt.title('Sampling distribution of a parameter');

standard_errors(sampling_dist3, result_hat)

_images/e6bfebad2650d98b14925a221054e626a55a3466f53a26238638cf4c9a022f3a.png

 

七、讨论与结论

(一)不同方法的比较
本文介绍了三种计算抽样分布的方法,它们基于不同的抽样过程模型,产生不同的结果。在某些情况下,不同方法可能渐近收敛于相同结果,但对于有限数据集通常不同。
(二)选择方法的标准
如果差异较小,在实践中可能无关紧要,可以选择最容易实现、计算最快或方便的方法。不能认为分析方法的结果是唯一正确的,它们也基于建模假设和近似值。

综上所述,在实际应用中应根据具体情况选择合适的方法来计算逻辑回归参数的抽样分布。

关于分析师 

 

在此对 Anting Li 对本文所作的贡献表示诚挚感谢,她在中央财经大学完成了应用统计学专业的硕士学位,专注统计学领域。擅长 R 语言、Python、Matlab。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2161531.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

思维可视化:2024年四大创新思维导图软件排行榜!

在快节奏的现代生活中,如何提高工作效率、整理繁杂信息成为许多人关注的焦点。思维导图作为一种高效的信息梳理工具,越来越受到职场人士的喜爱。今天,就为大家推荐几款优秀的思维导图软件,助您轻松应对各种工作场景。 福昕思维导…

《程序猿之设计模式实战 · 适配器模式》

📢 大家好,我是 【战神刘玉栋】,有10多年的研发经验,致力于前后端技术栈的知识沉淀和传播。 💗 🌻 CSDN入驻不久,希望大家多多支持,后续会继续提升文章质量,绝不滥竽充数…

C++(学习)2024.9.24

目录 容器 1.标准模板库STL 2.概念 3.顺序容器 (1)array数组 (2)vector向量 (3)list列表 (4)deque 队列 4.关联容器 5.迭代器 面向对象核心 继承 概念 构造函数 1.派生…

软件需求规格说明书编制模板参考(Doc原件)

1 范围 1.1 系统概述 1.2 文档概述 1.3 术语及缩略语 2 引用文档 3 需求 3.1 要求的状态和方式 3.2 系统能力需求 3.3 系统外部接口需求 3.3.1 管理接口 3.3.2 业务接口 3.4 系统内部接口需求 3.5 系统内部数据需求 3.6 适应性需求 3.7 安全性需求 3.8 保密性需…

项目实战总结-Kafka实战应用核心要点

Kafka实战应用核心要点 一、前言二、Kafka避免重复消费2.1 消费者组机制2.2 幂等生产者2.3 事务性生产者/消费者2.4 手动提交偏移量2.5 外部存储管理偏移量2.6 去重逻辑2.7 幂等消息处理逻辑2.8 小结 三、Kafka持久化策略3.1 持久化文件3.2 segment 分段策略3.3 数据文件刷盘策…

Leetcode面试经典150题-39.组合总和

给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 ,并以列表形式返回。你可以按 任意顺序 返回这些组合。 candidates 中的 同一个 数字可以 无限制重复被选取 。如…

加固与脱壳01 - 环境搭建

虚拟机 VMWare 多平台可用,而且可以直接激活,需要先注册一个账号 https://support.broadcom.com/group/ecx/productdownloads?subfamilyVMwareWorkstationPro KALI 类Ubuntu系统,官方提供了 vmware 版本,直接下载就可以使用。…

【Python机器学习】NLP信息提取——提取人物/事物关系

目录 词性标注 实体名称标准化 实体关系标准化和提取 单词模式 文本分割 断句 断句的方式 使用正则表达式进行断句 词性标注 词性(POS)标注可以使用语言模型来完成,这个语言模型包含词及其所有可能词性组成的字典。然后,该…

三子棋小游戏

使用C语言编写代码,实现一个简单小游戏---三子棋 这里创建1个game.h文件,用来声明函数、宏的文件,一个game.c文件用来实现函数game(),一个play.h文件用来作为该游戏的源文件。 具体代码如下: …

利用大型语言模型轻松打造浪漫时刻

当情人节年年如约而至,每每都需费尽心思为对方营造一场令人难忘的仪式,却因缺乏创意与思路而倍感困扰。今天,我决定让大型语言模型为我们提供一些灵感和建议,让我们能够轻松实现这一目标。让我们开始行动吧!此前&#…

问卷是否要做信效度分析,5类信度与4类效度常用指标及评价标准

论文问卷进行分析时,大家是否有这样的疑惑—— 我收集的问卷是否需要进行信效度分析呢? 下面一文给大家梳理问卷信效度分析的相关内容,包括什么样的题目需要进行信效度分析、5类信度分析与4类效度分析常用指标及评价标准。 一、问卷是否需…

JW01二氧化碳传感器(串行通信 STM32)

目录 一、介绍 二、传感器原理 1.工作原理介绍 2.串口数据流格式 三、程序设计 main.c文件 usart3.h文件 usart3.c文件 四、实验效果 五、资料获取 项目分享 一、介绍 JW01-CO2检测模块是一种用于检测空气中二氧化碳浓度的传感器模块。它可以广泛应用于室内空气质量…

java算法OJ(1)位运算

目录 1.前言 2.正文 2.1位运算符号 2.1俩数相除 2.1.1题目 2.1.2示例 2.1.3题解 2.2二进制求和 2.2.1题目 2.2.2示例 2.2.3题解 2.3只出现一次的数字 2.3.1题目 2.3.2示例 2.3.3题解 2.4只出现一次的数字(进阶版) 2.4.1题目 2.4.2示例…

glb数据格式

glb数据格式 glb 文件格式只包含一个glb 文件,文件按照二进制存储,占空间小 浏览 浏览glb工具的很多,ccs,3D查看器等都可以,不安装软件的话用下面网页加载就可以,免费 glTF Viewer (donmccurdy.com) glb…

uniapp小程序中通过uni.setClipboardData实现复制功能无效的原因和解决方案

// 复制下载链接const shareFile (filePath) > {const pdfUrl 复制内容uni.showModal({title: 下载提示,content: 请复制链接到浏览器中下载,confirmColor: #eb2444,confirmText: 复制链接,success(res) {if (res.confirm) {uni.setClipboardData({data: pdfUrl, // url地…

C++: unordered系列关联式容器

目录 1. unordered系列关联式容器1.1 unordered_map1.2 unordered_set 2. 哈希概念3. 哈希冲突4. 闭散列5. 开散列 博客主页: 酷酷学 感谢关注!!! 正文开始 1. unordered系列关联式容器 在C98中,STL提供了底层为红黑树结构的一系列关联式容器,在查询时…

【笔记】自动驾驶预测与决策规划_Part4_时空联合规划

文章目录 0. 前言1. 时空联合规划的基本概念1.1 时空分离方法1.2 时空联合方法 2.基于搜索的时空联合规划 (Hybrid A* )2.1 基于Hybrid A* 的时空联合规划建模2.2 构建三维时空联合地图2.3 基于Hybrid A*的时空节点扩展2.4 Hybrid A* :时空节…

多线程——“死锁”

目录 前言 一、一个线程,一把锁 1.问题介绍 2.可重入锁 二、两个线程,两把锁 1.问题介绍 2.解决方式 三、N个线程,M把锁 1.哲学家就餐问题 2.解决方式 结尾 前言 “死锁”是多线程代码中一类常见的问题,加锁是能解决线…

plt的简单使用

目录 介绍示例 介绍 plt 是 Python 中 Matplotlib 库的一个常用别名,它表示 pyplot,这是一个用于创建图形和图形的可视化表示的工具。下面是一些 plt 函数的详解和示例,以帮助大家理解和使用。 示例 示例1: import matplotlib…

AV1 Bitstream Decoding Process Specification--[9]:语法结构语义-5

原文地址:https://aomediacodec.github.io/av1-spec/av1-spec.pdf 没有梯子的下载地址:AV1 Bitstream & Decoding Process Specification摘要:这份文档定义了开放媒体联盟(Alliance for Open Media)AV1视频编解码…