Changeset 6613
- Timestamp:
- 07/29/11 14:14:27 (13 years ago)
- Location:
- trunk/sources
- Files:
-
- 7 edited
- 4 copied
Legend:
- Unmodified
- Added
- Removed
-
trunk/sources/HeuristicLab.Problems.DataAnalysis.Views/3.4/Classification/ClassificationEnsembleSolutionModelView.Designer.cs
r6612 r6613 20 20 #endregion 21 21 namespace HeuristicLab.Problems.DataAnalysis.Views { 22 partial class RegressionEnsembleSolutionModelView {22 partial class ClassificationEnsembleSolutionModelView { 23 23 /// <summary> 24 24 /// Required designer variable. -
trunk/sources/HeuristicLab.Problems.DataAnalysis.Views/3.4/Classification/ClassificationEnsembleSolutionModelView.cs
r6612 r6613 49 49 50 50 [View("Ensemble Solutions")] 51 [Content(typeof(IItemCollection<I RegressionSolution>), false)]52 internal sealed partial class RegressionEnsembleSolutionModelView : ItemCollectionView<IRegressionSolution> {53 public RegressionEnsembleSolutionModelView() {51 [Content(typeof(IItemCollection<IClassificationSolution>), false)] 52 internal sealed partial class ClassificationEnsembleSolutionModelView : ItemCollectionView<IClassificationSolution> { 53 public ClassificationEnsembleSolutionModelView() { 54 54 InitializeComponent(); 55 55 } -
trunk/sources/HeuristicLab.Problems.DataAnalysis.Views/3.4/HeuristicLab.Problems.DataAnalysis.Views-3.4.csproj
r6612 r6613 110 110 </ItemGroup> 111 111 <ItemGroup> 112 <Compile Include="Classification\ClassificationEnsembleSolutionModelView.cs"> 113 <SubType>UserControl</SubType> 114 </Compile> 115 <Compile Include="Classification\ClassificationEnsembleSolutionModelView.Designer.cs"> 116 <DependentUpon>ClassificationEnsembleSolutionModelView.cs</DependentUpon> 117 </Compile> 112 118 <Compile Include="Regression\RegressionEnsembleSolutionModelView.cs"> 113 119 <SubType>UserControl</SubType> … … 163 169 <Compile Include="Solution Views\ClusteringSolutionView.Designer.cs"> 164 170 <DependentUpon>ClusteringSolutionView.cs</DependentUpon> 171 </Compile> 172 <Compile Include="Solution Views\ClassificationEnsembleSolutionView.cs"> 173 <SubType>UserControl</SubType> 174 </Compile> 175 <Compile Include="Solution Views\ClassificationEnsembleSolutionView.Designer.cs"> 176 <DependentUpon>ClassificationEnsembleSolutionView.cs</DependentUpon> 165 177 </Compile> 166 178 <Compile Include="Solution Views\DiscriminantFunctionClassificationSolutionView.cs"> -
trunk/sources/HeuristicLab.Problems.DataAnalysis.Views/3.4/MenuItems/CreateEnsembleMenuItem.cs
r6612 r6613 21 21 22 22 using System; 23 using System.Collections.Generic; 23 24 using System.Linq; 24 using System.Collections.Generic;25 25 using System.Windows.Forms; 26 using HeuristicLab.Core; 26 27 using HeuristicLab.MainForm; 27 28 using HeuristicLab.Optimization; 28 29 using HeuristicLab.Optimizer; 29 using HeuristicLab.Core;30 30 31 31 namespace HeuristicLab.Problems.DataAnalysis.MenuItems { … … 85 85 var ensemble = new ClassificationEnsembleSolution(Enumerable.Empty<IClassificationModel>(), problemData); 86 86 ensemble.Name = group.Key + " ensemble"; 87 ensemble.Add ModelsAndPartitions(group.OfType<IClassificationSolution>());87 ensemble.AddClassificationSolutions(group.OfType<IClassificationSolution>()); 88 88 MainFormManager.MainForm.ShowContent(ensemble); 89 89 } -
trunk/sources/HeuristicLab.Problems.DataAnalysis.Views/3.4/Solution Views/ClassificationEnsembleSolutionView.Designer.cs
r6612 r6613 21 21 22 22 namespace HeuristicLab.Problems.DataAnalysis.Views { 23 partial class RegressionEnsembleSolutionView {23 partial class ClassificationEnsembleSolutionView { 24 24 /// <summary> 25 25 /// Required designer variable. -
trunk/sources/HeuristicLab.Problems.DataAnalysis.Views/3.4/Solution Views/ClassificationEnsembleSolutionView.cs
r6612 r6613 26 26 27 27 namespace HeuristicLab.Problems.DataAnalysis.Views { 28 [View(" RegressionEnsembleSolution View")]29 [Content(typeof( RegressionEnsembleSolution), true)]30 public partial class RegressionEnsembleSolutionView : RegressionSolutionView {31 public RegressionEnsembleSolutionView() {28 [View("ClassificationEnsembleSolution View")] 29 [Content(typeof(ClassificationEnsembleSolution), true)] 30 public partial class ClassificationEnsembleSolutionView : ClassificationSolutionView { 31 public ClassificationEnsembleSolutionView() { 32 32 InitializeComponent(); 33 AddViewListViewItem(typeof( RegressionEnsembleSolutionModelView), HeuristicLab.Common.Resources.VSImageLibrary.Function);33 AddViewListViewItem(typeof(ClassificationEnsembleSolutionModelView), HeuristicLab.Common.Resources.VSImageLibrary.Function); 34 34 } 35 35 36 public new RegressionEnsembleSolution Content {37 get { return ( RegressionEnsembleSolution)base.Content; }36 public new ClassificationEnsembleSolution Content { 37 get { return (ClassificationEnsembleSolution)base.Content; } 38 38 set { base.Content = value; } 39 39 } 40 40 41 41 protected override void itemsListView_DoubleClick(object sender, EventArgs e) { 42 if (Content != null && itemsListView.SelectedItems.Count == 1 && itemsListView.SelectedItems[0].Tag == typeof( RegressionEnsembleSolutionModelView)) {42 if (Content != null && itemsListView.SelectedItems.Count == 1 && itemsListView.SelectedItems[0].Tag == typeof(ClassificationEnsembleSolutionModelView)) { 43 43 Type viewType = (Type)itemsListView.SelectedItems[0].Tag; 44 var view = MainFormManager.MainForm.ShowContent(Content. RegressionSolutions, viewType);44 var view = MainFormManager.MainForm.ShowContent(Content.ClassificationSolutions, viewType); 45 45 view.ReadOnly = false; 46 46 view.Locked = Locked; … … 50 50 51 51 protected override void itemsListView_SelectedIndexChanged(object sender, EventArgs e) { 52 if (Content != null && itemsListView.SelectedItems.Count == 1 && itemsListView.SelectedItems[0].Tag == typeof( RegressionEnsembleSolutionModelView)) {52 if (Content != null && itemsListView.SelectedItems.Count == 1 && itemsListView.SelectedItems[0].Tag == typeof(ClassificationEnsembleSolutionModelView)) { 53 53 detailsGroupBox.Enabled = true; 54 54 Type viewType = (Type)itemsListView.SelectedItems[0].Tag; 55 55 viewHost.ViewType = viewType; 56 viewHost.Content = Content. RegressionSolutions;56 viewHost.Content = Content.ClassificationSolutions; 57 57 viewHost.ReadOnly = false; 58 58 viewHost.Locked = Locked; -
trunk/sources/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Classification/ClassificationEnsembleModel.cs
r6604 r6613 61 61 models.Add(model); 62 62 } 63 public void Remove(IClassificationModel model) { 64 models.Remove(model); 65 } 63 66 64 67 public IEnumerable<IEnumerable<double>> GetEstimatedClassValueVectors(Dataset dataset, IEnumerable<int> rows) { -
trunk/sources/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Classification/ClassificationEnsembleSolution.cs
r6592 r6613 23 23 using System.Collections.Generic; 24 24 using System.Linq; 25 using HeuristicLab.Collections; 25 26 using HeuristicLab.Common; 26 27 using HeuristicLab.Core; … … 36 37 // [Creatable("Data Analysis")] 37 38 public sealed class ClassificationEnsembleSolution : ClassificationSolution, IClassificationEnsembleSolution { 38 39 39 public new IClassificationEnsembleModel Model { 40 set { base.Model = value; }41 40 get { return (IClassificationEnsembleModel)base.Model; } 41 } 42 43 private readonly ItemCollection<IClassificationSolution> classificationSolutions; 44 public IItemCollection<IClassificationSolution> ClassificationSolutions { 45 get { return classificationSolutions; } 42 46 } 43 47 … … 47 51 private Dictionary<IClassificationModel, IntRange> testPartitions; 48 52 49 50 53 [StorableConstructor] 51 private ClassificationEnsembleSolution(bool deserializing) : base(deserializing) { } 54 private ClassificationEnsembleSolution(bool deserializing) 55 : base(deserializing) { 56 classificationSolutions = new ItemCollection<IClassificationSolution>(); 57 } 58 [StorableHook(HookType.AfterDeserialization)] 59 private void AfterDeserialization() { 60 foreach (var model in Model.Models) { 61 IClassificationProblemData problemData = (IClassificationProblemData)ProblemData.Clone(); 62 problemData.TrainingPartition.Start = trainingPartitions[model].Start; 63 problemData.TrainingPartition.End = trainingPartitions[model].End; 64 problemData.TestPartition.Start = testPartitions[model].Start; 65 problemData.TestPartition.End = testPartitions[model].End; 66 67 classificationSolutions.Add(model.CreateClassificationSolution(problemData)); 68 } 69 RegisterClassificationSolutionsEventHandler(); 70 } 71 52 72 private ClassificationEnsembleSolution(ClassificationEnsembleSolution original, Cloner cloner) 53 73 : base(original, cloner) { … … 60 80 testPartitions[cloner.Clone(pair.Key)] = cloner.Clone(pair.Value); 61 81 } 62 RecalculateResults(); 63 } 82 83 classificationSolutions = cloner.Clone(original.classificationSolutions); 84 RegisterClassificationSolutionsEventHandler(); 85 } 86 64 87 public ClassificationEnsembleSolution(IEnumerable<IClassificationModel> models, IClassificationProblemData problemData) 65 : base(new ClassificationEnsembleModel(models), new ClassificationEnsembleProblemData(problemData)) { 66 this.name = ItemName; 67 this.description = ItemDescription; 68 trainingPartitions = new Dictionary<IClassificationModel, IntRange>(); 69 testPartitions = new Dictionary<IClassificationModel, IntRange>(); 70 foreach (var model in models) { 71 trainingPartitions[model] = (IntRange)problemData.TrainingPartition.Clone(); 72 testPartitions[model] = (IntRange)problemData.TestPartition.Clone(); 73 } 74 RecalculateResults(); 75 } 88 : this(models, problemData, 89 models.Select(m => (IntRange)problemData.TrainingPartition.Clone()), 90 models.Select(m => (IntRange)problemData.TestPartition.Clone()) 91 ) { } 76 92 77 93 public ClassificationEnsembleSolution(IEnumerable<IClassificationModel> models, IClassificationProblemData problemData, IEnumerable<IntRange> trainingPartitions, IEnumerable<IntRange> testPartitions) 78 : base(new ClassificationEnsembleModel( models), new ClassificationEnsembleProblemData(problemData)) {94 : base(new ClassificationEnsembleModel(Enumerable.Empty<IClassificationModel>()), new ClassificationEnsembleProblemData(problemData)) { 79 95 this.trainingPartitions = new Dictionary<IClassificationModel, IntRange>(); 80 96 this.testPartitions = new Dictionary<IClassificationModel, IntRange>(); 81 AddModelsAndPartitions(models, 82 trainingPartitions, 83 testPartitions); 84 RecalculateResults(); 97 this.classificationSolutions = new ItemCollection<IClassificationSolution>(); 98 99 List<IClassificationSolution> solutions = new List<IClassificationSolution>(); 100 var modelEnumerator = models.GetEnumerator(); 101 var trainingPartitionEnumerator = trainingPartitions.GetEnumerator(); 102 var testPartitionEnumerator = testPartitions.GetEnumerator(); 103 104 while (modelEnumerator.MoveNext() & trainingPartitionEnumerator.MoveNext() & testPartitionEnumerator.MoveNext()) { 105 var p = (IClassificationProblemData)problemData.Clone(); 106 p.TrainingPartition.Start = trainingPartitionEnumerator.Current.Start; 107 p.TrainingPartition.End = trainingPartitionEnumerator.Current.End; 108 p.TestPartition.Start = testPartitionEnumerator.Current.Start; 109 p.TestPartition.End = testPartitionEnumerator.Current.End; 110 111 solutions.Add(modelEnumerator.Current.CreateClassificationSolution(p)); 112 } 113 if (modelEnumerator.MoveNext() | trainingPartitionEnumerator.MoveNext() | testPartitionEnumerator.MoveNext()) { 114 throw new ArgumentException(); 115 } 116 117 RegisterClassificationSolutionsEventHandler(); 118 classificationSolutions.AddRange(solutions); 85 119 } 86 120 … … 88 122 return new ClassificationEnsembleSolution(this, cloner); 89 123 } 124 private void RegisterClassificationSolutionsEventHandler() { 125 classificationSolutions.ItemsAdded += new CollectionItemsChangedEventHandler<IClassificationSolution>(classificationSolutions_ItemsAdded); 126 classificationSolutions.ItemsRemoved += new CollectionItemsChangedEventHandler<IClassificationSolution>(classificationSolutions_ItemsRemoved); 127 classificationSolutions.CollectionReset += new CollectionItemsChangedEventHandler<IClassificationSolution>(classificationSolutions_CollectionReset); 128 } 90 129 91 130 protected override void RecalculateResults() { … … 93 132 } 94 133 134 #region Evaluation 95 135 public override IEnumerable<double> EstimatedTrainingClassValues { 96 136 get { … … 166 206 .First(); 167 207 } 168 169 public void AddModelsAndPartitions(IEnumerable<IClassificationSolution> solutions) { 170 foreach (var solution in solutions) { 171 var ensembleSolution = solution as ClassificationEnsembleSolution; 172 if (ensembleSolution != null) { 173 var data = from m in ensembleSolution.Model.Models 174 let train = ensembleSolution.trainingPartitions[m] 175 let test = ensembleSolution.testPartitions[m] 176 select new { m, train, test }; 177 178 foreach (var d in data) { 179 Model.Add(d.m); 180 trainingPartitions[d.m] = (IntRange)d.train.Clone(); 181 testPartitions[d.m] = (IntRange)d.test.Clone(); 182 } 183 } else { 184 Model.Add(solution.Model); 185 trainingPartitions[solution.Model] = (IntRange)solution.ProblemData.TrainingPartition.Clone(); 186 testPartitions[solution.Model] = (IntRange)solution.ProblemData.TestPartition.Clone(); 187 } 188 } 189 208 #endregion 209 210 public void AddClassificationSolutions(IEnumerable<IClassificationSolution> solutions) { 211 classificationSolutions.AddRange(solutions); 212 } 213 public void RemoveClassificationSolutions(IEnumerable<IClassificationSolution> solutions) { 214 classificationSolutions.RemoveRange(solutions); 215 } 216 217 private void classificationSolutions_ItemsAdded(object sender, CollectionItemsChangedEventArgs<IClassificationSolution> e) { 218 foreach (var solution in e.Items) AddClassificationSolution(solution); 190 219 RecalculateResults(); 191 220 } 192 193 private void AddModelsAndPartitions(IEnumerable<IClassificationModel> models, IEnumerable<IntRange> trainingPartitions, IEnumerable<IntRange> testPartitions) { 194 var modelEnumerator = models.GetEnumerator(); 195 var trainingPartitionEnumerator = trainingPartitions.GetEnumerator(); 196 var testPartitionEnumerator = testPartitions.GetEnumerator(); 197 198 while (modelEnumerator.MoveNext() & trainingPartitionEnumerator.MoveNext() & testPartitionEnumerator.MoveNext()) { 199 this.trainingPartitions[modelEnumerator.Current] = (IntRange)trainingPartitionEnumerator.Current.Clone(); 200 this.testPartitions[modelEnumerator.Current] = (IntRange)testPartitionEnumerator.Current.Clone(); 201 } 202 if (modelEnumerator.MoveNext() | trainingPartitionEnumerator.MoveNext() | testPartitionEnumerator.MoveNext()) { 203 throw new ArgumentException(); 204 } 221 private void classificationSolutions_ItemsRemoved(object sender, CollectionItemsChangedEventArgs<IClassificationSolution> e) { 222 foreach (var solution in e.Items) RemoveClassificationSolution(solution); 223 RecalculateResults(); 224 } 225 private void classificationSolutions_CollectionReset(object sender, CollectionItemsChangedEventArgs<IClassificationSolution> e) { 226 foreach (var solution in e.OldItems) RemoveClassificationSolution(solution); 227 foreach (var solution in e.Items) AddClassificationSolution(solution); 228 RecalculateResults(); 229 } 230 231 private void AddClassificationSolution(IClassificationSolution solution) { 232 if (Model.Models.Contains(solution.Model)) throw new ArgumentException(); 233 Model.Add(solution.Model); 234 trainingPartitions[solution.Model] = solution.ProblemData.TrainingPartition; 235 testPartitions[solution.Model] = solution.ProblemData.TestPartition; 236 } 237 238 private void RemoveClassificationSolution(IClassificationSolution solution) { 239 if (!Model.Models.Contains(solution.Model)) throw new ArgumentException(); 240 Model.Remove(solution.Model); 241 trainingPartitions.Remove(solution.Model); 242 testPartitions.Remove(solution.Model); 205 243 } 206 244 } -
trunk/sources/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Regression/RegressionEnsembleSolution.cs
r6612 r6613 204 204 205 205 public void AddRegressionSolutions(IEnumerable<IRegressionSolution> solutions) { 206 solutions.OfType<RegressionEnsembleSolution>().SelectMany(ensemble => ensemble.RegressionSolutions); 206 207 regressionSolutions.AddRange(solutions); 207 208 } -
trunk/sources/HeuristicLab.Problems.DataAnalysis/3.4/Interfaces/Classification/IClassificationEnsembleModel.cs
r6520 r6613 24 24 public interface IClassificationEnsembleModel : IClassificationModel { 25 25 void Add(IClassificationModel model); 26 void Remove(IClassificationModel model); 26 27 IEnumerable<IClassificationModel> Models { get; } 27 28 IEnumerable<IEnumerable<double>> GetEstimatedClassValueVectors(Dataset dataset, IEnumerable<int> rows); -
trunk/sources/HeuristicLab.Problems.DataAnalysis/3.4/Interfaces/Classification/IClassificationEnsembleSolution.cs
r6239 r6613 21 21 22 22 using System.Collections.Generic; 23 using HeuristicLab.Core; 23 24 namespace HeuristicLab.Problems.DataAnalysis { 24 25 public interface IClassificationEnsembleSolution : IClassificationSolution { 25 26 new IClassificationEnsembleModel Model { get; } 27 IItemCollection<IClassificationSolution> ClassificationSolutions { get; } 26 28 IEnumerable<IEnumerable<double>> GetEstimatedClassValueVectors(Dataset dataset, IEnumerable<int> rows); 27 29 }
Note: See TracChangeset
for help on using the changeset viewer.