当前位置: 首页 > news >正文

医疗花费预测——协方差矩阵和热力图

引言

在医疗数据分析中,预测个人的医疗花费是一个重要的课题。这不仅有助于个人健康管理,也为医疗资源的合理分配提供了数据支持。本篇博客,我们将探讨如何利用协方差矩阵和热力图来分析和预测个人的医疗花费。我们将以DataFountain提供的数据为基础,结合pandas库中的cov()方法和seaborn库的heatmap()函数,来实现这一目标。


一、协方差的定义

在统计学中,协方差(Covariance)是用来衡量两个随机变量之间的变动趋势是否一致的指标。协方差为正表示两个变量正向关系;协方差为负表示两个变量反向关系;协方差为0表示两个变量没有线性关系。

协方差可以通过以下公式计算:

cov(X,Y)=\frac{\sum (x_{i}-\bar{x})(y_{i}-\bar{y})}{n}

其中,XY是两个随机变量,x_{i}y_{i}是它们的观测值,\bar{x}\bar{y}​分别是XY的均值,n是样本数量。


二、协方差矩阵的定义

协方差矩阵是一个n\times n的矩阵,其中n是变量的数量。协方差矩阵的第(i,j)个元素表示第i个变量和第j个变量之间的协方差。

假设我们有n个一维随机变量X_{1},X_{2},...,X_{n}​。如果我们将它们按列组成一个n\times m的矩阵Xm是样本数量),则协方差矩阵CC的每个元素可以通过以下公式计算:

C_{i,j}=cov(X_{i},X_{J})


三、协方差矩阵的计算

协方差矩阵是描述数据集中各特征之间协方差关系的矩阵。在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 与其他特征的相关系数较低,它可能是一个较为独立的特征,可以保留。

相关文章:

医疗花费预测——协方差矩阵和热力图

引言 在医疗数据分析中&#xff0c;预测个人的医疗花费是一个重要的课题。这不仅有助于个人健康管理&#xff0c;也为医疗资源的合理分配提供了数据支持。本篇博客&#xff0c;我们将探讨如何利用协方差矩阵和热力图来分析和预测个人的医疗花费。我们将以DataFountain提供的数…...

react antd tabs router 基础管理后台模版

在构建 React 后台管理系统时&#xff0c;使用标签页的方式展示路由是一种高效且用户友好的设计模式。这种实现方式通常允许用户在多个页面之间快速切换&#xff0c;并保留页面的状态&#xff0c;类似于浏览器的多标签页功能。 需求分析 1.动态标签页&#xff1a;根据用户的导…...

【数据结构——栈与队列】环形队列的基本运算(头歌实践教学平台习题)【合集】

目录&#x1f60b; 任务描述 相关知识 测试说明 我的通关代码: 测试结果&#xff1a; 任务描述 本关任务&#xff1a;编写一个程序实现环形队列的基本运算。 相关知识 为了完成本关任务&#xff0c;你需要掌握&#xff1a; 初始化队列、销毁队列、判断队列是否为空、进队列…...

【数据结构——栈与队列】链栈的基本运算(头歌实践教学平台习题)【合集】

目录&#x1f60b; 任务描述 相关知识 测试说明 我的通关代码: 测试结果&#xff1a; 任务描述 本关任务&#xff1a;编写一个程序实现链栈的基本运算。 相关知识 为了完成本关任务&#xff0c;你需要掌握&#xff1a; 初始化栈、销毁栈、判断栈是否为空、进栈、出栈、取栈…...

GIT CLONE ERROR: remote: [session-ec426a86] Access denied

报错信息&#xff1a; remote: [session-ec426a86] Access denied 错误原因&#xff1a; 1.更换了不同的GIT仓或者账号 2.之前设置了默认账号密码信息 3. git init 只初始化了GIT项目&#xff0c;并没有清空原有的账号密码配置 处理方法&#xff1a; win11需要到个人文件…...

