// 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);
 }
예제 #2
0
        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);
        }