// TODO: Configurable Cache! public DataFeatureMatrixProvider(DataFeatureSelectionStrategy selectionStrategy, IDataFeatureProvider dataFeatureProvider, Strings featureIDs = null) { Contract.Requires(selectionStrategy != null); Contract.Requires(dataFeatureProvider != null); this.selectionStrategy = selectionStrategy; DataFeatureProvider = dataFeatureProvider; vectorizer = new FeatureSetVectorizer(featureIDs == null ? dataFeatureProvider.FeatureDescriptions : dataFeatureProvider.FeatureDescriptions.GetSubset(featureIDs)); MatrixWidth = vectorizer.FeatureDescriptions.Sum(d => d.FeatureValueCount); }
private void Initialize() { var set = new FeatureDescriptionSet(desc); FeatureDescriptionSet inputSet = null; FeatureDescriptionSet outputSet = null; try { inputSet = set.GetSubset(InputFeatureIDs); outputSet = set.GetSubset(OutputFeatureIDs); } catch (Exception ex) { throw new InvalidOperationException("Cannot generate feature subset. See inner exception for details.", ex); } inputVectorizer = new FeatureSetVectorizer(inputSet); outputVectorizer = new FeatureSetVectorizer(outputSet); if (inputVectorizer.FeatureDescriptions.Sum(d => d.FeatureValueCount) != Unit.InputInterface.Length) { throw new InvalidOperationException("Invalid number of input features."); } if (outputVectorizer.FeatureDescriptions.Sum(d => d.FeatureValueCount) != Unit.OutputInterface.Length) { throw new InvalidOperationException("Invalid number of output features."); } inputIDLookup = CreateLookup(InputFeatureIDs); if (InputFeatureIDs.Count + OutputFeatureIDs.Count < set.Count) { desc = Cut(set, InputFeatureIDs.Concat(OutputFeatureIDs)); } computation = new Learningutation<double>(NumberOfIterations); }