GitHub 正式收录 MoonBit 作为一门通用编程语言!核心用户突破三万!

MoonBit 编程语言正式被 Github 收录&#xff01;这对于一个仅有两年发展时间的编程语言来说是一种高度认可&#xff0c;期待未来由 MoonBit 编写的项目数量快速增长&#xff0c;早日成为首个由国人研发迈进 10 万➕ 用户的编程语言。 最近用户数已经接近 3 万&#xff08;数据…...

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&#xff1a; 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指令&#xff08;重要&#xff09;&#xff1a;06.rmdir指令 && rm 指令&#xff08;重要&#xff09;&#xff1a;rmdir指令rm指令 0…...

欢迪迈手机商城设计与实现

文末获取源码和万字论文&#xff0c;制作不易&#xff0c;感谢点赞支持。 题目&#xff1a;欢迪迈手机商城设计与实现 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管…...

量化交易系统开发-实时行情自动化交易-3.4.2.3.数字货币市场深度数据

19年创业做过一年的量化交易但没有成功&#xff0c;作为交易系统的开发人员积累了一些经验&#xff0c;最近想重新研究交易系统&#xff0c;一边整理一边写出来一些思考供大家参考&#xff0c;也希望跟做量化的朋友有更多的交流和合作。 接下来聊聊基于Okex交易所API获取市场深…...

有序集合ZSET【Redis对象篇】

&#x1f3c6; 作者简介&#xff1a;席万里 ⚡ 个人网站&#xff1a;https://dahua.bloggo.chat/ ✍️ 一名后端开发小趴菜&#xff0c;同时略懂Vue与React前端技术&#xff0c;也了解一点微信小程序开发。 &#x1f37b; 对计算机充满兴趣&#xff0c;愿意并且希望学习更多的技…...

力扣-图论-9【算法学习day.59】

前言 ###我做这类文章一个重要的目的还是给正在学习的大家提供方向和记录学习过程&#xff08;例如想要掌握基础用法&#xff0c;该刷哪些题&#xff1f;&#xff09;我的解析也不会做的非常详细&#xff0c;只会提供思路和一些关键点&#xff0c;力扣上的大佬们的题解质量是非…...

如何选择安全、可验证的技术?

澳大利亚信号局的澳大利亚网络安全中心 (ASD 的 ACSC) 发布了一份指导文件&#xff0c;题为《选择安全和可验证的技术》&#xff0c;旨在帮助组织在采购软件&#xff08;专有或开源&#xff09;、硬件&#xff08;例如物联网设备&#xff09;和云服务&#xff08;SaaS、MSP 服务…...

Allure在自动化测试中的应用

01 Allure的简介及使用 1、应用场景 自动化的结果一定是通过一个报告来进行体现 Allure 是一个独立的报告插件&#xff0c;生成美观易读的报告&#xff0c;目前支持Python、Java、PHP、C#等语言 为dev/QA 提供详尽的测试报告、测试步骤、日志&#xff0c;也可以为管理层提供统…...

C# 探险之旅:第十一节 - 循环(foreach):一场“遍历”奇幻岛的大冒险!

嘿&#xff0c;勇敢的探险家们&#xff01;欢迎来到C#奇幻岛的第十一站——“遍历”奇幻岛&#xff01;今天&#xff0c;我们要乘坐一艘叫做foreach的魔法船&#xff0c;去遍历&#xff08;也就是一个一个看过来&#xff09;岛上那些神秘的宝藏箱&#xff01;准备好了吗&#x…...

Ubuntu24.04配置STMTrack

项目地址&#xff1a;https://github.com/fzh0917/STMTrack 一、安装 CUDA 参考链接&#xff1a; Ubuntu24.04配置DINO-Tracker Ubuntu多CUDA版本安装及切换 由于之前在其他项目中已经安装了 CUDA12.1&#xff0c;这次需要安装另一个版本。 1. 查看安装版本 按照 requireme…...

【Java学习笔记】Map接口和常用方法

