-
Notifications
You must be signed in to change notification settings - Fork 0
/
gmdhpredict.m
87 lines (78 loc) · 2.79 KB
/
gmdhpredict.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
function Yq = gmdhpredict(model, Xq)
% GMDHPREDICT
% Predicts output values for the given query points Xq using a GMDH model
%
% Call
% [Yq] = gmdhpredict(model, Xq)
%
% Input
% model : GMDH model
% Xq : Inputs of query data points (Xq(i,:)), i = 1,...,nq
%
% Output
% Yq : Predicted outputs of query data points (Yq(i)), i = 1,...,nq
% This source code is tested with Matlab version 7.1 (R14SP3).
% =========================================================================
% GMDH-type polynomial neural network
% Version: 1.5
% Date: June 2, 2011
% Author: Gints Jekabsons (gints.jekabsons@rtu.lv)
% URL: http://www.cs.rtu.lv/jekabsons/
%
% Copyright (C) 2009-2011 Gints Jekabsons
%
% This program is free software: you can redistribute it and/or modify
% it under the terms of the GNU General Public License as published by
% the Free Software Foundation, either version 2 of the License, or
% (at your option) any later version.
%
% This program is distributed in the hope that it will be useful,
% but WITHOUT ANY WARRANTY; without even the implied warranty of
% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
% GNU General Public License for more details.
%
% You should have received a copy of the GNU General Public License
% along with this program. If not, see <http://www.gnu.org/licenses/>.
% =========================================================================
if nargin < 2
error('Too few input arguments.');
end
if model.d ~= size(Xq, 2)
error('The matrix should have the same number of columns as the matrix with which the network was built.');
end
[n, d] = size(Xq);
Yq = zeros(n, 1);
for q = 1 : n
for i = 1 : model.numLayers
if i ~= model.numLayers
Xq_tmp = zeros(1, model.layer(i).numNeurons);
end
for j = 1 : model.layer(i).numNeurons
%create matrix for all polynomial terms
numTerms = size(model.layer(i).terms(j).r,1);
Vals = ones(numTerms,1);
for idx = 2 : numTerms
bf = model.layer(i).terms(j).r(idx, :);
t = bf > 0;
tmp = Xq(q, model.layer(i).inputs(j,t)) .^ bf(1, t);
if size(tmp, 2) == 1
Vals(idx,1) = tmp;
else
Vals(idx,1) = prod(tmp, 2);
end
end
%predict output value
predY = model.layer(i).coefs(j,1:numTerms) * Vals;
if i ~= model.numLayers
%Xq(q, d+j) = predY;
Xq_tmp(j) = predY;
else
Yq(q) = predY;
end
end
if i ~= model.numLayers
Xq(q, d+1:d+model.layer(i).numNeurons) = Xq_tmp;
end
end
end
return