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


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

  • 4
    点赞
  • 86
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值