我使用PCA
喂养训练集到神经网络前。它减少了13个功能下降到8和火车超过2200套的培训。我这得到梅普接近2.5 - 2.6%。如果我训练用简单的feedforwardnet
的原始数据,我得到的2.1%更低的误差。
我从一个类似的情况在不同的问题的痛苦,在那里我有接近50000点训练集合,其中PCA给出2.5%的误差,简单的人工神经网络给了我〜2%MAPE。这背后有什么原因?这是一个正常现象?你能不能给我任何方式,我可以减少误差?我试图预测天气和先前的负载数据的基础上,电力负荷需求。
编辑:(加碎石图)
我有同样的问题,因为你回来几个月前但支持向量机,而不是神经网络。那么,为什么你要这样的效果差的原因是因为你还没有喂养它到PCA功能之前标准化您的数据。您可以使用Matlab的mapminmax function做到这一点。由于mapminmax noramlizes行,你需要做的输入的转置和输出如下。
[normX,PS] = mapminmax( X' );
normX = normX';
max( normX ) % Returns 1
min( normX ) % Returns -1
要绘制的碎石图,您可以使用此代码。
[C,~,~,~,explained] = pca( normX );
figure; plot( explained );
这是碎石图。你也许可以让您的数据的前5个组件。
执行完最小最大映射,您可以按如下喂到你的神经网络。这是假设你想保持PC 1-5。
trainX = normX * C(:,1:5);
现在,如果你需要改变你的标准化数据回
returnedX = mapminmax( 'reverse', normX', PS );
returned = returnedX';
总的来说你的代码应该如下
% Normalize Data
[normX,PS] = mapminmax( X' );
normX = normX';
max( normX ) % Returns 1
min( normX ) % Returns -1
% Perform PCA
[C,~,~,~,explained] = pca( normX );
figure; plot( explained );
% Transform Data
trainX = normX * C(:,1:5);
编辑:性能我用来测试性能的代码如下。
clear all
load input
load output
% Normalize Data
[normX,PS] = mapminmax( X' );
normX = normX';
max( normX ) % Returns 1
min( normX ) % Returns -1
% Perform PCA
[C,~,~,~,explained] = pca( normX );
figure; plot( explained );
% Transform Data
trainX1 = normX(1:1826,:) * C(:,1:5);
trainX2 = X(1:1826,:);
trainY = dailyPeakLoad(1:1826);
testX1 = normX(1827:end,:) * C(:,1:5);
testX2 = X(1827:end,:);
testY = dailyPeakLoad(1827:end);
netFeb = newfit(trainX1', trainY', 35);
netFeb.performFcn = 'mae';
netFeb = trainlm(netFeb, trainX1', trainY');
forecastLoadFeb = sim(netFeb, testX1')';
errFeb = testY - forecastLoadFeb;
errpct = abs(errFeb)./testY*100;
MAPEFeb = mean(errpct(~isinf(errpct)));
netFeb2 = newfit(trainX2', trainY', 35);
netFeb2.performFcn = 'mae';
netFeb2 = trainlm(netFeb2, trainX2', trainY');
forecastLoadFeb2 = sim(netFeb2, testX2')';
errFeb2 = testY - forecastLoadFeb2;
errpct2 = abs(errFeb2)./testY*100;
MAPEFeb2 = mean(errpct(~isinf(errpct2)));
训练有素的NN在这里。这是一个与PCA。这是一个没有PCA的一个。
需要注意的是性能,因为初始值和迭代次数的不同。