以下代码统一为读入xlsx文件,其中第一列为因变量,其余列为自变量,每一行代表一个样本
(matlab代码)
线性回归
%读取数据
[X,TXT,RAW]=xlsread('train_element.xlsx');
y=X(:,1); %第一列为y值
X(:,1)=[1]; %将第一列数值变为1
[b,bint,r,rint,stats]=regress(y,X);
b %回归系数,第一个是常数项
%测试
[TX,TXT,RAW]=xlsread('test_element.xlsx');
TY_num = size(TX,1);
TY = [1:TY_num];
TY(1,:) = b(1);
for i = 1:30 %测试数据30行
for j = 1:21 %每一行21个自变量
TY(i) = TX(i,j+1) * b(j+1)+TY(i); % TX第一个是1,故j+1;b第一个是常数项系数,故j+1
end
end
hold on
plot(TY)
plot(TX(:,1))
legend('预测值','真实值');
TY
BP网络
在应用程序处打开Neural Net Fitting
训练神经网络模型
参见 (如何利用matlab做BP神经网络分析-利用matlab神经网络工具箱)[ https://blog.csdn.net/ljyljyok/article/details/81362465 ]
function [ ] = BP_Forecast( X,TX )
load BP_202054_14.mat %导入网络模型
X = X'; %转置
Y=sim(net,X); %使用训练好的BP网络模型预测
SVM
function [ ] = SVM_R( X,TX )
%load svm_r %若没有数据则读取模型
%[X,TXT,RAW]=xlsread('train_element.xlsx'); %读取训练数据
target = X(:,1);
X(:,1) = [];
train = X;
%% 最优参数选择
mse = 10^7;
for log2c = -10:0.5:3
for log2g = -10:0.5:3
% -v 交叉验证参数:在训练的时候需要,测试的时候不需要,否则出错
options = ['-v 3 -c ', num2str(2^log2c), ' -g ', num2str(2^log2g) , ' -s 3 -p 0.4 -t 3'];
cv = svmtrain(target,train,options);
if (cv < mse)
mse = cv; bestc = 2^log2c; bestg = 2^log2g;
end
end
end
%% 训练
options = ['-c ', num2str(2^bestc), ' -g ', num2str(2^bestg) , ' -s 3 -p 0.4 -n 0.1'];
model = svmtrain(target,train,options)
% model
% 利用建立的模型看其在训练集合上的回归效果
[predict_p,accuracy,dv] = svmpredict(target,train,model);
figure
plot(target,'o')
hold on
plot(predict_p,'.')
test_target = TX(:,1); %这个随便给不影响预测的结果,但是会基于这个值计算预测准确率
TX(:,1)=[];
test_train = TX;
global dv_t
[predict_t,accuracy_t,dv_t] = svmpredict(test_target,test_train,model);
hold on
plot(predict_t,'*')
legend('原始数据','回归数据','新数据预测');
%直观对比
%hold on
%plot(TY)
%plot(dv_t)
%legend('原始数据','新数据预测');
hold on
plot(test_target)
plot(dv_t)
xlswrite('预测结果.xlsx',dv_t)
legend('原始数据','新数据预测');