Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
10/20/09 11:20:13 (15 years ago)
Author:
gkronber
Message:

Fixed #784 (ProblemInjector should be changed to read variable names instead of indexes for input and target variables)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/sources/HeuristicLab.Modeling/3.2/ProblemInjector.cs

    r2174 r2440  
    4141      AddVariable(new Variable("Dataset", new Dataset()));
    4242
    43       AddVariableInfo(new VariableInfo("TargetVariable", "TargetVariable", typeof(IntData), VariableKind.New));
     43      AddVariableInfo(new VariableInfo("TargetVariable", "TargetVariable", typeof(StringData), VariableKind.New));
    4444      GetVariableInfo("TargetVariable").Local = true;
    45       AddVariable(new Variable("TargetVariable", new IntData()));
     45      AddVariable(new Variable("TargetVariable", new StringData()));
    4646
    47       AddVariableInfo(new VariableInfo("AllowedFeatures", "Indexes of allowed input variables", typeof(ItemList<IntData>), VariableKind.New));
     47      AddVariableInfo(new VariableInfo("AllowedFeatures", "Indexes of allowed input variables", typeof(ItemList<StringData>), VariableKind.In));
    4848      GetVariableInfo("AllowedFeatures").Local = true;
    49       AddVariable(new Variable("AllowedFeatures", new ItemList<IntData>()));
     49      AddVariable(new Variable("AllowedFeatures", new ItemList<StringData>()));
    5050
    5151      AddVariableInfo(new VariableInfo("TrainingSamplesStart", "TrainingSamplesStart", typeof(IntData), VariableKind.New));
     
    9494
    9595      Dataset operatorDataset = (Dataset)GetVariable("Dataset").Value;
    96       int targetVariable = ((IntData)GetVariable("TargetVariable").Value).Data;
    97       ItemList<IntData> operatorAllowedFeatures = (ItemList<IntData>)GetVariable("AllowedFeatures").Value;
     96      string targetVariable = ((StringData)GetVariable("TargetVariable").Value).Data;
     97      ItemList<StringData> operatorAllowedFeatures = (ItemList<StringData>)GetVariable("AllowedFeatures").Value;
    9898
    9999      Dataset scopeDataset = CreateNewDataset(operatorDataset, targetVariable, operatorAllowedFeatures);
     
    104104
    105105      scope.AddVariable(new Variable(scope.TranslateName("Dataset"), scopeDataset));
    106       scope.AddVariable(new Variable(scope.TranslateName("TargetVariable"), new IntData(0)));
     106      scope.AddVariable(new Variable(scope.TranslateName("TargetVariable"), new StringData(targetVariable)));
    107107      scope.AddVariable(new Variable(scope.TranslateName("NumberOfInputVariables"), new IntData(scopeDataset.Columns - 1)));
    108108      scope.AddVariable(new Variable(scope.TranslateName("InputVariables"), inputVariables));
     
    127127    }
    128128
    129     private Dataset CreateNewDataset(Dataset operatorDataset, int targetVariable, ItemList<IntData> operatorAllowedFeatures) {
    130       int columns = (operatorAllowedFeatures.Count() + 1);
    131       double[] values = new double[operatorDataset.Rows * columns];
    132 
    133       for (int i = 0; i < values.Length; i++) {
    134         int row = i / columns;
    135         int column = i % columns;
    136         if (column == 0) {
    137           values[i] = operatorDataset.GetValue(row, targetVariable);
    138         } else {
    139           values[i] = operatorDataset.GetValue(row, operatorAllowedFeatures[column-1].Data);
     129    private Dataset CreateNewDataset(Dataset operatorDataset, string targetVariable, ItemList<StringData> operatorAllowedVariables) {
     130      int columns = (operatorAllowedVariables.Count() + 1);
     131      int rows = operatorDataset.Rows;
     132      double[] values = new double[rows * columns];
     133      int targetVariableIndex = operatorDataset.GetVariableIndex(targetVariable);
     134      for (int row = 0; row < rows; row++) {
     135        int column = 0;
     136        values[row*columns + column] = operatorDataset.GetValue(row, targetVariableIndex); // set target variable value to column index 0
     137        column++; // start input variables at column index 1
     138        foreach (var inputVariable in operatorAllowedVariables) {
     139          int variableColumnIndex = operatorDataset.GetVariableIndex(inputVariable.Data);
     140          values[row * columns + column] = operatorDataset.GetValue(row, variableColumnIndex);
     141          column++;
    140142        }
    141143      }
     
    148150      double[] scalingFactor = new double[columns];
    149151      double[] scalingOffset = new double[columns];
    150       ds.SetVariableName(0, operatorDataset.GetVariableName(targetVariable));
    151       scalingFactor[0] = operatorDataset.ScalingFactor[targetVariable];
    152       scalingOffset[0] = operatorDataset.ScalingOffset[targetVariable];
     152      ds.SetVariableName(0, targetVariable);
     153      scalingFactor[0] = operatorDataset.ScalingFactor[targetVariableIndex];
     154      scalingOffset[0] = operatorDataset.ScalingOffset[targetVariableIndex];
    153155      for (int column = 1; column < columns; column++) {
    154         ds.SetVariableName(column, operatorDataset.GetVariableName(operatorAllowedFeatures[column - 1].Data));
    155         scalingFactor[column] = operatorDataset.ScalingFactor[operatorAllowedFeatures[column - 1].Data];
    156         scalingOffset[column] = operatorDataset.ScalingOffset[operatorAllowedFeatures[column - 1].Data];
     156        int variableColumnIndex = operatorDataset.GetVariableIndex(operatorAllowedVariables[column - 1].Data);
     157        ds.SetVariableName(column, operatorAllowedVariables[column - 1].Data);
     158        scalingFactor[column] = operatorDataset.ScalingFactor[variableColumnIndex];
     159        scalingOffset[column] = operatorDataset.ScalingOffset[variableColumnIndex];
    157160      }
    158161      ds.ScalingOffset = scalingOffset;
Note: See TracChangeset for help on using the changeset viewer.