/// <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);
            }
        }
Exemple #2
0
 internal Settings()
 {
     LearningRate      = 0.01;
     ConvergenceDelta  = 0.000001;
     MaxIterations     = 1500;
     ScaleAndNormalize = true;
     InputSplitRatio   = InputSplitRatio.Default;
 }
Exemple #3
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);
            }
        }