1  #region License Information


2  /* HeuristicLab


3  * Copyright (C) 20022012 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 


22  using System;


23  using System.Collections.Generic;


24  using System.Linq;


25  using HeuristicLab.Common;


26  using HeuristicLab.Core;


27  using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;


28 


29  namespace HeuristicLab.Problems.DataAnalysis {


30  [StorableClass]


31  [Item("PointCertaintyWeightCalculator", "")]


32  public class PointCertaintyWeightCalculator : DiscriminantClassificationWeightCalculator {


33 


34  public PointCertaintyWeightCalculator()


35  : base() {


36  }


37  [StorableConstructor]


38  protected PointCertaintyWeightCalculator(bool deserializing) : base(deserializing) { }


39  protected PointCertaintyWeightCalculator(PointCertaintyWeightCalculator original, Cloner cloner)


40  : base(original, cloner) {


41  }


42  public override IDeepCloneable Clone(Cloner cloner) {


43  return new PointCertaintyWeightCalculator(this, cloner);


44  }


45 


46  protected override IEnumerable<double> DiscriminantCalculateWeights(ItemCollection<IDiscriminantFunctionClassificationSolution> discriminantSolutions) {


47  List<double> weights = new List<double>();


48  IClassificationProblemData problemData = discriminantSolutions.ElementAt(0).ProblemData;


49  IEnumerable<double> targetValues = GetValues(problemData.Dataset.GetDoubleValues(problemData.TargetVariable).ToList(), problemData.TrainingIndizes);


50  IEnumerator<double> trainingValues;


51  double avg = problemData.ClassValues.Average();


52 


53  foreach (var solution in discriminantSolutions) {


54  IEnumerator<double> estimatedTrainingVal = solution.EstimatedTrainingValues.GetEnumerator();


55  IEnumerator<double> estimatedTrainingClassVal = solution.EstimatedTrainingClassValues.GetEnumerator();


56 


57  trainingValues = targetValues.GetEnumerator();


58  double curWeight = 0.0;


59  while (estimatedTrainingVal.MoveNext() && estimatedTrainingClassVal.MoveNext() && trainingValues.MoveNext()) {


60  if (estimatedTrainingClassVal.Current.Equals(trainingValues.Current)) {


61  curWeight += 0.5;


62  double distanceToPoint = Math.Abs(estimatedTrainingVal.Current  avg);


63  double distanceToClass = Math.Abs(trainingValues.Current  avg);


64  if (trainingValues.Current > avg && estimatedTrainingVal.Current > avg


65   trainingValues.Current < avg && estimatedTrainingVal.Current < avg)


66  curWeight += distanceToPoint < distanceToClass ? (0.5 / distanceToClass) * distanceToPoint : 0.5;


67  }


68  }


69  weights.Add(curWeight);


70  }


71  return weights;


72  }


73  }


74  }

