MATLAB代码:
clc;clear all;close all;warning off;%关闭警报
%% 多元线性回归
data=xlsread('归一化数据.xls');
Inputdata=data(:,2:end)';%载入输入数据
Outputdata=data(:,1)';%载入输出数据
% index1=1:length(Outputdata);%顺序样本
index1=randperm(length(Outputdata));%随机样本
numberTest=5;%用于测试的样本个数(数据集的最后numberTest个作为测试样本) ,可以修改!!
% % 定义训练集
P1=Inputdata(:,index1(1:end-numberTest));
T1=Outputdata(:,index1(1:end-numberTest));
% 定义测试集(用最后10个样本做测试)
P2=Inputdata(:,index1(end-numberTest+1:end));
T2=Outputdata(:,index1(end-numberTest+1:end));
trainin=P1;% 训练参数之输入,数据格式与神经网络一致,一列是一个样本
trainout=T1;% 训练参数之输出,数据格式与神经网络一致,一列是一个样本
testin=P2;% 测试参数之输入,数据格式与神经网络一致,一列是一个样本
testout=T2;% 测试参数之输出,数据格式与神经网络一致,一列是一个样本
[yp,yreal,b]=myregressfun(trainin,trainout,testin,testout);% 调用自己写的多元线性回归函数进行模型训练和预测
% yp为预测值,yreal为实际值,b为拟合的参数
function [yp,yreal,b]=myregressfun(trainin,trainout,testin,testout)
y = trainout';%一行一个样本
x1=trainin(2,:)';
x2=trainin(3,:)';
x3=trainin(4,:)';
X = [ones(size(trainin',1),1),trainin',x1.*x2.*x3];
b = regress(y,X);
x1=testin(2,:)';
x2=testin(3,:)';
x3=testin(4,:)';
Xp=[ones(size(testin',1),1),testin',x1.*x2.*x3];
yp=Xp*b;
yp=yp';
yreal=testout;
数据:
obs | x1 | x2 | x3 |
2001 | 125.00 | 2098.91 | 129.32 |
2002 | 458.00 | 2734.51 | 175.44 |
2003 | 697.00 | 3403.88 | 233.10 |
2004 | 884.00 | 4261.37 | 287.17 |
2005 | 920.00 | 4770.76 | 334.29 |
2006 | 1831.00 | 7792.07 | 401.30 |
2007 | 1882.00 | 8117.20 | 462.70 |
2008 | 2031.00 | 9701.96 | 503.45 |
2009 | 2200.00 | 11096.28 | 468.03 |
2010 | 2540.00 | 12728.05 | 582.43 |
2011 | 3880.81 | 13930.52 | 646.07 |
2012 | 6166.18 | 16186.44 | 720.14 |
2013 | 8177.24 | 19100.00 | 800.80 |
2014 | 12416.14 | 20500.00 | 857.24 |
程序结果如下: