医疗花费预测——协方差矩阵和热力图
引言
在医疗数据分析中,预测个人的医疗花费是一个重要的课题。这不仅有助于个人健康管理,也为医疗资源的合理分配提供了数据支持。本篇博客,我们将探讨如何利用协方差矩阵和热力图来分析和预测个人的医疗花费。我们将以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版本变化导致的反序列化异常 背景 因为安全性的考虑,最近在梳理旧系统的系统依赖。改动依赖时候还好,毕竟只是换掉不再合作公司的旧依赖,没敢动别的太多东西。不过没多久,测试团队就找来了… 排查问题之第一次跑偏 旧系…...
XML Group端口详解
在XML数据映射过程中,经常需要对数据进行分组聚合操作。例如,当处理包含多个物料明细的XML文件时,可能需要将相同物料号的明细归为一组,或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码,增加了开…...
【kafka】Golang实现分布式Masscan任务调度系统
要求: 输出两个程序,一个命令行程序(命令行参数用flag)和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽,然后将消息推送到kafka里面。 服务端程序: 从kafka消费者接收…...
高防服务器能够抵御哪些网络攻击呢?
高防服务器作为一种有着高度防御能力的服务器,可以帮助网站应对分布式拒绝服务攻击,有效识别和清理一些恶意的网络流量,为用户提供安全且稳定的网络环境,那么,高防服务器一般都可以抵御哪些网络攻击呢?下面…...
企业如何增强终端安全?
在数字化转型加速的今天,企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机,到工厂里的物联网设备、智能传感器,这些终端构成了企业与外部世界连接的 “神经末梢”。然而,随着远程办公的常态化和设备接入的爆炸式…...
华硕a豆14 Air香氛版,美学与科技的馨香融合
在快节奏的现代生活中,我们渴望一个能激发创想、愉悦感官的工作与生活伙伴,它不仅是冰冷的科技工具,更能触动我们内心深处的细腻情感。正是在这样的期许下,华硕a豆14 Air香氛版翩然而至,它以一种前所未有的方式&#x…...
人机融合智能 | “人智交互”跨学科新领域
本文系统地提出基于“以人为中心AI(HCAI)”理念的人-人工智能交互(人智交互)这一跨学科新领域及框架,定义人智交互领域的理念、基本理论和关键问题、方法、开发流程和参与团队等,阐述提出人智交互新领域的意义。然后,提出人智交互研究的三种新范式取向以及它们的意义。最后,总结…...
腾讯云V3签名
想要接入腾讯云的Api,必然先按其文档计算出所要求的签名。 之前也调用过腾讯云的接口,但总是卡在签名这一步,最后放弃选择SDK,这次终于自己代码实现。 可能腾讯云翻新了接口文档,现在阅读起来,清晰了很多&…...
【JavaSE】多线程基础学习笔记
多线程基础 -线程相关概念 程序(Program) 是为完成特定任务、用某种语言编写的一组指令的集合简单的说:就是我们写的代码 进程 进程是指运行中的程序,比如我们使用QQ,就启动了一个进程,操作系统就会为该进程分配内存…...
【MATLAB代码】基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),附源代码|订阅专栏后可直接查看
文章所述的代码实现了基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),针对传感器观测数据中存在的脉冲型异常噪声问题,通过非线性加权机制提升滤波器的抗干扰能力。代码通过对比传统KF与MCC-KF在含异常值场景下的表现,验证了后者在状态估计鲁棒性方面的显著优…...
uniapp 实现腾讯云IM群文件上传下载功能
UniApp 集成腾讯云IM实现群文件上传下载功能全攻略 一、功能背景与技术选型 在团队协作场景中,群文件共享是核心需求之一。本文将介绍如何基于腾讯云IMCOS,在uniapp中实现: 群内文件上传/下载文件元数据管理下载进度追踪跨平台文件预览 二…...
