医疗花费预测——协方差矩阵和热力图
引言
在医疗数据分析中,预测个人的医疗花费是一个重要的课题。这不仅有助于个人健康管理,也为医疗资源的合理分配提供了数据支持。本篇博客,我们将探讨如何利用协方差矩阵和热力图来分析和预测个人的医疗花费。我们将以DataFountain提供的数据为基础,结合pandas库中的cov()方法和seaborn库的heatmap()函数,来实现这一目标。
一、协方差的定义
在统计学中,协方差(Covariance)是用来衡量两个随机变量之间的变动趋势是否一致的指标。协方差为正表示两个变量正向关系;协方差为负表示两个变量反向关系;协方差为0表示两个变量没有线性关系。
协方差可以通过以下公式计算:
其中,和
是两个随机变量,
和
是它们的观测值,
和
分别是
和
的均值,
是样本数量。
二、协方差矩阵的定义
协方差矩阵是一个的矩阵,其中
是变量的数量。协方差矩阵的第
个元素表示第
个变量和第
个变量之间的协方差。
假设我们有个一维随机变量
。如果我们将它们按列组成一个
的矩阵
(
是样本数量),则协方差矩阵CC的每个元素可以通过以下公式计算:
三、协方差矩阵的计算
协方差矩阵是描述数据集中各特征之间协方差关系的矩阵。在Python中,我们可以使用pandas库的cov()方法来计算协方差矩阵。以下是计算协方差矩阵的代码示例:
import pandas as pd
from sklearn.preprocessing import OrdinalEncoder# 读取数据
train = pd.read_csv('E:/H1/shujvfenxiyukeshihua/资料/第6章 医疗花费预测/train.csv')# 进行编码
encoder = OrdinalEncoder(dtype=int)
train[['sex', 'smoker', 'region']] = encoder.fit_transform(train[['sex', 'smoker', 'region']])# 查看协方差矩阵
cov_matrix = train.cov()
print(cov_matrix)
协方差矩阵输出如下:

从协方差矩阵中,我们可以看到不同特征之间的协方差值。例如,年龄(age)与BMI(bmi)的协方差为10.080775,这表明两者之间存在正相关关系。而吸烟者(smoker)与医疗花费(charges)的协方差为3773.101975,这是一个非常高的值,表明吸烟与医疗花费之间有很强的正相关性。
四、热力图
1.热力图的定义
热力图是一种通过颜色来展示数据的二维矩阵可视化方法。它将数据矩阵中的每个元素的值映射到一个颜色尺度上,颜色的深浅或色调表示数据值的大小。在协方差矩阵或相关性矩阵的可视化中,热力图尤其有用,因为它可以帮助我们直观地查看数据集中各个特征之间的关系。
2.热力图的绘制
在Python中,我们可以使用Seaborn库来绘制热力图。Seaborn的heatmap函数可以快速生成热力图,通过传入数据矩阵和颜色映射参数等,我们可以直观地展示协方差矩阵。
示例:
import pandas as pd
from sklearn.preprocessing import OrdinalEncoder
import numpy as np
import seaborn
train = pd.read_csv("D:/大三上/数据分析与可视化/实验文件/第6章 医疗花费预测/train.csv")
encoder = OrdinalEncoder(dtype=int)
train[['sex','smoker','region']]=\
encoder.fit_transform(train[['sex','smoker','region']])
seaborn.heatmap(train.corr())
代码解释:
导入必要的库,其中pandas 用于数据处理和分析;
OrdinalEncoder 用于将分类变量转换为整数编码;
numpy 用于数值计算;
seaborn 用于数据可视化。
对分类特征进行编码:
train[['sex','smoker','region']] = encoder.fit_transform(train[['sex','smoker','region']])
这行代码选择了sex(性别)、smoker(是否吸烟)和region(地区)这三个分类特征,使用OrdinalEncoder进行编码,并将编码后的结果替换原来的特征值。
seaborn.heatmap(train.corr())
这行代码计算了数据集中所有数值特征之间的相关性矩阵,使用seaborn库的heatmap函数绘制热力图。热图中的每个方块代表两个特征之间的相关性,颜色越接近1(或-1),表示两个特征之间的正(或负)相关性越强。
运行结果如下:

