1.作者介绍黄书涛男西安工程大学电子信息学院2025级研究生研究方向机器视觉与人工智能电子邮件15003636820163.com胥乾信西安工程大学电子信息学院2025级研究生张宏伟人工智能课题组研究方向机器视觉与人工智能电子邮件2692797728qq.com关于理论方面的知识介绍2.1 研究背景与任务定义糖尿病是一种常见的慢性代谢性疾病病情进展受年龄、体质指数、血压、血清指标、生活习惯和用药情况等多种因素影响。对于临床辅助分析而言如果能够根据患者的基础指标预测未来病情进展趋势就可以为风险评估和治疗方案制定提供参考。本实验研究的是糖尿病病情进展预测问题预测目标是患者一年后的病情进展定量指标。由于目标变量是连续数值因此该问题属于回归预测任务而不是分类任务。注意本实验不是判断是否患糖尿病而是预测一年后的病情进展数值。2.2 支持向量回归SVR基本思想支持向量回归Support Vector RegressionSVR是支持向量机在回归任务中的应用。普通回归模型通常尽可能减小所有样本预测值与真实值之间的误差而SVR允许预测值在一定范围内波动。SVR通过设置误差容忍区间来构建回归模型只要样本预测误差位于允许范围内就不对该样本进行惩罚只有超出容忍区间的样本才会参与损失计算。这种思想可以提高模型对噪声数据的适应能力。图1 支持向量回归误差容忍区间示意图2.3 核函数与关键参数核函数用于决定SVR模型的拟合方式。通过核函数SVR可以把原始特征空间中的问题映射到更高维空间从而处理非线性关系。本实验主要比较三种核函数线性核、多项式核和径向基核。图2 三种核函数SVR建模流程2.4 模型评价指标为了比较三种核函数SVR模型的预测效果本实验采用决定系数R²、均方误差MSE和平均绝对误差MAE三个指标进行评价。• 决定系数R²用于衡量模型对目标变量变化的解释能力越接近1表示拟合效果越好。• 均方误差MSE预测误差平方的平均值对较大误差更敏感数值越小越好。• 平均绝对误差MAE预测值与真实值绝对误差的平均值数值越小表示平均偏差越小。3 . 关于实验过程的介绍完整实验代码测试结果3.1 实验环境与依赖包本实验使用Python语言完成模型构建和结果可视化。主要依赖库包括scikit-learn、matplotlib、numpy和pandas。其中scikit-learn用于加载数据集、划分数据、标准化处理、建立SVR模型和计算评价指标matplotlib用于绘制预测结果图。• Python建议使用3.8及以上版本。• scikit-learn用于机器学习建模与评价。• matplotlib用于绘制模型预测曲线。• numpy/pandas用于数值计算和结果整理。安装命令如下pip install numpy pandas matplotlib scikit-learn3.2 数据集介绍与预处理本实验使用Scikit-learn内置的load_diabetes()糖尿病回归数据集。该数据集包含442个样本每个样本包含10个特征包括年龄、性别、体质指数、平均血压以及6项血清指标。目标变量为患者一年后的糖尿病病情进展定量指标。数据集中的特征已经经过缩放处理但为了保持SVR建模流程的规范性并与目标值标准化处理保持一致实验中仍使用StandardScaler对训练集和测试集进行统一标准化。图3 糖尿病病情进展值分布图4 体质指数与病情进展值关系图5 特征与病情进展值相关性热力图3.3 实验流程本实验的总体流程包括首先读取糖尿病数据集然后将数据划分为训练集和测试集接着对特征值和目标值进行标准化处理之后分别建立线性核、多项式核和径向基核SVR模型最后进行测试集预测并计算评价指标。• 第一步导入相关模块。• 第二步读取糖尿病数据集并划分训练集、测试集。• 第三步对训练数据和测试数据进行标准化处理。• 第四步使用三种不同核函数的SVR模型进行训练和预测。• 第五步对模型进行性能评估并比较三种核函数的效果。3.4 完整实验代码下面给出完整实验代码。代码在原有SVR糖尿病预测流程基础上加入了中文兼容设置并修复了预测值反标准化时一维数组无法直接inverse_transform的问题。################################# 第一步导入相关模块fromsklearn.datasetsimportload_diabetes# 导入糖尿病数据集importmatplotlib.pyplotasplt# 可视化绘图fromsklearn.model_selectionimporttrain_test_split# 导入数据集划分模块fromsklearn.preprocessingimportStandardScaler# 导入数据标准化模块fromsklearn.svmimportSVR# 导入支持向量机回归模型SVRfromsklearn.metricsimportr2_score,mean_absolute_error,mean_squared_error# 模型评估使用R-squared、MSE、MAE指标评估# 中文兼容设置防止图表中文显示为方框plt.rcParams[font.sans-serif][SimHei]plt.rcParams[axes.unicode_minus]False################################# 第二步读取糖尿病数据集并进行分割diabetesload_diabetes()print(diabetes.DESCR)# 打印数据集说明xdiabetes.data# 特征数据包括年龄、性别、BMI、血压和血清指标等ydiabetes.target# 目标值表示一年后糖尿病病情进展定量指标x_train,x_test,y_train,y_testtrain_test_split(x,y,test_size0.25,random_state33)# test_size0.25表示25%的样本作为测试集# random_state33用于固定随机种子保证每次运行结果一致################################# 第三步对训练数据和测试数据进行标准化处理ss_xStandardScaler()ss_yStandardScaler()# 分别初始化特征值和目标值的标准化器x_trainss_x.fit_transform(x_train)# 对训练集特征进行标准化fit_transform会计算均值和标准差x_testss_x.transform(x_test)# 对测试集特征进行标准化只能使用训练集的均值和标准差避免数据泄露y_trainss_y.fit_transform(y_train.reshape(-1,1))y_testss_y.transform(y_test.reshape(-1,1))# 目标值也是数值型数据所以也进行标准化# reshape(-1, 1)用于把一维数组转换为二维数组################################# 第四步使用三种不同核函数配置的SVR模型进行训练和预测# 1. 使用线性核函数配置的支持向量机进行回归训练并预测linear_svrSVR(kernellinear)# kernellinear表示使用线性核函数linear_svr.fit(x_train,y_train.ravel())# fit用于模型训练ravel用于把二维目标值转换为一维linear_svr_predictlinear_svr.predict(x_test)# 使用测试集进行预测l1,plt.plot(y_test,colorb,linewidth2)l2,plt.plot(linear_svr_predict,colorr,linewidth2)plt.legend([l1,l2],[真实值,线性核SVR预测值],loc2)plt.title(线性核SVR预测结果对比)plt.xlabel(测试集样本序号)plt.ylabel(标准化后的病情进展值)plt.show()# 2. 使用多项式核函数配置的支持向量机进行回归训练并预测poly_svrSVR(kernelpoly)# kernelpoly表示使用多项式核函数poly_svr.fit(x_train,y_train.ravel())poly_svr_predictpoly_svr.predict(x_test)l1,plt.plot(y_test,colorb,linewidth2)l2,plt.plot(poly_svr_predict,colorr,linewidth2)plt.legend([l1,l2],[真实值,多项式核SVR预测值],loc2)plt.title(多项式核SVR预测结果对比)plt.xlabel(测试集样本序号)plt.ylabel(标准化后的病情进展值)plt.show()# 3. 使用径向基核函数配置的支持向量机进行回归训练并预测rbf_svrSVR(kernelrbf)# kernelrbf表示使用径向基核函数适合处理非线性关系rbf_svr.fit(x_train,y_train.ravel())rbf_svr_predictrbf_svr.predict(x_test)l1,plt.plot(y_test,colorb,linewidth2)l2,plt.plot(rbf_svr_predict,colorr,linewidth2)plt.legend([l1,l2],[真实值,径向基核SVR预测值],loc2)plt.title(径向基核SVR预测结果对比)plt.xlabel(测试集样本序号)plt.ylabel(标准化后的病情进展值)plt.show()################################# 第五步对三种核函数配置下的SVR模型进行性能评估# y_test是二维数组可以直接进行反标准化# 三个predict结果是一维数组需要reshape(-1, 1)后再进行反标准化y_test_originalss_y.inverse_transform(y_test)linear_svr_predict_originalss_y.inverse_transform(linear_svr_predict.reshape(-1,1))poly_svr_predict_originalss_y.inverse_transform(poly_svr_predict.reshape(-1,1))rbf_svr_predict_originalss_y.inverse_transform(rbf_svr_predict.reshape(-1,1))# 1. 线性核函数配置的SVRprint(线性核SVR默认评分,linear_svr.score(x_test,y_test))print(线性核SVR的R-squared值,r2_score(y_test,linear_svr_predict))print(线性核SVR的均方误差MSE,mean_squared_error(y_test_original,linear_svr_predict_original))print(线性核SVR的平均绝对误差MAE,mean_absolute_error(y_test_original,linear_svr_predict_original))# 2. 多项式核函数配置的SVRprint(\n多项式核SVR默认评分,poly_svr.score(x_test,y_test))print(多项式核SVR的R-squared值,r2_score(y_test,poly_svr_predict))print(多项式核SVR的均方误差MSE,mean_squared_error(y_test_original,poly_svr_predict_original))print(多项式核SVR的平均绝对误差MAE,mean_absolute_error(y_test_original,poly_svr_predict_original))# 3. 径向基核函数配置的SVRprint(\n径向基核SVR默认评分,rbf_svr.score(x_test,y_test))print(径向基核SVR的R-squared值,r2_score(y_test,rbf_svr_predict))print(径向基核SVR的均方误差MSE,mean_squared_error(y_test_original,rbf_svr_predict_original))print(径向基核SVR的平均绝对误差MAE,mean_absolute_error(y_test_original,rbf_svr_predict_original))3.5 测试结果实验分别训练线性核、多项式核和径向基核三种SVR模型。测试结果表明三种模型都能够在一定程度上拟合糖尿病病情进展趋势但不同核函数的预测能力存在差异。图6 三种核函数预测结果对比图7 支持向量回归模型评价指标表表1 三种核函数SVR模型测试结果从表1可以看出径向基核SVR的R²最高同时MSE和MAE最低因此在本次实验中径向基核模型综合表现较好。这说明糖尿病病情进展与输入特征之间可能存在一定非线性关系非线性核函数能够更好地学习这种关系。4 . 参考连接[1] Scikit-learn. load_diabetes — Load and return the diabetes dataset (regression). https://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_diabetes.html[2] Scikit-learn. SVR — Epsilon-Support Vector Regression. https://scikit-learn.org/stable/modules/generated/sklearn.svm.SVR.html[3] Scikit-learn. StandardScaler. https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.StandardScaler.html[4] Scikit-learn. Regression metrics: r2_score, mean_squared_error, mean_absolute_error. https://scikit-learn.org/stable/modules/model_evaluation.html[5] Bradley Efron, Trevor Hastie, Iain Johnstone, Robert Tibshirani. Least Angle Regression. Annals of Statistics, 2004. https://web.stanford.edu/~hastie/Papers/LARS/LeastAngle_2002.pdf[6] CSDN参考案例基于支持向量回归SVR的糖尿病病情进展预测。https://blog.csdn.net/m0_37758063/article/details/124086219
基于支持向量回归(SVR)的糖尿病病情进展预测
发布时间:2026/5/27 11:54:02
1.作者介绍黄书涛男西安工程大学电子信息学院2025级研究生研究方向机器视觉与人工智能电子邮件15003636820163.com胥乾信西安工程大学电子信息学院2025级研究生张宏伟人工智能课题组研究方向机器视觉与人工智能电子邮件2692797728qq.com关于理论方面的知识介绍2.1 研究背景与任务定义糖尿病是一种常见的慢性代谢性疾病病情进展受年龄、体质指数、血压、血清指标、生活习惯和用药情况等多种因素影响。对于临床辅助分析而言如果能够根据患者的基础指标预测未来病情进展趋势就可以为风险评估和治疗方案制定提供参考。本实验研究的是糖尿病病情进展预测问题预测目标是患者一年后的病情进展定量指标。由于目标变量是连续数值因此该问题属于回归预测任务而不是分类任务。注意本实验不是判断是否患糖尿病而是预测一年后的病情进展数值。2.2 支持向量回归SVR基本思想支持向量回归Support Vector RegressionSVR是支持向量机在回归任务中的应用。普通回归模型通常尽可能减小所有样本预测值与真实值之间的误差而SVR允许预测值在一定范围内波动。SVR通过设置误差容忍区间来构建回归模型只要样本预测误差位于允许范围内就不对该样本进行惩罚只有超出容忍区间的样本才会参与损失计算。这种思想可以提高模型对噪声数据的适应能力。图1 支持向量回归误差容忍区间示意图2.3 核函数与关键参数核函数用于决定SVR模型的拟合方式。通过核函数SVR可以把原始特征空间中的问题映射到更高维空间从而处理非线性关系。本实验主要比较三种核函数线性核、多项式核和径向基核。图2 三种核函数SVR建模流程2.4 模型评价指标为了比较三种核函数SVR模型的预测效果本实验采用决定系数R²、均方误差MSE和平均绝对误差MAE三个指标进行评价。• 决定系数R²用于衡量模型对目标变量变化的解释能力越接近1表示拟合效果越好。• 均方误差MSE预测误差平方的平均值对较大误差更敏感数值越小越好。• 平均绝对误差MAE预测值与真实值绝对误差的平均值数值越小表示平均偏差越小。3 . 关于实验过程的介绍完整实验代码测试结果3.1 实验环境与依赖包本实验使用Python语言完成模型构建和结果可视化。主要依赖库包括scikit-learn、matplotlib、numpy和pandas。其中scikit-learn用于加载数据集、划分数据、标准化处理、建立SVR模型和计算评价指标matplotlib用于绘制预测结果图。• Python建议使用3.8及以上版本。• scikit-learn用于机器学习建模与评价。• matplotlib用于绘制模型预测曲线。• numpy/pandas用于数值计算和结果整理。安装命令如下pip install numpy pandas matplotlib scikit-learn3.2 数据集介绍与预处理本实验使用Scikit-learn内置的load_diabetes()糖尿病回归数据集。该数据集包含442个样本每个样本包含10个特征包括年龄、性别、体质指数、平均血压以及6项血清指标。目标变量为患者一年后的糖尿病病情进展定量指标。数据集中的特征已经经过缩放处理但为了保持SVR建模流程的规范性并与目标值标准化处理保持一致实验中仍使用StandardScaler对训练集和测试集进行统一标准化。图3 糖尿病病情进展值分布图4 体质指数与病情进展值关系图5 特征与病情进展值相关性热力图3.3 实验流程本实验的总体流程包括首先读取糖尿病数据集然后将数据划分为训练集和测试集接着对特征值和目标值进行标准化处理之后分别建立线性核、多项式核和径向基核SVR模型最后进行测试集预测并计算评价指标。• 第一步导入相关模块。• 第二步读取糖尿病数据集并划分训练集、测试集。• 第三步对训练数据和测试数据进行标准化处理。• 第四步使用三种不同核函数的SVR模型进行训练和预测。• 第五步对模型进行性能评估并比较三种核函数的效果。3.4 完整实验代码下面给出完整实验代码。代码在原有SVR糖尿病预测流程基础上加入了中文兼容设置并修复了预测值反标准化时一维数组无法直接inverse_transform的问题。################################# 第一步导入相关模块fromsklearn.datasetsimportload_diabetes# 导入糖尿病数据集importmatplotlib.pyplotasplt# 可视化绘图fromsklearn.model_selectionimporttrain_test_split# 导入数据集划分模块fromsklearn.preprocessingimportStandardScaler# 导入数据标准化模块fromsklearn.svmimportSVR# 导入支持向量机回归模型SVRfromsklearn.metricsimportr2_score,mean_absolute_error,mean_squared_error# 模型评估使用R-squared、MSE、MAE指标评估# 中文兼容设置防止图表中文显示为方框plt.rcParams[font.sans-serif][SimHei]plt.rcParams[axes.unicode_minus]False################################# 第二步读取糖尿病数据集并进行分割diabetesload_diabetes()print(diabetes.DESCR)# 打印数据集说明xdiabetes.data# 特征数据包括年龄、性别、BMI、血压和血清指标等ydiabetes.target# 目标值表示一年后糖尿病病情进展定量指标x_train,x_test,y_train,y_testtrain_test_split(x,y,test_size0.25,random_state33)# test_size0.25表示25%的样本作为测试集# random_state33用于固定随机种子保证每次运行结果一致################################# 第三步对训练数据和测试数据进行标准化处理ss_xStandardScaler()ss_yStandardScaler()# 分别初始化特征值和目标值的标准化器x_trainss_x.fit_transform(x_train)# 对训练集特征进行标准化fit_transform会计算均值和标准差x_testss_x.transform(x_test)# 对测试集特征进行标准化只能使用训练集的均值和标准差避免数据泄露y_trainss_y.fit_transform(y_train.reshape(-1,1))y_testss_y.transform(y_test.reshape(-1,1))# 目标值也是数值型数据所以也进行标准化# reshape(-1, 1)用于把一维数组转换为二维数组################################# 第四步使用三种不同核函数配置的SVR模型进行训练和预测# 1. 使用线性核函数配置的支持向量机进行回归训练并预测linear_svrSVR(kernellinear)# kernellinear表示使用线性核函数linear_svr.fit(x_train,y_train.ravel())# fit用于模型训练ravel用于把二维目标值转换为一维linear_svr_predictlinear_svr.predict(x_test)# 使用测试集进行预测l1,plt.plot(y_test,colorb,linewidth2)l2,plt.plot(linear_svr_predict,colorr,linewidth2)plt.legend([l1,l2],[真实值,线性核SVR预测值],loc2)plt.title(线性核SVR预测结果对比)plt.xlabel(测试集样本序号)plt.ylabel(标准化后的病情进展值)plt.show()# 2. 使用多项式核函数配置的支持向量机进行回归训练并预测poly_svrSVR(kernelpoly)# kernelpoly表示使用多项式核函数poly_svr.fit(x_train,y_train.ravel())poly_svr_predictpoly_svr.predict(x_test)l1,plt.plot(y_test,colorb,linewidth2)l2,plt.plot(poly_svr_predict,colorr,linewidth2)plt.legend([l1,l2],[真实值,多项式核SVR预测值],loc2)plt.title(多项式核SVR预测结果对比)plt.xlabel(测试集样本序号)plt.ylabel(标准化后的病情进展值)plt.show()# 3. 使用径向基核函数配置的支持向量机进行回归训练并预测rbf_svrSVR(kernelrbf)# kernelrbf表示使用径向基核函数适合处理非线性关系rbf_svr.fit(x_train,y_train.ravel())rbf_svr_predictrbf_svr.predict(x_test)l1,plt.plot(y_test,colorb,linewidth2)l2,plt.plot(rbf_svr_predict,colorr,linewidth2)plt.legend([l1,l2],[真实值,径向基核SVR预测值],loc2)plt.title(径向基核SVR预测结果对比)plt.xlabel(测试集样本序号)plt.ylabel(标准化后的病情进展值)plt.show()################################# 第五步对三种核函数配置下的SVR模型进行性能评估# y_test是二维数组可以直接进行反标准化# 三个predict结果是一维数组需要reshape(-1, 1)后再进行反标准化y_test_originalss_y.inverse_transform(y_test)linear_svr_predict_originalss_y.inverse_transform(linear_svr_predict.reshape(-1,1))poly_svr_predict_originalss_y.inverse_transform(poly_svr_predict.reshape(-1,1))rbf_svr_predict_originalss_y.inverse_transform(rbf_svr_predict.reshape(-1,1))# 1. 线性核函数配置的SVRprint(线性核SVR默认评分,linear_svr.score(x_test,y_test))print(线性核SVR的R-squared值,r2_score(y_test,linear_svr_predict))print(线性核SVR的均方误差MSE,mean_squared_error(y_test_original,linear_svr_predict_original))print(线性核SVR的平均绝对误差MAE,mean_absolute_error(y_test_original,linear_svr_predict_original))# 2. 多项式核函数配置的SVRprint(\n多项式核SVR默认评分,poly_svr.score(x_test,y_test))print(多项式核SVR的R-squared值,r2_score(y_test,poly_svr_predict))print(多项式核SVR的均方误差MSE,mean_squared_error(y_test_original,poly_svr_predict_original))print(多项式核SVR的平均绝对误差MAE,mean_absolute_error(y_test_original,poly_svr_predict_original))# 3. 径向基核函数配置的SVRprint(\n径向基核SVR默认评分,rbf_svr.score(x_test,y_test))print(径向基核SVR的R-squared值,r2_score(y_test,rbf_svr_predict))print(径向基核SVR的均方误差MSE,mean_squared_error(y_test_original,rbf_svr_predict_original))print(径向基核SVR的平均绝对误差MAE,mean_absolute_error(y_test_original,rbf_svr_predict_original))3.5 测试结果实验分别训练线性核、多项式核和径向基核三种SVR模型。测试结果表明三种模型都能够在一定程度上拟合糖尿病病情进展趋势但不同核函数的预测能力存在差异。图6 三种核函数预测结果对比图7 支持向量回归模型评价指标表表1 三种核函数SVR模型测试结果从表1可以看出径向基核SVR的R²最高同时MSE和MAE最低因此在本次实验中径向基核模型综合表现较好。这说明糖尿病病情进展与输入特征之间可能存在一定非线性关系非线性核函数能够更好地学习这种关系。4 . 参考连接[1] Scikit-learn. load_diabetes — Load and return the diabetes dataset (regression). https://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_diabetes.html[2] Scikit-learn. SVR — Epsilon-Support Vector Regression. https://scikit-learn.org/stable/modules/generated/sklearn.svm.SVR.html[3] Scikit-learn. StandardScaler. https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.StandardScaler.html[4] Scikit-learn. Regression metrics: r2_score, mean_squared_error, mean_absolute_error. https://scikit-learn.org/stable/modules/model_evaluation.html[5] Bradley Efron, Trevor Hastie, Iain Johnstone, Robert Tibshirani. Least Angle Regression. Annals of Statistics, 2004. https://web.stanford.edu/~hastie/Papers/LARS/LeastAngle_2002.pdf[6] CSDN参考案例基于支持向量回归SVR的糖尿病病情进展预测。https://blog.csdn.net/m0_37758063/article/details/124086219