news 2026/4/15 20:19:24

Python | K折交叉验证的参数优化的支持向量机回归(SVR)预测及可视化算法

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python | K折交叉验证的参数优化的支持向量机回归(SVR)预测及可视化算法

立个flag,这是未来一段时间打算做的Python教程,敬请关注。

1 数据及应用领域

我的程序中给出数据data.xlsx(代码及数据见文末),10 列特征值,1 个目标值,适用于各行各业回归预测算法的需求,其中出图及数据自动保存在当前目录,设置的训练集与预测集的比例为 80%:20%。

一、地球科学与环境科学

  • 遥感反演:利用多源遥感数据预测水体深度、土壤湿度、植被指数、叶面积指数等。

  • 气象与气候研究:预测降水量、气温、风速、风向等连续气象变量。

  • 水文与水资源管理:河流流量、地下水位、径流量预测。

  • 环境污染监测:空气质量指数、PM2.5/PM10浓度、重金属污染水平预测。

  • 地质与矿业:预测矿区地表沉降、地裂缝发展趋势,或矿产储量评估。

二、生物学与医学

  • 生态学:预测物种分布密度、群落生物量或生态环境因子变化。

  • 公共卫生:基于环境、生活方式或基因组数据预测疾病风险或血液生化指标。

  • 医学影像分析:预测器官或病灶体积、组织属性、功能指标。

三、工程与物理科学

  • 材料科学:预测材料性能,如强度、硬度、导热性、弹性模量

  • 土木与结构工程:预测建筑物或桥梁的应力、位移、寿命周期。

  • 控制系统与信号处理:连续控制变量预测、信号功率或系统状态预测。

四、经济与社会科学

  • 经济预测:股价、GDP、通货膨胀率、消费指数预测。

  • 市场分析:销售额、客户需求、产品价格预测。

  • 社会行为:人口增长、流动性、社会指标预测。

五、数据科学与机器学习方向

  • 时间序列预测:股票价格、气象指标、传感器数据。

  • 多变量因果建模:分析各特征对连续目标变量的影响。

  • 特征重要性解释:结合SHAP、LIME等方法揭示变量贡献。

2 算法理论基础

SVR(Support Vector Regression)是支持向量机在回归任务中的扩展版本,它将“最大间隔”这一经典思想引入回归领域,使模型能够在复杂数据中获得更稳健的预测结果。

它尤其擅长处理中小规模、结构复杂、非线性强的数据,是一种表现稳定、理论成熟的回归方法。

🌟 一、SVR 回归是什么?

SVR 的核心目标是:

寻找一条尽可能平滑的函数,使大多数样本都落在某个“容忍范围”内。

与直接拟合所有点不同,SVR 更关注整体结构,让模型不过度被异常点或噪声影响。

这让 SVR 在噪声较多的场景中具有天然优势。

🌟 二、SVR 的核心思想:最大化“间隔”

虽然是回归任务,SVR 依然沿用了 SVM 的核心理念:

  • 希望预测函数尽量平滑

  • 大多数点离预测线不超过某个“可接受范围”

  • 只有超出范围的点才会影响模型参数

这相当于给模型建立了一条“误差安全带”,让它更冷静、更稳健。

🌟 三、核函数让 SVR 具备强大的非线性能力

SVR 的强大之处在于它可以通过核函数,把原本难以描述的非线性关系转化为线性结构来处理。

常见核函数包括:

  • 线性核

  • 多项式核

  • RBF(高斯核)

  • Sigmoid 核

核函数的存在让 SVR 能够:

  • 拟合复杂曲线

  • 处理高维特征

  • 捕捉非线性关系

这使它适用于传统线性方法难以处理的问题。

🌟 四、SVR 学的是“关键点”,不是所有样本

SVR 训练时并不会像传统回归那样依赖每一个样本。
只有那些落在“容忍范围外”的样本(支持向量)会影响模型。

这使得 SVR 具有几个特点:

  • 对噪声不敏感

  • 模型更加简洁

  • 预测过程高效

  • 表达的结构更稳定

换句话说,SVR 只向最有“话语权”的样本学习。

🌟 五、SVR 回归适用场景

SVR 非常适用于以下任务:

  • 非线性强、结构复杂的数据

  • 噪声明显或异常点较多的数据

  • 中小规模任务

  • 需要稳健、可解释模型的场景

  • 高维特征回归

它常作为基线模型或高稳健性任务中的候选算法。

3 其他图示

🎲 一、特征值相关性热图