相关系数是对协方差的标准化,取值范围为 [-1, 1]。
• 1 表示完全正相关,-1 表示完全负相关,0 表示无线性关系。
• 相关系数的绝对值越接近 1,线性关系越强。此处 charges 和 bmi 的相关系数接近 0.3,说明有一定的正相关性,但不算强。
增强可读性:
在热图中,可以添加数值显示、调整颜色映射或设置标题等,使图表更直观。 annot=True:在每个单元格上显示相关系数的数值。 cmap='coolwarm':改变颜色映射,更容易区分正负相关。
fmt='.2f':指定小数点后两位显示。
import pandas as pd
from sklearn.preprocessing import OrdinalEncoder
import seaborn as sns
import matplotlib.pyplot as plt# 读取数据
train = pd.read_csv('E:/H1/shujvfenxiyukeshihua/资料/第6章 医疗花费预测/train.csv')# 进行编码
encoder = OrdinalEncoder(dtype=int)
train[['sex', 'smoker', 'region']] = encoder.fit_transform(train[['sex', 'smoker', 'region']])# 计算相关性矩阵
corr_matrix = train.corr()# 使用 seaborn 生成热力图,并指定不同的颜色映射
plt.figure(figsize=(10, 8)) # 可以调整图的大小cmap = 'viridis' # 黄绿色到深紫色sns.heatmap(corr_matrix, cmap=cmap, annot=True, fmt='.2f', square=True, cbar_kws={"shrink": .5})# 显示图形
plt.show()
运行结果:

seaborn 提供了多个内置的配色方案(cmap),常用的包括:coolwarm:适合表示正负相关,蓝色表示负相关,黄色表示正相关,过渡色为蓝色或绿色。由上图可以得出,吸烟与医疗消费的相关性最大。
3.分析
如果两个特征之间的相关系数接近 1 或 -1(如相关系数 > 0.9 或 < -0.9),这意味着这两个特征之间存在多重共线性。这种情况下,模型可能难以确定它们对目标变量的独立影响,因为它们包含了相似的信息。解决方法如下:去除冗余特征:热力图中高相关的特征对,可以考虑去除其中一个特征,或者用降维技术(如PCA)来处理。
使用相关性较低的特征:我们可以优先选择那些与其他特征相关性较低的特征,它们可以提供更多独立的信息,避免冗余和多重共线性。例如,region 与其他特征的相关系数较低,它可能是一个较为独立的特征,可以保留。
相关文章:
医疗花费预测——协方差矩阵和热力图
引言 在医疗数据分析中,预测个人的医疗花费是一个重要的课题。这不仅有助于个人健康管理,也为医疗资源的合理分配提供了数据支持。本篇博客,我们将探讨如何利用协方差矩阵和热力图来分析和预测个人的医疗花费。我们将以DataFountain提供的数…...
react antd tabs router 基础管理后台模版
在构建 React 后台管理系统时,使用标签页的方式展示路由是一种高效且用户友好的设计模式。这种实现方式通常允许用户在多个页面之间快速切换,并保留页面的状态,类似于浏览器的多标签页功能。 需求分析 1.动态标签页:根据用户的导…...
【数据结构——栈与队列】环形队列的基本运算(头歌实践教学平台习题)【合集】
目录😋 任务描述 相关知识 测试说明 我的通关代码: 测试结果: 任务描述 本关任务:编写一个程序实现环形队列的基本运算。 相关知识 为了完成本关任务,你需要掌握: 初始化队列、销毁队列、判断队列是否为空、进队列…...
【数据结构——栈与队列】链栈的基本运算(头歌实践教学平台习题)【合集】
目录😋 任务描述 相关知识 测试说明 我的通关代码: 测试结果: 任务描述 本关任务:编写一个程序实现链栈的基本运算。 相关知识 为了完成本关任务,你需要掌握: 初始化栈、销毁栈、判断栈是否为空、进栈、出栈、取栈…...
GIT CLONE ERROR: remote: [session-ec426a86] Access denied
报错信息: remote: [session-ec426a86] Access denied 错误原因: 1.更换了不同的GIT仓或者账号 2.之前设置了默认账号密码信息 3. git init 只初始化了GIT项目,并没有清空原有的账号密码配置 处理方法: win11需要到个人文件…...
GitHub 正式收录 MoonBit 作为一门通用编程语言!核心用户突破三万!
MoonBit 编程语言正式被 Github 收录!这对于一个仅有两年发展时间的编程语言来说是一种高度认可,期待未来由 MoonBit 编写的项目数量快速增长,早日成为首个由国人研发迈进 10 万➕ 用户的编程语言。 最近用户数已经接近 3 万(数据…...
PHP中GD库的使用
由于我要用到php的验证码 <?php session_start();// 生成验证码 $random_code substr(md5(uniqid(mt_rand(), true)), 0, 6);// 将验证码保存到 session 中 $_SESSION[captcha] $random_code;// 创建图片 $font 6; $image_width 100; $image_height 40;// 创建图像 $…...
docker安装Elasticsearch和Kibana
上传文件 加载tar包 安装 1.安装elasticsearch 通过下面的Docker命令即可安装单机版本的elasticsearch: docker run -d \--name es \-e "ES_JAVA_OPTS-Xms512m -Xmx512m" \-e "discovery.typesingle-node" \-v es-data:/usr/share/elastics…...
【Linux】文件管理必备知识和基本指令
【Linux】文件管理必备知识和基本指令 什么是操作系统什么是文件什么是路径01. ls 指令02. pwd命令03. cd 指令04. touch指令05.mkdir指令(重要):06.rmdir指令 && rm 指令(重要):rmdir指令rm指令 0…...
欢迪迈手机商城设计与实现
文末获取源码和万字论文,制作不易,感谢点赞支持。 题目:欢迪迈手机商城设计与实现 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管…...
量化交易系统开发-实时行情自动化交易-3.4.2.3.数字货币市场深度数据
19年创业做过一年的量化交易但没有成功,作为交易系统的开发人员积累了一些经验,最近想重新研究交易系统,一边整理一边写出来一些思考供大家参考,也希望跟做量化的朋友有更多的交流和合作。 接下来聊聊基于Okex交易所API获取市场深…...
有序集合ZSET【Redis对象篇】
🏆 作者简介:席万里 ⚡ 个人网站:https://dahua.bloggo.chat/ ✍️ 一名后端开发小趴菜,同时略懂Vue与React前端技术,也了解一点微信小程序开发。 🍻 对计算机充满兴趣,愿意并且希望学习更多的技…...
力扣-图论-9【算法学习day.59】
前言 ###我做这类文章一个重要的目的还是给正在学习的大家提供方向和记录学习过程(例如想要掌握基础用法,该刷哪些题?)我的解析也不会做的非常详细,只会提供思路和一些关键点,力扣上的大佬们的题解质量是非…...
如何选择安全、可验证的技术?
澳大利亚信号局的澳大利亚网络安全中心 (ASD 的 ACSC) 发布了一份指导文件,题为《选择安全和可验证的技术》,旨在帮助组织在采购软件(专有或开源)、硬件(例如物联网设备)和云服务(SaaS、MSP 服务…...
Allure在自动化测试中的应用
01 Allure的简介及使用 1、应用场景 自动化的结果一定是通过一个报告来进行体现 Allure 是一个独立的报告插件,生成美观易读的报告,目前支持Python、Java、PHP、C#等语言 为dev/QA 提供详尽的测试报告、测试步骤、日志,也可以为管理层提供统…...
C# 探险之旅:第十一节 - 循环(foreach):一场“遍历”奇幻岛的大冒险!
嘿,勇敢的探险家们!欢迎来到C#奇幻岛的第十一站——“遍历”奇幻岛!今天,我们要乘坐一艘叫做foreach的魔法船,去遍历(也就是一个一个看过来)岛上那些神秘的宝藏箱!准备好了吗&#x…...
Ubuntu24.04配置STMTrack
项目地址:https://github.com/fzh0917/STMTrack 一、安装 CUDA 参考链接: Ubuntu24.04配置DINO-Tracker Ubuntu多CUDA版本安装及切换 由于之前在其他项目中已经安装了 CUDA12.1,这次需要安装另一个版本。 1. 查看安装版本 按照 requireme…...
【Java学习笔记】Map接口和常用方法
一、 Map接口实现类的 特点[很实用] key是自己存的java对象 value是一个固定的 //当有相同的 k ,就等价于替换. 二、 Map常用方法 (根据键–>k) 三、Map接口遍历方法 package com.hspedu.map_; import java.util.*; /** * author 韩顺平 * ver…...
uniapp支持App横竖屏开发总结
一、需求: app要支持重力感应自动切换横竖屏,并切换后样式不能错乱 二、实现 官方文档 官方Git manifest.json文件中 "app-plus" : {"screenOrientation" : ["portrait-primary","portrait-secondary","…...
【工作笔记】Lombok版本变化导致的反序列化异常
Lombok版本变化导致的反序列化异常 背景 因为安全性的考虑,最近在梳理旧系统的系统依赖。改动依赖时候还好,毕竟只是换掉不再合作公司的旧依赖,没敢动别的太多东西。不过没多久,测试团队就找来了… 排查问题之第一次跑偏 旧系…...
测试微信模版消息推送
进入“开发接口管理”--“公众平台测试账号”,无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息: 关注测试号:扫二维码关注测试号。 发送模版消息: import requests da…...
SciencePlots——绘制论文中的图片
文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了:一行…...
CentOS下的分布式内存计算Spark环境部署
一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架,相比 MapReduce 具有以下核心优势: 内存计算:数据可常驻内存,迭代计算性能提升 10-100 倍(文档段落:3-79…...
鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/
使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题:docker pull 失败 网络不同,需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...
【笔记】WSL 中 Rust 安装与测试完整记录
#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统:Ubuntu 24.04 LTS (WSL2)架构:x86_64 (GNU/Linux)Rust 版本:rustc 1.87.0 (2025-05-09)Cargo 版本:cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...
Python Einops库:深度学习中的张量操作革命
Einops(爱因斯坦操作库)就像给张量操作戴上了一副"语义眼镜"——让你用人类能理解的方式告诉计算机如何操作多维数组。这个基于爱因斯坦求和约定的库,用类似自然语言的表达式替代了晦涩的API调用,彻底改变了深度学习工程…...
解析奥地利 XARION激光超声检测系统:无膜光学麦克风 + 无耦合剂的技术协同优势及多元应用
在工业制造领域,无损检测(NDT)的精度与效率直接影响产品质量与生产安全。奥地利 XARION开发的激光超声精密检测系统,以非接触式光学麦克风技术为核心,打破传统检测瓶颈,为半导体、航空航天、汽车制造等行业提供了高灵敏…...
LLaMA-Factory 微调 Qwen2-VL 进行人脸情感识别(二)
在上一篇文章中,我们详细介绍了如何使用LLaMA-Factory框架对Qwen2-VL大模型进行微调,以实现人脸情感识别的功能。本篇文章将聚焦于微调完成后,如何调用这个模型进行人脸情感识别的具体代码实现,包括详细的步骤和注释。 模型调用步骤 环境准备:确保安装了必要的Python库。…...
简单介绍C++中 string与wstring
在C中,string和wstring是两种用于处理不同字符编码的字符串类型,分别基于char和wchar_t字符类型。以下是它们的详细说明和对比: 1. 基础定义 string 类型:std::string 字符类型:char(通常为8位)…...
初探用uniapp写微信小程序遇到的问题及解决(vue3+ts)
零、关于开发思路 (一)拿到工作任务,先理清楚需求 1.逻辑部分 不放过原型里说的每一句话,有疑惑的部分该问产品/测试/之前的开发就问 2.页面部分(含国际化) 整体看过需要开发页面的原型后,分类一下哪些组件/样式可以复用,直接提取出来使用 (时间充分的前提下,不…...