一、 Map接口实现类的 特点[很实用] key是自己存的java对象 value是一个固定的 //当有相同的 k ,就等价于替换. 二、 Map常用方法 &#xff08;根据键–>k&#xff09; 三、Map接口遍历方法 package com.hspedu.map_; import java.util.*; /** * author 韩顺平 * ver…...

uniapp支持App横竖屏开发总结

一、需求&#xff1a; app要支持重力感应自动切换横竖屏&#xff0c;并切换后样式不能错乱 二、实现 官方文档 官方Git manifest.json文件中 "app-plus" : {"screenOrientation" : ["portrait-primary","portrait-secondary","…...

【工作笔记】Lombok版本变化导致的反序列化异常

Lombok版本变化导致的反序列化异常 背景 因为安全性的考虑&#xff0c;最近在梳理旧系统的系统依赖。改动依赖时候还好&#xff0c;毕竟只是换掉不再合作公司的旧依赖&#xff0c;没敢动别的太多东西。不过没多久&#xff0c;测试团队就找来了… 排查问题之第一次跑偏 旧系…...

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...

mongodb源码分析session执行handleRequest命令find过程

mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程&#xff0c;并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令&#xff0c;把数据流转换成Message&#xff0c;状态转变流程是&#xff1a;State::Created 》 St…...

基于服务器使用 apt 安装、配置 Nginx

&#x1f9fe; 一、查看可安装的 Nginx 版本 首先&#xff0c;你可以运行以下命令查看可用版本&#xff1a; apt-cache madison nginx-core输出示例&#xff1a; nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...

【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表

1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...

【单片机期末】单片机系统设计

主要内容&#xff1a;系统状态机&#xff0c;系统时基&#xff0c;系统需求分析&#xff0c;系统构建&#xff0c;系统状态流图 一、题目要求 二、绘制系统状态流图 题目&#xff1a;根据上述描述绘制系统状态流图&#xff0c;注明状态转移条件及方向。 三、利用定时器产生时…...

【JavaWeb】Docker项目部署

引言 之前学习了Linux操作系统的常见命令&#xff0c;在Linux上安装软件&#xff0c;以及如何在Linux上部署一个单体项目&#xff0c;大多数同学都会有相同的感受&#xff0c;那就是麻烦。 核心体现在三点&#xff1a; 命令太多了&#xff0c;记不住 软件安装包名字复杂&…...

站群服务器的应用场景都有哪些?

站群服务器主要是为了多个网站的托管和管理所设计的&#xff0c;可以通过集中管理和高效资源的分配&#xff0c;来支持多个独立的网站同时运行&#xff0c;让每一个网站都可以分配到独立的IP地址&#xff0c;避免出现IP关联的风险&#xff0c;用户还可以通过控制面板进行管理功…...

安卓基础(Java 和 Gradle 版本)

1. 设置项目的 JDK 版本 方法1&#xff1a;通过 Project Structure File → Project Structure... (或按 CtrlAltShiftS) 左侧选择 SDK Location 在 Gradle Settings 部分&#xff0c;设置 Gradle JDK 方法2&#xff1a;通过 Settings File → Settings... (或 CtrlAltS)…...

《Docker》架构

文章目录 架构模式单机架构应用数据分离架构应用服务器集群架构读写分离/主从分离架构冷热分离架构垂直分库架构微服务架构容器编排架构什么是容器&#xff0c;docker&#xff0c;镜像&#xff0c;k8s 架构模式 单机架构 单机架构其实就是应用服务器和单机服务器都部署在同一…...

【深度学习新浪潮】什么是credit assignment problem?

Credit Assignment Problem(信用分配问题) 是机器学习,尤其是强化学习(RL)中的核心挑战之一,指的是如何将最终的奖励或惩罚准确地分配给导致该结果的各个中间动作或决策。在序列决策任务中,智能体执行一系列动作后获得一个最终奖励,但每个动作对最终结果的贡献程度往往…...