Changeset 12590 for branches/GBT-trunkintegration/HeuristicLab.Algorithms.DataAnalysis/3.4/GradientBoostedTrees/LossFunctions
- Timestamp:
- 07/04/15 16:03:36 (9 years ago)
- Location:
- branches/GBT-trunkintegration/HeuristicLab.Algorithms.DataAnalysis/3.4/GradientBoostedTrees/LossFunctions
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/GBT-trunkintegration/HeuristicLab.Algorithms.DataAnalysis/3.4/GradientBoostedTrees/LossFunctions/AbsoluteErrorLoss.cs
r12374 r12590 1 using System; 1 #region License Information 2 /* HeuristicLab 3 * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL) 4 * and the BEACON Center for the Study of Evolution in Action. 5 * 6 * This file is part of HeuristicLab. 7 * 8 * HeuristicLab is free software: you can redistribute it and/or modify 9 * it under the terms of the GNU General Public License as published by 10 * the Free Software Foundation, either version 3 of the License, or 11 * (at your option) any later version. 12 * 13 * HeuristicLab is distributed in the hope that it will be useful, 14 * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 * GNU General Public License for more details. 17 * 18 * You should have received a copy of the GNU General Public License 19 * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>. 20 */ 21 #endregion 22 23 using System; 2 24 using System.Collections.Generic; 3 25 using System.Diagnostics; 4 26 using System.Linq; 5 using System.Text;6 using System.Threading.Tasks;7 27 using HeuristicLab.Common; 8 using HeuristicLab.Core;9 28 10 namespace GradientBoostedTrees { 29 namespace HeuristicLab.Algorithms.DataAnalysis { 30 // loss function for the weighted absolute error 11 31 public class AbsoluteErrorLoss : ILossFunction { 12 32 public double GetLoss(IEnumerable<double> target, IEnumerable<double> pred, IEnumerable<double> weight) { … … 54 74 // line search for abs error 55 75 LineSearchFunc lineSearch = (idx, startIdx, endIdx) => { 76 // Median() is allocating an array anyway 77 // It would be possible to pre-allocated an array for the residuals if Median() would allow specification of a sub-range 56 78 int nRows = endIdx - startIdx + 1; 57 var res = from offset in Enumerable.Range(0, nRows) 58 let i = startIdx + offset 59 let row = idx[i] 60 select (targetArr[row] - predArr[row]); 79 var res = new double[nRows]; 80 for (int offset = 0; offset < nRows; offset++) { 81 var i = startIdx + offset; 82 var row = idx[i]; 83 res[offset] = targetArr[row] - predArr[row]; 84 } 61 85 return res.Median(); 62 63 // old code for weighted median calculation64 // int nRows = endIdx - startIdx + 1; // startIdx and endIdx are inclusive65 // if (nRows == 1) return targetArr[idx[startIdx]] - predArr[idx[startIdx]];66 // else if (nRows == 2) {67 // if (weightArr[idx[startIdx]] > weightArr[idx[endIdx]]) {68 // return targetArr[idx[startIdx]] - predArr[idx[startIdx]];69 // } else if (weightArr[idx[startIdx]] < weightArr[idx[endIdx]]) {70 // return targetArr[idx[endIdx]] - predArr[idx[endIdx]];71 // } else {72 // // same weight73 // return ((targetArr[idx[startIdx]] - predArr[idx[startIdx]]) +74 // (targetArr[idx[endIdx]] - predArr[idx[endIdx]])) / 2;75 // }76 // } else {77 // var ts = from offset in Enumerable.Range(0, nRows)78 // let i = startIdx + offset79 // select new { res = targetArr[idx[i]] - predArr[idx[i]], weight = weightArr[idx[i]] };80 // ts = ts.OrderBy(t => t.res);81 // var totalWeight = ts.Sum(t => t.weight);82 // var tsEnumerator = ts.GetEnumerator();83 // tsEnumerator.MoveNext();84 //85 // double aggWeight = tsEnumerator.Current.weight; // weight of first86 //87 // while (aggWeight < totalWeight / 2) {88 // tsEnumerator.MoveNext();89 // aggWeight += tsEnumerator.Current.weight;90 // }91 // return tsEnumerator.Current.res;92 // }93 86 }; 94 87 return lineSearch; -
branches/GBT-trunkintegration/HeuristicLab.Algorithms.DataAnalysis/3.4/GradientBoostedTrees/LossFunctions/ILossFunction.cs
r12332 r12590 1 using System; 1 #region License Information 2 /* HeuristicLab 3 * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL) 4 * and the BEACON Center for the Study of Evolution in Action. 5 * 6 * This file is part of HeuristicLab. 7 * 8 * HeuristicLab is free software: you can redistribute it and/or modify 9 * it under the terms of the GNU General Public License as published by 10 * the Free Software Foundation, either version 3 of the License, or 11 * (at your option) any later version. 12 * 13 * HeuristicLab is distributed in the hope that it will be useful, 14 * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 * GNU General Public License for more details. 17 * 18 * You should have received a copy of the GNU General Public License 19 * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>. 20 */ 21 #endregion 22 2 23 using System.Collections.Generic; 3 using System.Linq;4 using System.Text;5 using System.Threading.Tasks;6 using HeuristicLab.Core;7 24 8 namespace GradientBoostedTrees {25 namespace HeuristicLab.Algorithms.DataAnalysis { 9 26 public delegate double LineSearchFunc(int[] idx, int startIdx, int endIdx); 10 27 11 28 public interface ILossFunction { 29 // returns the weighted loss 12 30 double GetLoss(IEnumerable<double> target, IEnumerable<double> pred, IEnumerable<double> weight); 31 32 // returns an enumerable of the weighted loss gradient for each row 13 33 IEnumerable<double> GetLossGradient(IEnumerable<double> target, IEnumerable<double> pred, IEnumerable<double> weight); 34 35 // returns a function that returns the optimal prediction value for a subset of rows from target and pred (see LineSearchFunc delegate above) 14 36 LineSearchFunc GetLineSearchFunc(IEnumerable<double> target, IEnumerable<double> pred, IEnumerable<double> weight); 15 37 } -
branches/GBT-trunkintegration/HeuristicLab.Algorithms.DataAnalysis/3.4/GradientBoostedTrees/LossFunctions/LogisticRegressionLoss.cs
r12589 r12590 1 using System; 1 #region License Information 2 /* HeuristicLab 3 * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL) 4 * and the BEACON Center for the Study of Evolution in Action. 5 * 6 * This file is part of HeuristicLab. 7 * 8 * HeuristicLab is free software: you can redistribute it and/or modify 9 * it under the terms of the GNU General Public License as published by 10 * the Free Software Foundation, either version 3 of the License, or 11 * (at your option) any later version. 12 * 13 * HeuristicLab is distributed in the hope that it will be useful, 14 * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 * GNU General Public License for more details. 17 * 18 * You should have received a copy of the GNU General Public License 19 * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>. 20 */ 21 #endregion 22 23 using System; 2 24 using System.Collections.Generic; 3 25 using System.Diagnostics; 4 26 using System.Linq; 5 using System.Text;6 using System.Threading.Tasks;7 27 using HeuristicLab.Common; 8 using HeuristicLab.Core;9 28 10 namespace GradientBoostedTrees {29 namespace HeuristicLab.Algorithms.DataAnalysis { 11 30 public class LogisticRegressionLoss : ILossFunction { 12 31 public double GetLoss(IEnumerable<double> target, IEnumerable<double> pred, IEnumerable<double> weight) { -
branches/GBT-trunkintegration/HeuristicLab.Algorithms.DataAnalysis/3.4/GradientBoostedTrees/LossFunctions/RelativeErrorLoss.cs
r12374 r12590 1 using System; 1 #region License Information 2 /* HeuristicLab 3 * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL) 4 * and the BEACON Center for the Study of Evolution in Action. 5 * 6 * This file is part of HeuristicLab. 7 * 8 * HeuristicLab is free software: you can redistribute it and/or modify 9 * it under the terms of the GNU General Public License as published by 10 * the Free Software Foundation, either version 3 of the License, or 11 * (at your option) any later version. 12 * 13 * HeuristicLab is distributed in the hope that it will be useful, 14 * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 * GNU General Public License for more details. 17 * 18 * You should have received a copy of the GNU General Public License 19 * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>. 20 */ 21 #endregion 22 23 using System; 2 24 using System.Collections.Generic; 3 25 using System.Diagnostics; 4 26 using System.Linq; 5 using System.Text;6 using System.Threading.Tasks;7 27 using HeuristicLab.Common; 8 using HeuristicLab.Core;9 28 10 namespace GradientBoostedTrees { 29 namespace HeuristicLab.Algorithms.DataAnalysis { 30 // relative error loss is a special case of weighted absolute error loss 11 31 public class RelativeErrorLoss : ILossFunction { 12 32 public double GetLoss(IEnumerable<double> target, IEnumerable<double> pred, IEnumerable<double> weight) { … … 50 70 throw new ArgumentException("target, pred and weight have differing lengths"); 51 71 52 // line search for abs error 72 // line search for relative error 73 // TODO: check and improve? 53 74 LineSearchFunc lineSearch = (idx, startIdx, endIdx) => { 54 75 // weighted median calculation -
branches/GBT-trunkintegration/HeuristicLab.Algorithms.DataAnalysis/3.4/GradientBoostedTrees/LossFunctions/SquaredErrorLoss.cs
r12332 r12590 1 using System; 1 #region License Information 2 /* HeuristicLab 3 * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL) 4 * and the BEACON Center for the Study of Evolution in Action. 5 * 6 * This file is part of HeuristicLab. 7 * 8 * HeuristicLab is free software: you can redistribute it and/or modify 9 * it under the terms of the GNU General Public License as published by 10 * the Free Software Foundation, either version 3 of the License, or 11 * (at your option) any later version. 12 * 13 * HeuristicLab is distributed in the hope that it will be useful, 14 * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 * GNU General Public License for more details. 17 * 18 * You should have received a copy of the GNU General Public License 19 * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>. 20 */ 21 #endregion 22 23 using System; 2 24 using System.Collections.Generic; 3 25 using System.Linq; 4 using System.Text;5 using System.Threading.Tasks;6 using HeuristicLab.Common;7 using HeuristicLab.Core;8 26 9 namespace GradientBoostedTrees {27 namespace HeuristicLab.Algorithms.DataAnalysis { 10 28 public class SquaredErrorLoss : ILossFunction { 11 29 public double GetLoss(IEnumerable<double> target, IEnumerable<double> pred, IEnumerable<double> weight) { … … 44 62 throw new ArgumentException("target, pred and weight have differing lengths"); 45 63 46 // line search for 64 // line search for squared error loss => return the average value 47 65 LineSearchFunc lineSearch = (idx, startIdx, endIdx) => { 48 66 double s = 0.0;
Note: See TracChangeset
for help on using the changeset viewer.