特征值相关性热图用于展示各特征之间的相关强弱,通过颜色深浅体现正负相关关系,帮助快速识别冗余特征、强相关特征及可能影响模型稳定性的变量,为后续特征选择和建模提供参考。

🎲 二、散点密度图

散点密度图通过颜色或亮度反映点的聚集程度,用于展示大量样本的分布特征。相比普通散点图,它能更直观地呈现高密度区域、异常点及整体趋势,常用于回归分析与模型评估。以下为训练集和测试集出图效果。

🎲 三、贝叶斯搜索参数优化算法及示意图

🌟 1. 先构建一个“参数-效果”的概率模型

贝叶斯优化会根据每一次调参的表现,持续更新一份“这个参数组合大概率能获得更好效果”的认知。
这份认知由一个代理模型承担,通常是高斯过程或树结构模型。它不像网格搜索那样盲目,而是先学、再试

🌟 2. 通过“探索”与“利用”平衡选点

贝叶斯优化每次选新的参数时都会权衡:

  • 探索:去试试没探索过的区域,可能藏着宝贝

  • 利用:去当前最可能效果最好的区域,稳扎稳打 这种带策略的试验方式,让调参过程既高效又不容易错过最优解。

🌟 3. 不断用真实结果修正判断

每试一个参数组合,代理模型就会重新更新“信念”,并重新预测哪些区域值得继续尝试。
调参越往后,模型越“聪明”,搜索路径越精确。这就像一个不断学习经验的调参工程师,越调越准。

🌟 4. 收敛快,适用于高成本模型

因为每一次试验都很有价值,贝叶斯优化通常只需几十次实验就能找到非常优秀的超参数组合。
这对训练成本高的模型(XGBoost、LightGBM、CatBoost、深度学习)尤其友好。

🌟 5. 程序能画非常直观的可视化

该图展示贝叶斯优化过程中各超参数的重要性,对模型误差影响最大的为 n_estimators 和 learning_rate,其次为 max_depth,而 subsample 与 reg_lambda 贡献较小,用于判断调参优先级。

🎲 四、随机搜索参数优化算法及示意图

🌟 1、随机搜索是什么?

一句话概括:

随机搜索就是在超参数空间里不断“抽样试验”,从而找到表现最好的参数组合。

不同于按顺序走格子的调参方式,随机搜索会在整个参数空间中“自由跳跃”,每次从可能区域里随机挑选出一个参数组合,用最直接的方式评估模型的表现。

🌟 2、它的核心思路其实很聪明

虽然名字叫“随机”,但它背后的逻辑却非常高效。

✔ 1. 更广的覆盖范围

每次抽取的点都可能落在搜索空间的不同区域,让模型在有限的预算里探索更多潜在好参数。

✔ 2. 支持多种采样策略

你可以让 learning_rate 以对数分布抽取、让 n_estimators 偏向更大值,这让随机搜索能更贴近真实优化需求。

✔ 3. 每一次试验都独立有效

不依赖复杂的历史记录,适用于快速尝试、快速验证的场景。

换句话说:它简单,但“简单得很有效”。

🌟 3、为什么它在实际调参中被广泛使用?

在许多模型中,超参数空间往往非常大,比如:

  • XGBoost 的树深、学习率、子采样比例

  • 神经网络的学习率、层数、节点数

  • CatBoost、LightGBM 的几十种可调参数

随机搜索能在这些复杂空间里迅速落点—— 不需要把所有组合都跑一遍,也不需要构建额外的代理模型,只需要不断抽样并测试结果。尤其在遥感反演、深度学习任务中,这种轻量但高覆盖的方式,往往能快速找到一个令人满意的初步最优解。

🌟 4、它适合什么场景?

简单总结几个典型应用:

  • 模型初调:快速找到可行参数范围

  • 大搜索空间:超参数众多、组合巨大时

  • 训练成本高:希望用少量试验找到较好解

  • 模型表现敏感:需要探索更大范围避免局部最优

这也是为什么随机搜索常被当作调参的起步策略,先探索,再进一步细化。

🌟 5. 程序能画非常直观的可视化

该图为超参数的成对散点矩阵图,展示不同超参数之间的分布特征与潜在关系,对角线上为各参数的概率密度分布,可用于分析参数空间结构与抽样多样性。

该图展示超参数与模型误差的相关性重要性排名,不同柱状高度反映各参数对 RMSE 的影响强弱,其中 reg_alpha、max_depth 和 learning_rate 贡献最高,有助于确定调参重点方向。

🎲 五、网格搜索参数优化算法及示意图

🌟 1、网格搜索是什么?

