Free cookie consent management tool by TermsFeed Policy Generator

source: trunk/sources/HeuristicLab.ArtificialNeuralNetworks/3.2/MultiLayerPerceptronEvaluator.cs @ 3042

Last change on this file since 3042 was 2985, checked in by gkronber, 15 years ago

Fixed bugs in MLP operators, extended operators to work for time series prognosis and added pre-configured engine for time series prognosis with MLP. #882 (Artificial neural networks engine for time series prognosis)

File size: 4.6 KB
RevLine 
[2562]1#region License Information
2/* HeuristicLab
3 * Copyright (C) 2002-2009 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
4 *
5 * This file is part of HeuristicLab.
6 *
7 * HeuristicLab is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 3 of the License, or
10 * (at your option) any later version.
11 *
12 * HeuristicLab is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
19 */
20#endregion
21
22using System;
23using System.Collections.Generic;
24using System.Linq;
25using System.Text;
26using HeuristicLab.Core;
27using HeuristicLab.Data;
28using HeuristicLab.DataAnalysis;
29
30namespace HeuristicLab.ArtificialNeuralNetworks {
31  public class MultiLayerPerceptronEvaluator : OperatorBase {
32
33    public MultiLayerPerceptronEvaluator()
34      : base() {
35      //Dataset infos
36      AddVariableInfo(new VariableInfo("Dataset", "Dataset with all samples on which to apply the function", typeof(Dataset), VariableKind.In));
37      AddVariableInfo(new VariableInfo("TargetVariable", "Name of the target variable", typeof(StringData), VariableKind.In));
38      AddVariableInfo(new VariableInfo("InputVariables", "List of allowed input variable names", typeof(ItemList), VariableKind.In));
39      AddVariableInfo(new VariableInfo("SamplesStart", "Start index of samples in dataset to evaluate", typeof(IntData), VariableKind.In));
40      AddVariableInfo(new VariableInfo("SamplesEnd", "End index of samples in dataset to evaluate", typeof(IntData), VariableKind.In));
41      AddVariableInfo(new VariableInfo("MaxTimeOffset", "(optional) Maximal allowed time offset for input variables", typeof(IntData), VariableKind.In));
42      AddVariableInfo(new VariableInfo("MinTimeOffset", "(optional) Minimal allowed time offset for input variables", typeof(IntData), VariableKind.In));
43      AddVariableInfo(new VariableInfo("MultiLayerPerceptron", "Represent the model learned by the SVM", typeof(MultiLayerPerceptron), VariableKind.In));
44      AddVariableInfo(new VariableInfo("Values", "Target vs predicted values", typeof(DoubleMatrixData), VariableKind.New | VariableKind.Out));
45    }
46
47
48    public override IOperation Apply(IScope scope) {
49      Dataset dataset = GetVariableValue<Dataset>("Dataset", scope, true);
50      ItemList inputVariables = GetVariableValue<ItemList>("InputVariables", scope, true);
51      var inputVariableNames = from x in inputVariables
52                               select ((StringData)x).Data;
53      string targetVariable = GetVariableValue<StringData>("TargetVariable", scope, true).Data;
[2985]54      // int targetVariableIndex = dataset.GetVariableIndex(targetVariable);
[2562]55      int start = GetVariableValue<IntData>("SamplesStart", scope, true).Data;
56      int end = GetVariableValue<IntData>("SamplesEnd", scope, true).Data;
57      IntData minTimeOffsetData = GetVariableValue<IntData>("MinTimeOffset", scope, true, false);
58      int minTimeOffset = minTimeOffsetData == null ? 0 : minTimeOffsetData.Data;
59      IntData maxTimeOffsetData = GetVariableValue<IntData>("MaxTimeOffset", scope, true, false);
60      int maxTimeOffset = maxTimeOffsetData == null ? 0 : maxTimeOffsetData.Data;
61      MultiLayerPerceptron model = GetVariableValue<MultiLayerPerceptron>("MultiLayerPerceptron", scope, true);
62
[2985]63      double[] targetVector;
64      double[,] inputMatrix;
65      MultiLayerPerceptronRegressionOperator.PrepareDataset(dataset, targetVariable, inputVariableNames, start, end, minTimeOffset, maxTimeOffset,
66        out inputMatrix, out targetVector);
67
68      double[,] values = new double[targetVector.Length, 2];
69      for (int i = 0; i < targetVector.Length; i++) {
[2562]70        double[] output = new double[1];
[2985]71        double[] inputRow = new double[inputMatrix.GetLength(1)];
72        for (int c = 0; c < inputRow.Length; c++) {
73          inputRow[c] = inputMatrix[i, c];
[2562]74        }
75        alglib.mlpbase.multilayerperceptron p = model.Perceptron;
76        alglib.mlpbase.mlpprocess(ref p, ref inputRow, ref output);
77        model.Perceptron = p;
[2985]78        values[i, 0] = targetVector[i];
[2562]79        values[i, 1] = output[0];
80      }
81
82      scope.AddVariable(new HeuristicLab.Core.Variable(scope.TranslateName("Values"), new DoubleMatrixData(values)));
83      return null;
84    }
85  }
86}
Note: See TracBrowser for help on using the repository browser.