Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
03/27/18 17:34:41 (6 years ago)
Author:
jzenisek
Message:

#2719: added proxy ensemble model

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2719_HeuristicLab.DatastreamAnalysis/HeuristicLab.DatastreamAnalysis/3.4/DatastreamAnalysisOptimizer.cs

    r14710 r15867  
    7474    }
    7575
    76     private double lastStateValue;
     76    //private double lastStateValue;
    7777    private double pR2Sum;
    7878    private int detectionCount;
     
    108108
    109109    [Storable]
    110     private IItemList<RatedEnsembleModel> ensembles;
    111 
    112     public IItemList<RatedEnsembleModel> Ensembles {
     110    private IItemList<ProxyEnsembleModel> ensembles;
     111
     112    public IItemList<ProxyEnsembleModel> Ensembles {
    113113      get { return ensembles; }
    114114      set {
    115115        if (value == null || value == ensembles)
    116116          return;
    117         if (!(value is IRatedEnsembleModel)) throw new ArgumentException("Invaid ensemble model type");
     117        if (!(value is IProxyEnsembleModel)) throw new ArgumentException("Invaid ensemble model type");
    118118        DeregisterEnsembleEvents();
    119119        ensembles = value;
     
    214214    protected void SetupResults() {
    215215      evaluationCount = 0;
    216       lastStateValue = 0.0;
     216      //lastStateValue = 0.0;
    217217      pR2Sum = 0.0;
    218218      exclusivitySum = 0.0;
     
    267267      log = new Log();
    268268      results = new ResultCollection();
    269       ensembles = new ItemList<RatedEnsembleModel>();
     269      ensembles = new ItemList<ProxyEnsembleModel>();
    270270      datastream = new Datastream();
    271271      runsCounter = 0;
     
    287287      log = cloner.Clone(original.log);
    288288      results = cloner.Clone(original.results);
    289       ensembles = (ItemList<RatedEnsembleModel>) original.Ensembles.Clone(cloner);
     289      ensembles = (ItemList<ProxyEnsembleModel>) original.Ensembles.Clone(cloner);
    290290      datastream = (Datastream) original.Datastream.Clone(cloner);
    291291      runsCounter = original.runsCounter;
     
    322322    }
    323323
    324     public override void Start() {
     324    public override void Start(CancellationToken cancellationToken) {
     325      base.Start(cancellationToken);
    325326      if (ensembles == null || datastream == null) return;
    326       base.Start();
    327       cancellationTokenSource = new CancellationTokenSource();
     327
     328      cancellationTokenSource = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken);
    328329      stopPending = false;
    329330
     
    450451        // play and evaluate initial window
    451452        PlayDatastream();
    452         lastStateValue = Datastream.ProblemData.Dataset.GetDoubleValue("h", replayedIndex);
     453        //lastStateValue = Datastream.ProblemData.Dataset.GetDoubleValue("h", replayedIndex);
    453454        if (Datastream.SlidingWindowEvaluationPossible) Evaluate();
    454455        replayedIndex = Datastream.FitnessPartition.End;
     
    490491      }
    491492    }
    492    
     493
     494    private void Smoothen(double[] estimatedValuesPerRow) {
     495      if (Datastream.SlidingWindowEvaluationScheme.Value == Datastream.EvaluationScheme.equal) {
     496        var avg = estimatedValuesPerRow.Average();
     497        for (int i = 0; i < estimatedValuesPerRow.Length; i++) {
     498          estimatedValuesPerRow[i] = avg;
     499        }
     500      }
     501    }
     502
    493503    private void Evaluate() {
    494504      evaluationCount++;
     
    512522      var curDetectionCount = 0;
    513523      var changeDetectionCount = 0;
    514       double curStateValue = 0.0;
     524      //double curStateValue = 0.0;
     525
    515526      foreach (var ensemble in Ensembles) {
    516527
    517528        var sonarEstimatedValuesPerModelPerRow = ensemble.Model.Models.Select(x => x.GetEstimatedValues(datastream.ProblemData.Dataset, sonarRows).ToArray());
    518529        var sonarEstimatedValuesPerRow = Enumerable.Range(0, sonarSize).Select(r => sonarEstimatedValuesPerModelPerRow.Select(m => m[r]).Average()).ToArray();
    519 
     530       
    520531        var estimatedValuesPerModelPerRow = ensemble.Model.Models.Select(x => x.GetEstimatedValues(datastream.ProblemData.Dataset, rows).ToArray());
    521532        var estimatedValuesPerRow = Enumerable.Range(0, Datastream.FitnessPartition.Size).Select(r => estimatedValuesPerModelPerRow.Select(e => e[r]).Average()).ToArray(); // per row
     
    550561        int replayCount = estimatedValuesPerRow.Length - replayAmount;
    551562
     563        Smoothen(estimatedValuesPerRow);
     564
    552565        for (int i = replayedIndex; i < Datastream.FitnessPartition.End; i++) {
    553566          //ResultsTargets.Rows[ensemble.Name].Values.Add(averageEstimatedValue);
     
    594607      }
    595608
    596       double replCount = 0.0;
    597       double accCount = 0.0;
    598       for (int i = replayedIndex; i < Datastream.FitnessPartition.End; i++) {
    599         replCount++;
    600         curStateValue = problemData.Dataset.GetDoubleValue("h", i);
    601         if (curStateValue <= 0.5 && winningEnsembleIdx == 0 && winningEnsemblePR2 > ensembles[winningEnsembleIdx].QualityThreshold.Start) {
    602           accCount++;
    603         } else if (curStateValue > 0.5 && winningEnsembleIdx == 1 && winningEnsemblePR2 > ensembles[winningEnsembleIdx].QualityThreshold.Start) {
    604           accCount++;
    605         }
    606       }
    607       accuracySum += accCount / replCount;
    608       ResultsDetectionAccuracy = accuracySum / evaluationCount;
     609      //double replCount = 0.0;
     610      //double accCount = 0.0;
     611      //for (int i = replayedIndex; i < Datastream.FitnessPartition.End; i++) {
     612      //  replCount++;
     613      //  //curStateValue = problemData.Dataset.GetDoubleValue("h", i);
     614      //  if (curStateValue <= 0.5 && winningEnsembleIdx == 0 && winningEnsemblePR2 > ensembles[winningEnsembleIdx].QualityThreshold.Start) {
     615      //    accCount++;
     616      //  } else if (curStateValue > 0.5 && winningEnsembleIdx == 1 && winningEnsemblePR2 > ensembles[winningEnsembleIdx].QualityThreshold.Start) {
     617      //    accCount++;
     618      //  }
     619      //}
     620      //accuracySum += accCount / replCount;
     621      //ResultsDetectionAccuracy = accuracySum / evaluationCount;
     622
     623
     624
    609625
    610626      //if (accCount / replCount > 1.0) {
     
    621637      //}
    622638
    623       lastStateValue = curStateValue;
     639      //lastStateValue = curStateValue;
    624640
    625641      // detection of state change
     
    650666    private bool accDiscount = false;
    651667
    652     private double CalulateEnsembleConfidenceCM1(RatedEnsembleModel ensemble, IEnumerable<double[]> estimatedValuesPerModelPerRow, IEnumerable<double> realValues) {
     668    private double CalulateEnsembleConfidenceCM1(ProxyEnsembleModel ensemble, IEnumerable<double[]> estimatedValuesPerModelPerRow, IEnumerable<double> realValues) {
    653669      int noModels = estimatedValuesPerModelPerRow.Count();
    654670      int votes = 0;
     
    717733
    718734    protected virtual void RegisterEnsembleEvents() {
    719       ensembles.ItemsAdded += new CollectionItemsChangedEventHandler<IndexedItem<RatedEnsembleModel>>(Ensembles_ItemsChanged);
    720       ensembles.ItemsMoved += new CollectionItemsChangedEventHandler<IndexedItem<RatedEnsembleModel>>(Ensembles_ItemsChanged);
    721       ensembles.ItemsRemoved += new CollectionItemsChangedEventHandler<IndexedItem<RatedEnsembleModel>>(Ensembles_ItemsChanged);
    722       ensembles.ItemsReplaced += new CollectionItemsChangedEventHandler<IndexedItem<RatedEnsembleModel>>(Ensembles_ItemsChanged);
    723       ensembles.CollectionReset += new CollectionItemsChangedEventHandler<IndexedItem<RatedEnsembleModel>>(Ensembles_Reset);
     735      ensembles.ItemsAdded += new CollectionItemsChangedEventHandler<IndexedItem<ProxyEnsembleModel>>(Ensembles_ItemsChanged);
     736      ensembles.ItemsMoved += new CollectionItemsChangedEventHandler<IndexedItem<ProxyEnsembleModel>>(Ensembles_ItemsChanged);
     737      ensembles.ItemsRemoved += new CollectionItemsChangedEventHandler<IndexedItem<ProxyEnsembleModel>>(Ensembles_ItemsChanged);
     738      ensembles.ItemsReplaced += new CollectionItemsChangedEventHandler<IndexedItem<ProxyEnsembleModel>>(Ensembles_ItemsChanged);
     739      ensembles.CollectionReset += new CollectionItemsChangedEventHandler<IndexedItem<ProxyEnsembleModel>>(Ensembles_Reset);
    724740    }
    725741
    726742    protected virtual void DeregisterEnsembleEvents() {
    727       ensembles.ItemsAdded -= new CollectionItemsChangedEventHandler<IndexedItem<RatedEnsembleModel>>(Ensembles_ItemsChanged);
    728       ensembles.ItemsMoved -= new CollectionItemsChangedEventHandler<IndexedItem<RatedEnsembleModel>>(Ensembles_ItemsChanged);
    729       ensembles.ItemsRemoved -= new CollectionItemsChangedEventHandler<IndexedItem<RatedEnsembleModel>>(Ensembles_ItemsChanged);
    730       ensembles.ItemsReplaced -= new CollectionItemsChangedEventHandler<IndexedItem<RatedEnsembleModel>>(Ensembles_ItemsChanged);
    731       ensembles.CollectionReset -= new CollectionItemsChangedEventHandler<IndexedItem<RatedEnsembleModel>>(Ensembles_Reset);
     743      ensembles.ItemsAdded -= new CollectionItemsChangedEventHandler<IndexedItem<ProxyEnsembleModel>>(Ensembles_ItemsChanged);
     744      ensembles.ItemsMoved -= new CollectionItemsChangedEventHandler<IndexedItem<ProxyEnsembleModel>>(Ensembles_ItemsChanged);
     745      ensembles.ItemsRemoved -= new CollectionItemsChangedEventHandler<IndexedItem<ProxyEnsembleModel>>(Ensembles_ItemsChanged);
     746      ensembles.ItemsReplaced -= new CollectionItemsChangedEventHandler<IndexedItem<ProxyEnsembleModel>>(Ensembles_ItemsChanged);
     747      ensembles.CollectionReset -= new CollectionItemsChangedEventHandler<IndexedItem<ProxyEnsembleModel>>(Ensembles_Reset);
    732748    }
    733749    #endregion
Note: See TracChangeset for help on using the changeset viewer.