一句话概括:

网格搜索就是把所有设定好的超参数组合排成一个“网格”,逐个尝试,通过评估结果找到表现最佳的那一组参数。

就像在一个二维或多维坐标空间里,把所有候选参数都排列出来,然后把每个点都跑一遍,最终选出模型表现最优的位置。

🌟 2、它的核心原则:全面、稳定、逐点验证

网格搜索的理念非常直观:

  • 先定义每个参数可能的取值范围

  • 再把这些取值组合成一个完整网格

  • 然后对每个组合进行模型训练与验证

  • 最后选择最优结果对应的参数

这是一种系统化、无遗漏的搜索方式。它不会遗漏,也不会偏向,它用最直接的方式告诉你: 哪个参数组合最适合你的模型。

🌟 3、为什么网格搜索常被用作调参基础流程?

网格搜索的价值主要体现在几个方面:

✔ 1. 结构清晰、可控性强

你可以完全决定参数候选集,调参过程完全透明。

✔ 2. 适用于小范围、精细化的参数探索

特别适合探索学习率、树深、正则项等关键参数的小步长变化。

✔ 3. 方便结合交叉验证

与 Cross-Validation 结合后,能够获得稳定、可靠的参数评估结果。

✔ 4. 结果可复现、可追踪

每个组合都被尝试过,调参过程完整记录,适合科研工作。

🌟 4、典型应用场景

网格搜索广泛应用于:

  • XGBoost / LightGBM / CatBoost的关键参数精调

  • SVM、随机森林、岭回归等模型的标准调参

  • 小规模搜索空间的系统验证

  • 科研论文中要求严谨、可复现的实验设计

在你的任务里,网格搜索非常适合用于关键参数的局部精调,确保模型在最佳点附近充分探索。

🌟 5. 程序能画非常直观的可视化

该图展示 GridSearchCV 调参过程中各超参数与 RMSE 的相关性重要性,其中 learning_rate、reg_alpha 和 n_estimators 影响最明显,可用于识别关键参数并指导后续调参方向。

5 代码包含具体内容一览

并将训练集和测试集的精度评估指标保存到 metrics. Mat 矩阵中。共两行,第一行代表训练集的,第二行代表测试集的;共 7 个精度评估指标,分别代表 R, R2, ME, MAE, MAPE, RMSE 以及样本数量。

保存的regression_result.mat数据中分别保存了名字为Y_train、y_pred_train、y_test、y_pred_test的矩阵向量。

同样的针对大家各自的数据训练出的模型结构也保存在model.json中,方便再一次调用。

调用的程序我在程序中注释了,如下

# 加载模型 # model.load_model("model.json")

主程序如下,其中从1-10,每一步都有详细的注释,要获取完整程序,请转下文代码获取

# ========================================================= # 主程序 # ========================================================= def main(): print("=== 1. 读取数据 ===") data = pd.read_excel("data.xlsx") X = data.iloc[:, :10].values y = data.iloc[:, 10].values feature_names = list(data.columns[:10]) print("=== 2. 划分训练与测试 ===") X_train, X_test, y_train, y_test = train_test_split( X, y, test_size=0.2, random_state=42 ) print("=== 3. 归一化 ===") scaler_X = MinMaxScaler() scaler_y = MinMaxScaler() X_train_norm = scaler_X.fit_transform(X_train) X_test_norm = scaler_X.transform(X_test) y_train_norm = scaler_y.fit_transform(y_train.reshape(-1, 1)).ravel() print("=== 4. 模型训练 ===") model = train_model(X_train_norm, y_train_norm) print("=== 5. 预测(反归一化到原始尺度) ===") y_pred_train_norm = model.predict(X_train_norm) y_pred_test_norm = model.predict(X_test_norm) y_pred_train = scaler_y.inverse_transform( y_pred_train_norm.reshape(-1, 1) ).ravel() y_pred_test = scaler_y.inverse_transform( y_pred_test_norm.reshape(-1, 1) ).ravel() print("=== 6. 模型评估 ===") metrics_train = evaluate_model(y_train, y_pred_train) metrics_test = evaluate_model(y_test, y_pred_test) print("\n训练集评估指标:") for k, v in metrics_train.items(): print(f" {k}: {v:.4f}" if isinstance(v, float) else f" {k}: {v}") print("\n测试集评估指标:") for k, v in metrics_test.items(): print(f" {k}: {v:.4f}" if isinstance(v, float) else f" {k}: {v}") print("=== 7. 保存结果到 MAT 文件 ===") result_dict = { "y_train": y_train.astype(float), "y_pred_train": y_pred_train.astype(float), "y_test": y_test.astype(float), "y_pred_test": y_pred_test.astype(float), } savemat("regression_result.mat", result_dict) print("已保存 regression_result.mat") # 按指标顺序排列 metrics_matrix = np.array([ [metrics_train['R'], metrics_test['R']], [metrics_train['R2'], metrics_test['R2']], [metrics_train['ME'], metrics_test['ME']], [metrics_train['MAE'], metrics_test['MAE']], [metrics_train['MAPE'], metrics_test['MAPE']], [metrics_train['RMSE'], metrics_test['RMSE']], [metrics_train['样本数'], metrics_test['样本数']] ], dtype=float) savemat("metrics.mat", {"metrics": metrics_matrix}) print("已保存 metrics.mat(矩阵大小 7×2)") print("=== 8. SHAP 分析 ===") X_combined = np.vstack([X_train_norm, X_test_norm]) X_df = pd.DataFrame(X_combined, columns=feature_names) # shap_results = shap_analysis(model, X_combined, feature_names) plot_shap_dependence(model, X_combined, feature_names, X_df) print("=== 9. 密度散点图 ===") plot_density_scatter( y_test, y_pred_test, save_path="scatter_density_test.png" ) plot_density_scatter( y_train, y_pred_train, save_path="scatter_density_train.png" ) print("=== 10. 相关性热图 ===") correlation_heatmap(data, feature_names) print("=== 完成!===") if __name__ == "__main__": main()

