Changeset 16824


Ignore:
Timestamp:
04/19/19 08:43:51 (4 months ago)
Author:
gkronber
Message:

#2971: merged changes from trunk/HeuristicLab.Problems.DataAnalysis to branch

Location:
branches/2971_named_intervals/HeuristicLab.Problems.DataAnalysis
Files:
7 edited
1 copied

Legend:

Unmodified
Added
Removed
  • branches/2971_named_intervals/HeuristicLab.Problems.DataAnalysis

  • branches/2971_named_intervals/HeuristicLab.Problems.DataAnalysis/3.4

  • branches/2971_named_intervals/HeuristicLab.Problems.DataAnalysis/3.4/Dataset.cs

    r16644 r16824  
    2525using System.Collections.ObjectModel;
    2626using System.Linq;
     27using HEAL.Attic;
    2728using HeuristicLab.Common;
    2829using HeuristicLab.Core;
    2930using HeuristicLab.Data;
    30 using HEAL.Attic;
    3131
    3232namespace HeuristicLab.Problems.DataAnalysis {
     
    115115    }
    116116
     117    public static Dataset FromRowData(IEnumerable<string> variableNames, double[,] data) {
     118      var colWise = new List<IList>(data.GetLength(1));
     119      for (var col = 0; col < data.GetLength(1); col++) {
     120        var column = new List<double>(data.GetLength(0));
     121        for (var row = 0; row < data.GetLength(0); row++) {
     122          column.Add(data[row, col]);
     123        }
     124        colWise.Add(column);
     125      }
     126      return new Dataset(variableNames, colWise);
     127    }
     128
     129    public static Dataset FromRowData(IEnumerable<string> variableNames, IEnumerable<IList> data) {
     130      var vnames = variableNames.ToList();
     131      var transposed = new List<IList>();
     132      var iter = data.GetEnumerator();
     133      if (!iter.MoveNext()) throw new ArgumentException("Data does not contain any rows", nameof(data));
     134      for (var i = 0; i < iter.Current.Count; i++) {
     135        if (i >= vnames.Count) throw new ArgumentException("There are more variables in data, than variable names.", nameof(variableNames));
     136        if (iter.Current[i] == null) throw new ArgumentException("Null values are not supported.", nameof(data));
     137        if (!IsAllowedType(iter.Current[i].GetType())) throw new ArgumentException("Data contains types that are not allowed.", nameof(data));
     138        if (iter.Current[i] is double d)
     139          transposed.Add(new List<double>() { d });
     140        else if (iter.Current[i] is DateTime dt)
     141          transposed.Add(new List<DateTime>() { dt });
     142        else if (iter.Current[i] is string s)
     143          transposed.Add(new List<string>() { s });
     144        else throw new NotSupportedException(string.Format("Variable {0} has type {1}. This is not supported when converting from row-wise data.", vnames[i], iter.Current[i].GetType()));
     145      }
     146      if (transposed.Count < vnames.Count) throw new ArgumentException("There are less variables in data, than variable names.", nameof(variableNames));
     147      while (iter.MoveNext()) {
     148        for (var i = 0; i < iter.Current.Count; i++)
     149          if (transposed[i].Add(iter.Current[i]) < 0)
     150            throw new ArgumentException(string.Format("Variable {0} has invalid value ({1})", vnames[i], iter.Current[i]), nameof(data));
     151      }
     152      return new Dataset(vnames, transposed);
     153    }
     154
    117155    public ModifiableDataset ToModifiable() {
    118156      return new ModifiableDataset(variableNames, variableNames.Select(v => variableValues[v]), true);
     
    133171    #region Backwards compatible code, remove with 3.5
    134172    private double[,] storableData;
    135     //name alias used to suppport backwards compatibility
    136     [Storable(Name = "data", AllowOneWay = true)]
     173    //name alias used to support backwards compatibility
     174    [Storable(OldName = "data")]
    137175    private double[,] StorableData { set { storableData = value; } }
    138176
  • branches/2971_named_intervals/HeuristicLab.Problems.DataAnalysis/3.4/HeuristicLab.Problems.DataAnalysis-3.4.csproj

    r16800 r16824  
    300300    <Compile Include="OnlineCalculators\OnlineTheilsUStatisticCalculator.cs" />
    301301    <Compile Include="OnlineCalculators\OnlineWeightedDirectionalSymmetryCalculator.cs" />
     302    <Compile Include="OnlineCalculators\OnlineWeightedClassificationMeanSquaredErrorCalculator.cs" />
    302303    <Compile Include="ParsedConstraint.cs" />
    303304    <Compile Include="Plugin.cs" />
  • branches/2971_named_intervals/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Classification/DiscriminantFunctionClassificationModel.cs

    r16644 r16824  
    2323using System.Collections.Generic;
    2424using System.Linq;
     25using HEAL.Attic;
    2526using HeuristicLab.Common;
    2627using HeuristicLab.Core;
    27 using HEAL.Attic;
    2828
    2929namespace HeuristicLab.Problems.DataAnalysis {
     
    121121
    122122    public override IEnumerable<double> GetEstimatedClassValues(IDataset dataset, IEnumerable<int> rows) {
     123      var estimatedValues = GetEstimatedValues(dataset, rows);
     124      return GetEstimatedClassValues(estimatedValues);
     125    }
     126
     127    public virtual IEnumerable<double> GetEstimatedClassValues(IEnumerable<double> estimatedValues) {
    123128      if (!Thresholds.Any() && !ClassValues.Any()) throw new ArgumentException("No thresholds and class values were set for the current classification model.");
    124       foreach (var x in GetEstimatedValues(dataset, rows)) {
     129      foreach (var x in estimatedValues) {
    125130        int classIndex = 0;
    126131        // find first threshold value which is larger than x => class index = threshold index + 1
     
    132137      }
    133138    }
     139
    134140    #region events
    135141    public event EventHandler ThresholdsChanged;
  • branches/2971_named_intervals/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Regression/RegressionEnsembleModel.cs

    r16644 r16824  
    7373
    7474    #region backwards compatiblity 3.3.5
    75     [Storable(Name = "models", AllowOneWay = true)]
     75    [Storable(OldName = "models")]
    7676    private List<IRegressionModel> OldStorableModels {
    7777      set { models = value; }
  • branches/2971_named_intervals/HeuristicLab.Problems.DataAnalysis/3.4/Interfaces/Classification/IDiscriminantFunctionClassificationModel.cs

    r16640 r16824  
    3434    void SetThresholdsAndClassValues(IEnumerable<double> thresholds, IEnumerable<double> classValues);
    3535    IEnumerable<double> GetEstimatedValues(IDataset dataset, IEnumerable<int> rows);
     36    IEnumerable<double> GetEstimatedClassValues(IEnumerable<double> estimatedValues);
    3637
    3738    event EventHandler ThresholdsChanged;
Note: See TracChangeset for help on using the changeset viewer.