基本GM(1,1)

data = csvread('D:\matlab2016a\demo\data\air.csv');%导入数据
num = size(data,1);%样本数
predictnum = 6;%设置预测记录数
train = data(1:num-predictnum,:);%训练样本数
test = data((num-predictnum+1):end,:);%测试样本数

%做累加
for i = 1:size(train,1)
    X(i,:) = sum(train(1:i,:));
end

%计算参数a和b
Y = train(2:end,:);

for j = 2:size(X,1)
    Z(j-1,:) = (X(j,:)+X(j-1,:))/2;
end
B = [-Z,ones(size(Z,1),1)];

ab = inv(B'*B)*B'*Y;
a = ab(1,:);
b = ab(2,:);

%进行预测
for i = 2:num
    predict(i-1,:) = (X(1,:)-b/a)*(1-exp(a))*exp(-a*(i-1));
end

%结果可视化
predict_train = predict(1:size(train,1)-1,:);
predict_test = predict((size(train,1)):end,:);

train_rmse = sqrt(sum((predict_train-train(2:end,:)).^2)/length(predict_train));
train_mape = sum(abs((predict_train-train(2:end,:))./train(2:end,:)))/length(predict_train);
test_rmse = sqrt(sum((predict_test-test).^2)/length(predict_test));
test_mape = sum(abs((predict_test-test)./test))/length(predict_test);

disp(['Train rmse = ',num2str(train_rmse),' Train mape = ',num2str(train_mape*100)])
disp(['Test rmse = ',num2str(test_rmse),' Test mape = ',num2str(test_mape*100)])

Train rmse = 179.0128 Train mape = 6.0036
Test rmse = 246.3447 Test mape = 3.6754

 

猜你喜欢

转载自blog.csdn.net/qq_42394743/article/details/84478993
今日推荐