Matlab实现支持向量回归机的程序,要求重构数据集,要求划分训练集和测试集,及要求做归一化处理,并以均方根差、平均绝对误差、平均相对百分误差衡量回归效果
时间: 2024-03-01 09:54:46 浏览: 61
基于支持向量机的数据回归预测-matlab程序
以下是一个 Matlab 实现支持向量回归机的程序,包括数据集重构、训练集测试集划分、归一化处理以及对回归效果的评估:
```matlab
% 重构数据集
data = csvread('data.csv', 1, 0);
x = data(:, 1:end-1);
y = data(:, end);
% 划分训练集和测试集
n = size(x, 1);
idx = randperm(n);
train_idx = idx(1:floor(0.7*n));
test_idx = idx(floor(0.7*n)+1:end);
x_train = x(train_idx, :);
y_train = y(train_idx);
x_test = x(test_idx, :);
y_test = y(test_idx);
% 归一化处理
x_mean = mean(x_train);
x_std = std(x_train);
y_mean = mean(y_train);
y_std = std(y_train);
x_train_norm = (x_train - x_mean) ./ x_std;
y_train_norm = (y_train - y_mean) ./ y_std;
x_test_norm = (x_test - x_mean) ./ x_std;
y_test_norm = (y_test - y_mean) ./ y_std;
% 训练 SVR 模型
C = 1;
epsilon = 0.1;
kernel = 'gaussian';
kpar = 1;
model = svr_train(x_train_norm, y_train_norm, C, epsilon, kernel, kpar);
% 预测测试集并评估回归效果
[y_pred, delta] = svr_predict(model, x_test_norm);
y_pred = y_pred .* y_std + y_mean;
y_test = y_test .* y_std + y_mean;
rmse = sqrt(mean((y_pred - y_test).^2));
mae = mean(abs(y_pred - y_test));
mape = mean(abs((y_pred - y_test) ./ y_test));
% 输出回归效果
disp(['均方根差:', num2str(rmse)]);
disp(['平均绝对误差:', num2str(mae)]);
disp(['平均相对百分误差:', num2str(mape*100), '%']);
```
其中,`data.csv` 是原始数据集,需要自行准备。程序首先读入数据集,然后将数据集随机划分为训练集和测试集,再对训练集和测试集进行归一化处理。接着使用训练集训练 SVR 模型,然后使用测试集预测结果并计算回归效果,最后输出均方根差、平均绝对误差和平均相对百分误差。
阅读全文