- Timestamp:
- 03/23/18 14:10:15 (7 years ago)
- Location:
- branches/2906_Transformations/HeuristicLab.Problems.DataAnalysis/3.4
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2906_Transformations/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/DataAnalysisProblemData.cs
r15848 r15856 242 242 } 243 243 244 public virtual IDataAnalysisProblemData InverseTransform() { 245 var newDataset = InverseTransform(Dataset, Transformations); 244 public virtual IDataAnalysisProblemData Transform() { 245 var newDataset = Transform(Dataset, Transformations); 246 247 var extendedInputs = ExtendInputVariables(AllowedInputVariables, Transformations); 248 var checkedInputs = new CheckedItemList<StringValue>(newDataset.VariableNames.Select(x => new StringValue(x))); 249 foreach (var input in checkedInputs) checkedInputs.SetItemCheckedState(input, extendedInputs.Contains(input.Value)); 246 250 247 251 // TODO: Cannot create concrete instance here (maybe derived Create-method?) 248 252 var cloner = new Cloner(); 249 253 cloner.RegisterClonedObject(Dataset, newDataset); 250 cloner.RegisterClonedObject(TransformationsParameter.Value, new ItemList<IDataAnalysisTransformation>().AsReadOnly()); 254 cloner.RegisterClonedObject(InputVariables, checkedInputs.AsReadOnly()); 255 //cloner.RegisterClonedObject(TransformationsParameter.Value, new ItemList<IDataAnalysisTransformation>(transformations).AsReadOnly()); 256 257 return cloner.Clone(this); 258 } 259 260 public virtual IDataAnalysisProblemData InverseTransform() { 261 var newDataset = InverseTransform(Dataset, Transformations); 262 263 var checkedInputs = new CheckedItemList<StringValue>(newDataset.VariableNames.Select(x => new StringValue(x))); 264 foreach (var input in checkedInputs) checkedInputs.SetItemCheckedState(input, AllowedInputVariables.Contains(input.Value)); 265 266 // TODO: Cannot create concrete instance here (maybe derived Create-method?) 267 var cloner = new Cloner(); 268 cloner.RegisterClonedObject(Dataset, newDataset); 269 cloner.RegisterClonedObject(InputVariables, checkedInputs.AsReadOnly()); 270 //cloner.RegisterClonedObject(TransformationsParameter.Value, new ItemList<IDataAnalysisTransformation>().AsReadOnly()); 251 271 252 272 return cloner.Clone(this); … … 281 301 var trans = (ITransformation<double>)transformation.Transformation; 282 302 283 var transformedData = modifiableDataset.GetDoubleValues(transformation.TransformedVariable); 284 285 var originalData = trans.InverseApply(transformedData).ToList(); 286 modifiableDataset.ReplaceVariable(transformation.OriginalVariable, originalData); 303 var prevTransformations = transformations.Except(transformationsStack); 304 bool originalWasChanged = prevTransformations.Any(x => x.TransformedVariable == transformation.OriginalVariable); 305 if (originalWasChanged) { 306 var transformedData = modifiableDataset.GetDoubleValues(transformation.TransformedVariable); 307 308 var originalData = trans.InverseApply(transformedData).ToList(); 309 modifiableDataset.ReplaceVariable(transformation.OriginalVariable, originalData); 310 } 287 311 288 312 bool transformedVariablePending = transformationsStack.Any(x => x.OriginalVariable == transformation.TransformedVariable); … … 293 317 return modifiableDataset; 294 318 } 319 320 public static IEnumerable<string> ExtendInputVariables(IEnumerable<string> oldInputVariables, IEnumerable<IDataAnalysisTransformation> transformations) { 321 var inputs = new HashSet<string>(oldInputVariables); 322 323 foreach (var transformation in transformations) { 324 if (inputs.Contains(transformation.OriginalVariable)) 325 inputs.Add(transformation.TransformedVariable); 326 } 327 328 return inputs; 329 } 330 331 public static IEnumerable<string> RemoveVirtualVariables(IEnumerable<string> variables, IEnumerable<IDataAnalysisTransformation> transformations) { 332 var remainingVariables = new HashSet<string>(variables); 333 334 var transformationsStack = new Stack<IDataAnalysisTransformation>(transformations); 335 336 while (transformationsStack.Any()) { 337 var transformation = transformationsStack.Pop(); 338 339 340 bool transformedVariablePending = transformationsStack.Any(x => x.OriginalVariable == transformation.TransformedVariable); 341 if (!transformedVariablePending) 342 remainingVariables.Remove(transformation.TransformedVariable); 343 } 344 345 return remainingVariables; 346 } 295 347 } 296 348 } -
branches/2906_Transformations/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Regression/RegressionProblemData.cs
r15847 r15856 181 181 } 182 182 183 public override IDataAnalysisProblemData Transform() { 184 var transformedProblemData = (IRegressionProblemData)base.Transform(); 185 var targetVariable = GetTransformedTragetVariable(TargetVariable, Transformations); 186 transformedProblemData.TargetVariable = targetVariable; 187 return transformedProblemData; 188 } 189 183 190 public override IDataAnalysisProblemData InverseTransform() { 184 191 var transformedProblemData = (IRegressionProblemData)base.InverseTransform(); … … 186 193 transformedProblemData.TargetVariable = targetVariable; 187 194 return transformedProblemData; 195 } 196 197 public static string GetTransformedTragetVariable(string originalTarget, IEnumerable<IDataAnalysisTransformation> transformations) { 198 var transformedTarget = originalTarget; 199 foreach (var transformation in transformations) { 200 if (transformation.OriginalVariable == transformedTarget) 201 transformedTarget = transformation.TransformedVariable; 202 } 203 return transformedTarget; 188 204 } 189 205 -
branches/2906_Transformations/HeuristicLab.Problems.DataAnalysis/3.4/Interfaces/IDataAnalysisProblemData.cs
r15847 r15856 44 44 45 45 IEnumerable<IDataAnalysisTransformation> Transformations { get; } 46 IDataAnalysisProblemData Transform(); 46 47 IDataAnalysisProblemData InverseTransform(); 47 48
Note: See TracChangeset
for help on using the changeset viewer.