SVM回归预测算法 – 基于支持向量机的回归分析【Python】

最后更新于:2025-10-29 00:57:01

最后更新于:2025-10-27 18:00:00

一、代码运行环境

  • Python: Python 3.6+
  • 依赖库: numpy, scikit-learn, matplotlib
  • 可以通过pip install -r requirements.txt命令安装所有依赖。

二、程序介绍

本代码提供了一个完整的基于Python的SVM回归预测解决方案,适用于各类回归问题。

程序文件结构
SVM_Regression/
│
├── demoSVM_Regression.py   // 主运行脚本
├── FunRegSVM.py            // 核心SVM回归函数
├── housing.txt             // 演示数据集(波士顿房价)
├── requirements.txt        // Python依赖库列表
└── figure/                 // 存放结果图片的文件夹
    ├── 图1.png
    ├── 图2.png
    ├── 图3.png
    └── 图4.png
文件说明

1. demoSVM_Regression.py

  • 说明:主运行脚本,演示了如何调用FunRegSVM函数。包含了数据加载、参数配置和函数调用等完整流程。
  • 运行结果:
  • 程序会生成4张分析图表,保存在figure文件夹下。
  • 图1:训练集拟合效果
图1
  • 图2:测试集预测效果
图2
  • 图3:真实值与预测值对比
图3
  • 图4:性能指标对比
图4

2. FunRegSVM.py

  • 说明:封装了SVM回归的核心功能,包括数据归一化、模型训练、预测评估和结果可视化。
  • 函数定义及参数解释:
      def FunRegSVM(X: np.ndarray, Y: np.ndarray, options: Optional[Dict] = None) -> Tuple[np.ndarray, np.ndarray, Dict]:
      """
      SVM回归预测函数
      
      Parameters:
      -----------
      X : np.ndarray
          输入特征矩阵 [n_samples, n_features]
      Y : np.ndarray
          输出目标向量 [n_samples,]
      options : Dict, optional
          参数设置字典:
          - rTrain: 训练集比例 (默认0.7)
          - kernel: 核函数 'linear'|'rbf'|'poly' (默认'rbf')
          - C: 惩罚系数 (默认1.0)
          - epsilon: 容忍带宽度ε (默认0.1)
          - gamma: 核函数系数 (默认'scale')
          - figflag: 是否绘图 (默认True)
      
      Returns:
      --------
      foreData : np.ndarray
          测试集预测结果
      foreDataTrain : np.ndarray
          训练集拟合结果
      info : Dict
          包含模型、评价指标等的详细信息
      """

3. requirements.txt

  • 说明:包含了运行此代码所需的所有Python第三方库及其版本,方便用户快速配置环境。

三、快速开始

1. 配置环境

  • 打开终端或命令行窗口,进入代码所在目录。
  • 运行 pip install -r requirements.txt 来安装所有必要的依赖库。

2. 运行测试脚本

  • 在终端中运行命令 python demoSVM_Regression.py
  • 程序将自动执行训练和预测,并在完成后显示结果图,同时在figure文件夹中保存图片。

3. 修改/导入数据

  • 打开 demoSVM_Regression.py 文件,修改数据加载部分:
      # 将'your_data.txt'替换为您的数据文件名
      data = np.loadtxt('your_data.txt')
      X = data[:, :-1]  # 假设除最后一列外都是特征
      Y = data[:, -1]   # 假设最后一列是目标值
  • 请确保数据格式为纯文本,可以使用numpy.loadtxt正确加载。
  • 关于更详细的数据导入方法,如Excel、CSV、.mat等,可以参考这篇详细教程:Python的数据导入

4. 调整模型参数

  • demoSVM_Regression.py 中,可以直接修改 options 字典来调整模型参数:
      options = {
          'rTrain': 0.8,       # 训练集比例
          'kernel': 'rbf',     # 核函数: 'linear', 'poly', 'sigmoid'
          'C': 10.0,           # 惩罚系数
          'epsilon': 0.1,      # 容忍带宽度ε
          'gamma': 0.01,       # 核函数系数
      }

参数调优建议: 1. 从默认参数开始,重点关注Cgamma(当kernelrbf时)。 2. 如果模型过拟合,尝试减小Cgamma。 3. 如果模型欠拟合,尝试增大Cgamma。 4. 使用scikit-learnGridSearchCV进行系统的参数搜索是找到最优参数的最佳实践。

四、关于完整版与公开版代码

> 代码分为完整版和公开版(试用版),以满足不同用户的需求。

功能完整版公开版
数据导入、参数设置
软件全部源码×
核心函数源码完整可见加密(.pyd文件)
数据样本数限制无限制最大100个样本
画图水印无水印有水印标识
视频教程×
技术支持提供技术支持无技术支持
代码注释详细注释部分注释


📥 五、获取公开版程序

SVM回归预测_Python试用版


💎 六、获取完整版程序

点击下面”立即支付“按钮,付款后获取完整版代码下载链接和售后联系方式~付款完成后刷新一下本页面即可看到下载链接。

(注意:支付跳转失败的话,请使用浏览器打开本页面)

您需要先支付 38元 才能查看此处内容!立即支付

七、完整版代码重要更新

  • 2025-10-27: 完成初版代码
  • 实现基于scikit-learn SVR的回归预测
  • 支持多种核函数
  • 提供完整的性能评估指标
  • 生成4种可视化结果
  • 自动保存图片到figure文件夹

八、常见问题

Q1: pip install失败怎么办?

A: 1. 检查网络连接,尝试更换pip镜像源:pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple 2. 确保您的Python和pip是最新版本。 3. 部分库(如numpy)编译时可能需要C++环境,可以尝试从官网下载预编译的wheel文件进行安装。

Q2: 预测结果R²很低或为负数?

A: 1. 数据问题:检查输入数据是否存在大量噪声、异常值,或者特征与目标值之间根本没有强相关性。 2. 参数问题Cgamma参数非常敏感。过大或过小都可能导致模型性能急剧下降。强烈建议使用网格搜索调优。 3. 归一化问题:代码默认进行归一化。如果您的数据已经归一化,请设置options['mapflag'] = False

Q3: 如何保存训练好的模型?

A:demoSVM_Regression.py运行后,模型保存在info['model']中。推荐使用joblib库:

import joblib

# ...运行FunRegSVM之后...
# 保存模型
joblib.dump(info['model'], 'my_svm_model.pkl')
# 同时保存归一化工具
joblib.dump(info['scalerX'], 'my_scaler_x.pkl')
joblib.dump(info['scalerY'], 'my_scaler_y.pkl')
Q4: 如何用训练好的模型预测新数据?
import joblib
import numpy as np

# 加载模型和归一化工具
loaded_model = joblib.load('my_svm_model.pkl')
scaler_x = joblib.load('my_scaler_x.pkl')
scaler_y = joblib.load('my_scaler_y.pkl')

# 假设newData是新的特征数据 (numpy array)
# 使用加载的scalerX对新数据进行归一化
newData_scaled = scaler_x.transform(newData)

# 预测
predictions_scaled = loaded_model.predict(newData_scaled)

# 使用加载的scalerY进行反归一化
final_predictions = scaler_y.inverse_transform(predictions_scaled.reshape(-1, 1))
print(final_predictions)

A: 加载模型和归一化工具,然后对新数据进行预测:

Q5: 如何引用本代码?

A: 如果在论文或报告中使用了本代码,建议注明:

代码来源:Mr.看海,SVM回归预测算法Python实现
网站:www.khsci.com/docs