常用的三种机器学习预测方法

以下代码统一为读入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('原始数据','新数据预测');

posted @ 2020-07-14 08:40  赤沙咀-菜虚坤  阅读(507)  评论(0编辑  收藏  举报