protected override void Analyze(Input input) { }
protected override double Predict(Input item) { return 0; }
/// <summary> /// Converts samples and labels to "TrainingSet" instances. /// If required, applies feature scaling and mean normalization. /// </summary> internal void Run(IEnumerable samples, IEnumerable labels, InputSplitRatio splitRatio) { int samplesCount; _features = GetFeatures(samples, labels, out samplesCount); var samplesMatrix = GetSamplesMatrix(samples, samplesCount, out _mean, out _deviation); var labelsVector = GetLabelsVector(labels, samplesCount); if (_scaleAndNormalize) { int sample = 0; while (sample < samplesCount) { for (int feature = 0; feature < _features.Length; feature++) { samplesMatrix[sample, feature] = (samplesMatrix[sample, feature] - _mean[feature]) / _deviation[feature]; } sample++; } } switch (splitRatio) { case InputSplitRatio.No: TrainingSet = new Input(samplesMatrix, labelsVector, 0, samplesCount); break; case InputSplitRatio.Default: var trainingSetSize = (int) Math.Ceiling(((double) 2/3)*samplesCount); var crossValidationTestSize = (int)Math.Ceiling(((double)1 / 3) * samplesCount / 2); var testSetSize = samplesCount - (trainingSetSize + crossValidationTestSize); TrainingSet = new Input(samplesMatrix, labelsVector, 0, trainingSetSize); CrossValidationSet = new Input(samplesMatrix, labelsVector, trainingSetSize, crossValidationTestSize); TestSet = new Input(samplesMatrix, labelsVector, (trainingSetSize + crossValidationTestSize), testSetSize); break; default: throw new NMachineException("Unexpected split type: " + splitRatio); } }