6 代码获取

Python | K折交叉验证的参数优化的支持向量机回归(SVR)预测及可视化算法(包括基础算法、贝叶斯搜索参数优化、随机搜索参数优化及网格搜索参数优化共4组算法)

https://mbd.pub/o/bread/YZWalJhyZg==

新手小白/python 初学者请先根据如下链接教程配置环境,只需要根据我的教程即可,不需要安装 Python 及 pycharm 等软件。如有其他问题可加微信沟通。

Anaconda 安装教程(保姆级超详解)【附安装包+环境玩转指南】

https://mp.weixin.qq.com/s/uRI31yf-NjZTPY5rTXz4eA

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/15 16:55:39

生产环境部署OCR:负载测试与稳定性优化建议

生产环境部署OCR:负载测试与稳定性优化建议 引言:从通用OCR需求到生产级挑战 随着数字化转型的深入,光学字符识别(OCR)技术已成为企业自动化流程中的关键一环。无论是发票识别、合同解析还是智能客服中的图文理解&…

作者头像 李华
网站建设 2026/4/15 8:54:16

Whitebox Tools地理空间分析终极指南

Whitebox Tools地理空间分析终极指南 【免费下载链接】whitebox-tools An advanced geospatial data analysis platform 项目地址: https://gitcode.com/gh_mirrors/wh/whitebox-tools 想要快速掌握专业级的地理空间数据分析技能吗?Whitebox Tools作为一款强…

作者头像 李华
网站建设 2026/4/7 22:34:50

AIClient-2-API终极指南:零成本构建AI应用的全栈解决方案

AIClient-2-API终极指南:零成本构建AI应用的全栈解决方案 【免费下载链接】AIClient-2-API Simulates Gemini CLI, Qwen Code, and Kiro client requests, compatible with the OpenAI API. It supports thousands of Gemini model requests per day and offers fre…

作者头像 李华
网站建设 2026/4/11 11:01:43

金融播报场景落地:Sambert-Hifigan生成股市行情每日简报

金融播报场景落地:Sambert-Hifigan生成股市行情每日简报 📌 引言:让AI为金融信息注入“人声温度” 在金融科技快速发展的今天,自动化、智能化的信息服务已成为提升用户体验的关键。尤其在金融播报这一高频、标准化的场景中&…

作者头像 李华
网站建设 2026/4/13 9:50:58

边缘计算场景:Sambert-Hifigan小型化部署实验

边缘计算场景:Sambert-Hifigan小型化部署实验 📌 引言:中文多情感语音合成的边缘化需求 随着智能硬件与物联网技术的快速发展,边缘计算已成为AI模型落地的关键路径。在语音交互场景中,传统云端TTS(Text-to-…

作者头像 李华
网站建设 2026/4/14 18:19:39

零基础入门:如何用快马创建内网通积分码生成器?

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 创建一个适合新手的内网通积分码生成器教程项目。功能包括:1. 用户输入积分码长度和数量;2. 点击按钮生成积分码;3. 显示生成的积分码列表&…

作者头像 李华