Changeset 15545


Ignore:
Timestamp:
12/19/17 12:14:52 (12 months ago)
Author:
mkommend
Message:

#2850: Corrected after deserialization hook of tSNE.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/TSNE/TSNEAlgorithm.cs

    r15532 r15545  
    5353    }
    5454    public new IDataAnalysisProblem Problem {
    55       get { return (IDataAnalysisProblem) base.Problem; }
     55      get { return (IDataAnalysisProblem)base.Problem; }
    5656      set { base.Problem = value; }
    5757    }
     
    8686    #region Parameter properties
    8787    public IFixedValueParameter<DoubleValue> PerplexityParameter {
    88       get { return (IFixedValueParameter<DoubleValue>) Parameters[PerplexityParameterName]; }
     88      get { return (IFixedValueParameter<DoubleValue>)Parameters[PerplexityParameterName]; }
    8989    }
    9090    public IFixedValueParameter<PercentValue> ThetaParameter {
    91       get { return (IFixedValueParameter<PercentValue>) Parameters[ThetaParameterName]; }
     91      get { return (IFixedValueParameter<PercentValue>)Parameters[ThetaParameterName]; }
    9292    }
    9393    public IFixedValueParameter<IntValue> NewDimensionsParameter {
    94       get { return (IFixedValueParameter<IntValue>) Parameters[NewDimensionsParameterName]; }
     94      get { return (IFixedValueParameter<IntValue>)Parameters[NewDimensionsParameterName]; }
    9595    }
    9696    public IConstrainedValueParameter<IDistance<double[]>> DistanceFunctionParameter {
    97       get { return (IConstrainedValueParameter<IDistance<double[]>>) Parameters[DistanceFunctionParameterName]; }
     97      get { return (IConstrainedValueParameter<IDistance<double[]>>)Parameters[DistanceFunctionParameterName]; }
    9898    }
    9999    public IFixedValueParameter<IntValue> MaxIterationsParameter {
    100       get { return (IFixedValueParameter<IntValue>) Parameters[MaxIterationsParameterName]; }
     100      get { return (IFixedValueParameter<IntValue>)Parameters[MaxIterationsParameterName]; }
    101101    }
    102102    public IFixedValueParameter<IntValue> StopLyingIterationParameter {
    103       get { return (IFixedValueParameter<IntValue>) Parameters[StopLyingIterationParameterName]; }
     103      get { return (IFixedValueParameter<IntValue>)Parameters[StopLyingIterationParameterName]; }
    104104    }
    105105    public IFixedValueParameter<IntValue> MomentumSwitchIterationParameter {
    106       get { return (IFixedValueParameter<IntValue>) Parameters[MomentumSwitchIterationParameterName]; }
     106      get { return (IFixedValueParameter<IntValue>)Parameters[MomentumSwitchIterationParameterName]; }
    107107    }
    108108    public IFixedValueParameter<DoubleValue> InitialMomentumParameter {
    109       get { return (IFixedValueParameter<DoubleValue>) Parameters[InitialMomentumParameterName]; }
     109      get { return (IFixedValueParameter<DoubleValue>)Parameters[InitialMomentumParameterName]; }
    110110    }
    111111    public IFixedValueParameter<DoubleValue> FinalMomentumParameter {
    112       get { return (IFixedValueParameter<DoubleValue>) Parameters[FinalMomentumParameterName]; }
     112      get { return (IFixedValueParameter<DoubleValue>)Parameters[FinalMomentumParameterName]; }
    113113    }
    114114    public IFixedValueParameter<DoubleValue> EtaParameter {
    115       get { return (IFixedValueParameter<DoubleValue>) Parameters[EtaParameterName]; }
     115      get { return (IFixedValueParameter<DoubleValue>)Parameters[EtaParameterName]; }
    116116    }
    117117    public IFixedValueParameter<BoolValue> SetSeedRandomlyParameter {
    118       get { return (IFixedValueParameter<BoolValue>) Parameters[SetSeedRandomlyParameterName]; }
     118      get { return (IFixedValueParameter<BoolValue>)Parameters[SetSeedRandomlyParameterName]; }
    119119    }
    120120    public IFixedValueParameter<IntValue> SeedParameter {
    121       get { return (IFixedValueParameter<IntValue>) Parameters[SeedParameterName]; }
     121      get { return (IFixedValueParameter<IntValue>)Parameters[SeedParameterName]; }
    122122    }
    123123    public IConstrainedValueParameter<StringValue> ClassesNameParameter {
    124       get { return (IConstrainedValueParameter<StringValue>) Parameters[ClassesNameParameterName]; }
     124      get { return (IConstrainedValueParameter<StringValue>)Parameters[ClassesNameParameterName]; }
    125125    }
    126126    public IFixedValueParameter<BoolValue> NormalizationParameter {
    127       get { return (IFixedValueParameter<BoolValue>) Parameters[NormalizationParameterName]; }
     127      get { return (IFixedValueParameter<BoolValue>)Parameters[NormalizationParameterName]; }
    128128    }
    129129    public IFixedValueParameter<BoolValue> RandomInitializationParameter {
    130       get { return (IFixedValueParameter<BoolValue>) Parameters[RandomInitializationParameterName]; }
     130      get { return (IFixedValueParameter<BoolValue>)Parameters[RandomInitializationParameterName]; }
    131131    }
    132132    public IFixedValueParameter<IntValue> UpdateIntervalParameter {
    133       get { return (IFixedValueParameter<IntValue>) Parameters[UpdateIntervalParameterName]; }
     133      get { return (IFixedValueParameter<IntValue>)Parameters[UpdateIntervalParameterName]; }
    134134    }
    135135    #endregion
     
    218218    [StorableHook(HookType.AfterDeserialization)]
    219219    private void AfterDeserialization() {
    220       if (Parameters.ContainsKey(RandomInitializationParameterName))
     220      if (!Parameters.ContainsKey(RandomInitializationParameterName))
    221221        Parameters.Add(new FixedValueParameter<BoolValue>(RandomInitializationParameterName, "Wether data points should be randomly initialized or according to the first 2 dimensions", new BoolValue(true)));
    222222      RegisterParameterEvents();
     
    284284      if (state == null) {
    285285        if (SetSeedRandomly) Seed = new System.Random().Next();
    286         var random = new MersenneTwister((uint) Seed);
     286        var random = new MersenneTwister((uint)Seed);
    287287        var dataset = problemData.Dataset;
    288288        var allowedInputVariables = problemData.AllowedInputVariables.ToArray();
     
    401401      var classificationData = problemData as ClassificationProblemData;
    402402      if (classificationData != null && classificationData.TargetVariable.Equals(ClassesName)) {
    403         var classNames = classificationData.ClassValues.Zip(classificationData.ClassNames, (v, n) => new {v, n}).ToDictionary(x => x.v, x => x.n);
     403        var classNames = classificationData.ClassValues.Zip(classificationData.ClassNames, (v, n) => new { v, n }).ToDictionary(x => x.v, x => x.n);
    404404        var classes = classificationData.Dataset.GetDoubleValues(classificationData.TargetVariable, allIndices).Select(v => classNames[v]).ToArray();
    405405        for (var i = 0; i < classes.Length; i++) {
     
    407407          dataRowNames[classes[i]].Add(i);
    408408        }
    409       }
    410       else if (((Dataset) problemData.Dataset).VariableHasType<string>(ClassesName)) {
     409      } else if (((Dataset)problemData.Dataset).VariableHasType<string>(ClassesName)) {
    411410        var classes = problemData.Dataset.GetStringValues(ClassesName, allIndices).ToArray();
    412411        for (var i = 0; i < classes.Length; i++) {
     
    414413          dataRowNames[classes[i]].Add(i);
    415414        }
    416       }
    417       else if (((Dataset) problemData.Dataset).VariableHasType<double>(ClassesName)) {
     415      } else if (((Dataset)problemData.Dataset).VariableHasType<double>(ClassesName)) {
    418416        var clusterdata = new Dataset(problemData.Dataset.DoubleVariables, problemData.Dataset.DoubleVariables.Select(v => problemData.Dataset.GetDoubleValues(v, allIndices).ToList()));
    419417        const int contours = 8;
     
    422420        double[][] borders;
    423421        CreateClusters(clusterdata, ClassesName, contours, out clusterModel, out contourMap, out borders);
    424         var contourorder = borders.Select((x, i) => new {x, i}).OrderBy(x => x.x[0]).Select(x => x.i).ToArray();
     422        var contourorder = borders.Select((x, i) => new { x, i }).OrderBy(x => x.x[0]).Select(x => x.i).ToArray();
    425423        for (var i = 0; i < contours; i++) {
    426424          var c = contourorder[i];
     
    432430        var allClusters = clusterModel.GetClusterValues(clusterdata, Enumerable.Range(0, clusterdata.Rows)).ToArray();
    433431        for (var i = 0; i < clusterdata.Rows; i++) dataRowNames[contourMap[allClusters[i] - 1]].Add(i);
    434       }
    435       else if (((Dataset) problemData.Dataset).VariableHasType<DateTime>(ClassesName)) {
     432      } else if (((Dataset)problemData.Dataset).VariableHasType<DateTime>(ClassesName)) {
    436433        var clusterdata = new Dataset(problemData.Dataset.DateTimeVariables, problemData.Dataset.DateTimeVariables.Select(v => problemData.Dataset.GetDoubleValues(v, allIndices).ToList()));
    437434        const int contours = 8;
     
    440437        double[][] borders;
    441438        CreateClusters(clusterdata, ClassesName, contours, out clusterModel, out contourMap, out borders);
    442         var contourorder = borders.Select((x, i) => new {x, i}).OrderBy(x => x.x[0]).Select(x => x.i).ToArray();
     439        var contourorder = borders.Select((x, i) => new { x, i }).OrderBy(x => x.x[0]).Select(x => x.i).ToArray();
    443440        for (var i = 0; i < contours; i++) {
    444441          var c = contourorder[i];
     
    450447        var allClusters = clusterModel.GetClusterValues(clusterdata, Enumerable.Range(0, clusterdata.Rows)).ToArray();
    451448        for (var i = 0; i < clusterdata.Rows; i++) dataRowNames[contourMap[allClusters[i] - 1]].Add(i);
    452       }
    453       else {
     449      } else {
    454450        dataRowNames.Add("Training", problemData.TrainingIndices.ToList());
    455451        dataRowNames.Add("Test", problemData.TestIndices.ToList());
     
    465461      var c = tsneState.EvaluateError();
    466462      errors.Add(c);
    467       ((IntValue) results[IterationResultName].Value).Value = tsneState.iter;
    468       ((DoubleValue) results[ErrorResultName].Value).Value = errors.Last();
     463      ((IntValue)results[IterationResultName].Value).Value = tsneState.iter;
     464      ((DoubleValue)results[ErrorResultName].Value).Value = errors.Last();
    469465
    470466      var ndata = NormalizeProjectedData(tsneState.newData);
     
    490486      for (var i = 0; i < max.Length; i++) max[i] = min[i] = data[0, i];
    491487      for (var i = 0; i < data.GetLength(0); i++)
    492       for (var j = 0; j < data.GetLength(1); j++) {
    493         var v = data[i, j];
    494         max[j] = Math.Max(max[j], v);
    495         min[j] = Math.Min(min[j], v);
    496       }
     488        for (var j = 0; j < data.GetLength(1); j++) {
     489          var v = data[i, j];
     490          max[j] = Math.Max(max[j], v);
     491          min[j] = Math.Min(min[j], v);
     492        }
    497493      for (var i = 0; i < data.GetLength(0); i++) {
    498494        for (var j = 0; j < data.GetLength(1); j++) {
     
    528524
    529525    private static void CreateClusters(IDataset data, string target, int contours, out IClusteringModel contourCluster, out Dictionary<int, string> contourNames, out double[][] borders) {
    530       var cpd = new ClusteringProblemData((Dataset) data, new[] {target});
     526      var cpd = new ClusteringProblemData((Dataset)data, new[] { target });
    531527      contourCluster = KMeansClustering.CreateKMeansSolution(cpd, contours, 3).Model;
    532528
    533       borders = Enumerable.Range(0, contours).Select(x => new[] {double.MaxValue, double.MinValue}).ToArray();
     529      borders = Enumerable.Range(0, contours).Select(x => new[] { double.MaxValue, double.MinValue }).ToArray();
    534530      var clusters = contourCluster.GetClusterValues(cpd.Dataset, cpd.AllIndices).ToArray();
    535531      var targetvalues = cpd.Dataset.GetDoubleValues(target).ToArray();
     
    550546      var range = high - low;
    551547      var h = Math.Min(cell / range * colorGradient.Count, colorGradient.Count - 1);
    552       return colorGradient[(int) h];
     548      return colorGradient[(int)h];
    553549    }
    554550    #endregion
Note: See TracChangeset for help on using the changeset viewer.