使用KNN进行心力衰竭预测
使用KNN进行心力衰竭预测目录:一、KNN算法二、任务说明三、代码实现一、KNN算法KNN (K-Nearest Neighbor)K近邻算法是一种有监督机器学习算法。它既能用于分类也能用于回归。KNN的核心原理是根据它距离最近的K个样本点是什么类别来判断该新样本属于哪个类别如上图所示当K3时距离待预测点最近的三个样本中蓝色三角形数量大于红色圆形因此会将待预测样本分类为蓝色三角形而当K5时由于最近五个样本中红色圆形样本较多KNN将待测样本分类为红色圆形。OCR识别技术主要依赖于图像处理和模式识别算法通过捕捉文档中的字符特征如笔画、形状、大小、间距等与预设的字符库进行比对从而识别相应的文字信息。二、任务说明目标:构建机器学习模型根据患者的临床生理指标,预测其是否患有心脏病输入特征基础信息年龄Age、性别Sex。体征指标静息血压 (RestingBP)、胆固醇 (Cholesterol)、最大心率 (MaxHR)、空腹血糖 (FastingBS)。症状与心电图胸痛类型 (ChestPainType)、运动心绞痛 (ExerciseAngina)、静息心电图 (RestingECG)、ST段旧峰值 (Oldpeak)、ST段斜率 (ST_Slope)。三、代码实现1️⃣首先进行数据分析import pandas as pd import seaborn as sns import matplotlib.pyplot as plt df pd.read_csv(Heart.csv) print(df.head)AgeSexChestPainTypeRestingBPCholesterolFastingBSRestingECGMaxHRExerciseAnginaOldpeakST_SlopeHeartDisease040MATA1402890Normal172N0Up0149FNAP1601800Normal156N1Flat1237MATA1302830ST98N0Up0348FASY1382140Normal108Y1.5Flat1454MNAP1501950Normal122N0Up0 1.1 绘制直方图查看病例的数据分布使用import seaborn as sns库绘制直方图将HeartDisease作为参数输入sns.countplot(xHeartDisease, datadf, palettemagma) plt.title(Distribution of Heart Disease) plt.show() 1.2 绘制直方图查看年龄的数据分布使用sns库绘制直方图将Age作为参数输入sns.histplot(datadf, xAge, kdeTrue, color#3B0F70, alpha0.7) plt.title(Age Distribution) plt.show() 1.3 绘制热力图查看不同指标之间的相关关系使用sns库绘制直方图首先对表格数据进行筛选筛选出包含数字的指标只有数字类型才能计算皮尔逊相关系数numeric_onlydf.select_dtypes(include[number]) #筛选出只包含数字的字段 plt.figure(figsize(12, 8)) sns.heatmap(numeric_only.corr(), annotTrue, cmapmagma, fmt.2f, linewidths0.5) plt.title(Correlation Matrix ) plt.show()2️⃣数据处理与训练 2.1 对数据进行处理使用get_dummies(df, drop_firstTrue)函数对数据进行独热编码主要用于将分类变量转换为机器学习模型可以理解的数值形式。drop_firstTrue是为了避免多重共线性会删除生成的虚拟变量中的第一列。df pd.get_dummies(df, drop_firstTrue)AgeRestingBPCholesterolFastingBSMaxHROldpeakHeartDiseaseSex_MChestPainType_ATAChestPainType_NAPChestPainType_TARestingECG_NormalRestingECG_STExerciseAngina_YST_Slope_FlatST_Slope_Up04014028901720011001000114916018001561100101001023713028309800110001001348138214010811000010110454150195012200101010001可以看到原本的RestingECG字段编码为了RestingECG_Normal,RestingECG_ST两个字段使用drop_first之后原本Sex字段包括M与F经过处理之后只保留了编码为0和1的Sex_M字段。随后将所有数据都统一为Int类型df df.astype(int) 2.2 对数据进行训练对数据进行切分将最后一个字段HeartDisease作为标签其余字段作为训练数据字段from sklearn.model_selection import train_test_split Xdf.drop(HeartDisease,axis1) ydf[HeartDisease] X_train , X_test , y_train , y_test train_test_split(X,y,test_size 0.25,random_state42,stratifyy)基于网格搜索法来确定knn模型的最佳超参from sklearn.pipeline import Pipeline from sklearn.model_selection import GridSearchCV knn_pipelinePipeline([(scaler,StandardScaler()),(knn,KNeighborsClassifier())]) knn_param_grid{knn__n_neighbors:[3,5,7,9,11,13,15,17,19,21],knn__weights:[uniform,distance],knn__metric:[minkowski, euclidean, manhattan]} knn_gridGridSearchCV(estimatorknn_pipeline,param_gridknn_param_grid,cv5,scoringaccuracy)使用Pipeline将数据预处理标准化和模型训练K近邻分类捆绑在一起形成一个完整的、可一键执行的流程。然后对模型中指定超参设置训练参数命名遵循Scikit-learn Pipeline的双下划线语法规范格式步骤名称 __ (两个下划线) 模型内部参数名此处knn__n_neighbors表示待选K值knn__metric对应KNN算法中的距离度量方式。对数据进行处理和对模型进行基本设置之后进行训练knn_grid.fit(X_train,y_train) print(Best KNN parameters:, knn_grid.best_params_) print(Best KNN cross validation accuracy:, knn_grid.best_score_)得到训练最优超参与验证集最佳的精度Best KNN parameters: {‘knn__metric’: ‘manhattan’, ‘knn__n_neighbors’: 21, ‘knn__weights’: ‘uniform’}Best KNN cross validation accuracy: 0.8677245318946365 2.3 对测试集进行预测from sklearn.metrics import accuracy_score log_y_pred log_grid.predict(X_test) accuracyaccuracy_score(y_test, log_y_pred) print(Test Accuracy:,accuracy)得到测试结果Test Accuracy: 0.9完整代码import pandas as pd import seaborn as sns import matplotlib.pyplot as plt from sklearn.model_selection import train_test_split, GridSearchCV from sklearn.pipeline import Pipeline from sklearn.preprocessing import StandardScaler from sklearn.metrics import accuracy_score from sklearn.neighbors import KNeighborsClassifier from sklearn.linear_model import LogisticRegression from sklearn.naive_bayes import GaussianNB import warnings warnings.filterwarnings(ignore) # 1. Loading Data df pd.read_csv(heart.csv) # 2. Explratory Data Analysis (EDA) print(df.head()) sns.countplot(x HeartDisease, datadf, palettemagma) plt.title(Distribution of Heart Disease) plt.show() sns.histplot(datadf, xAge, kdeTrue, color#3B0F70, alpha0.7) plt.title(Age Distribution) plt.show() numeric_only df.select_dtypes(include[number]) plt.figure(figsize(12, 8)) sns.heatmap(numeric_only.corr(), annotTrue, cmapmagma, fmt.2f, linewidths0.5) plt.title(Correlation Matrix) plt.show() # 3. Data Preprocessing Feature Engineering df pd.get_dummies(df, drop_firstTrue) print(df) df df.astype(int) print(df) X df.drop(HeartDisease, axis1) y df[HeartDisease] X_train, X_test, y_train, y_test train_test_split(X, y, test_size0.25, random_state42, stratifyy) # 4.Model Building Hyperparameter Tuning knn_pipeline Pipeline([(scaler, StandardScaler()),(knn, KNeighborsClassifier())]) knn_param_grid {knn__n_neighbors: [3, 5, 7, 9, 11, 13, 15, 17, 19, 21], knn__weights:[uniform, distance], knn__metric:[minkowski, euclidean, manhattan]} knn_grid GridSearchCV(estimatorknn_pipeline, param_gridknn_param_grid, cv5, scoringaccuracy) knn_grid.fit(X_train, y_train) print(Best KNN parameters:, knn_grid.best_params_) print(Best KNN cross validation accuracy:, knn_grid.best_score_) knn_y_pred knn_grid.predict(X_test) accuracy accuracy_score(y_test, knn_y_pred) print(Test Accuracy:, accuracy)

相关新闻

常见的DOS指令

常见的DOS指令

#JavaDay1- 常见的DOS指令 #盘符切换 #查看当前目录下的所有文件 dir #切换目录 cd (change directory) cd/d(跨盘符时用) #返回上一级 cd.. #清理屏幕 cls (clear screen) #退出终端 exit #查看电脑的IP ipconfig #打开电脑应用 calc(计算机) mspaint(画图工具) note…

2026/5/17 1:44:16 阅读更多 →
DRAM内存访问协议核心解析:全场景命令时序约束汇总表(内存控制器设计核心参考)

DRAM内存访问协议核心解析:全场景命令时序约束汇总表(内存控制器设计核心参考)

本文为作者原创内容,首发于同名微信公众号【TechShareMore】,首发时间:2026年3月5日,已获得作者本人独家授权,同步发布于CSDN。在前序内容中,我们系统拆解了DRAM内存访问协议的五大基础命令、全场景命令交互…

2026/5/17 9:17:38 阅读更多 →
比资源管理器强10倍:Q-Dir 免费多窗口文件管理器

比资源管理器强10倍:Q-Dir 免费多窗口文件管理器

Q-Dir(Quad-Directory Explorer)是一款专为 Windows 设计的**免费多窗口文件管理器**,最新版本为 **v12.49**(2026年2月发布)。它最大的特色是支持在一个界面中同时显示 **1-4 个独立的文件浏览窗口**,大幅…

2026/7/4 15:13:00 阅读更多 →

最新新闻

Ketcher架构深度解析:基于Web的化学结构编辑器技术实现与工程实践

Ketcher架构深度解析:基于Web的化学结构编辑器技术实现与工程实践

Ketcher架构深度解析:基于Web的化学结构编辑器技术实现与工程实践 【免费下载链接】ketcher Web-based molecule sketcher 项目地址: https://gitcode.com/gh_mirrors/ke/ketcher Ketcher作为一款现代化的Web化学结构编辑器,其技术架构体现了对复…

2026/7/5 4:33:16 阅读更多 →
抖店AI标题优化怎么用标题违规和低质标题怎么改

抖店AI标题优化怎么用标题违规和低质标题怎么改

抖店AI标题优化怎么用?标题违规和低质标题怎么改 抖店商品标题写不好,会影响审核、搜索理解和买家点击。很多商家从 1688 搬标题时,原标题里带批发词、品牌词、极限词、无关热词,直接上架容易违规,也不一定适合抖店买家…

2026/7/5 4:29:15 阅读更多 →
如何3分钟完成通达信缠论插件部署:终极自动化分析指南

如何3分钟完成通达信缠论插件部署:终极自动化分析指南

如何3分钟完成通达信缠论插件部署:终极自动化分析指南 【免费下载链接】ChanlunX 缠中说禅炒股缠论可视化插件 项目地址: https://gitcode.com/gh_mirrors/ch/ChanlunX 还在为复杂的缠论分析而烦恼吗?面对繁琐的笔段划分和中枢识别,传…

2026/7/5 4:27:15 阅读更多 →
接口自动化测试项目框架详解

接口自动化测试项目框架详解

🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 在选择接口测试自动化框架时,需要根据团队的技术栈和项目需求来综合考虑。对于测试团队来说,使用Python相关的测试框架更为便捷。无论选…

2026/7/5 4:25:15 阅读更多 →
单片机IWIP 原子云实验

单片机IWIP 原子云实验

单片机 :STM32F407 开发板:DMF407电机开发板 平台:keil V5.31HSE 为8MHZ HSI为16MHZ主函数int main(void) {HAL_Init(); /* 初始化HAL库 */sys_stm32_clock_init(336, 8, 2, 7); /* 设置时钟,168Mhz */delay_init…

2026/7/5 4:25:15 阅读更多 →
Nano Banana部署Gemini 2.5 Flash:ARM+NPU边缘多模态推理实战指南

Nano Banana部署Gemini 2.5 Flash:ARM+NPU边缘多模态推理实战指南

1. 项目概述:这不是一个“升级包”,而是一套可落地的嵌入式AI推理工作流 你手头有一块 Nano Banana 开发板——它不是树莓派,也不是 Jetson Nano,而是基于全志 H616 芯片、带双千兆网口、4GB LPDDR4、支持 PCIe 2.0 x1 的国产小钢…

2026/7/5 4:23:15 阅读更多 →

日新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

月新闻