Esempio n. 1
0
 public void RandomIndexSampler_Sample_SampleSize_Too_Large()
 {
     var values        = new int[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3 };
     var sampleSize    = 100;
     var sut           = new RandomIndexSampler <int>(42);
     var sampleIndices = sut.Sample(values, sampleSize);
 }
Esempio n. 2
0
        public void RandomIndexSampler_Sample_Indexed_DataIndices_Too_Large()
        {
            var values     = new int[] { 1, 1, 1 };
            var indices    = new int[] { 0, 1, 2, 3, 10, 11, 12, 13, 18, 19, 20 };
            var sampleSize = 2;
            var sut        = new RandomIndexSampler <int>(42);

            var sampleIndices = sut.Sample(values, sampleSize, indices);
        }
Esempio n. 3
0
        public void RandomIndexSampler_Sample()
        {
            var values        = new int[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3 };
            var sampleSize    = values.Length / 2;
            var sut           = new RandomIndexSampler <int>(42);
            var sampleIndices = sut.Sample(values, sampleSize);

            var actual   = values.GetIndices(sampleIndices);
            var expected = new int[] { 1, 2, 1, 2, 1, 3, 1, 2, 2, 1, 2, };

            CollectionAssert.AreEqual(expected, actual);
        }
Esempio n. 4
0
        public void RandomIndexSampler_Sample_Indexed()
        {
            var values     = new int[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3 };
            var indices    = new int[] { 0, 1, 2, 3, 10, 11, 12, 13, 18, 19, 20 };
            var sampleSize = 6;
            var sut        = new RandomIndexSampler <int>(42);

            var sampleIndices = sut.Sample(values, sampleSize, indices);

            var actual   = values.GetIndices(sampleIndices);
            var expected = new int[] { 3, 2, 1, 1, 1, 2 };

            CollectionAssert.AreEqual(expected, actual);
        }
        public void SharpLearning_With_Cntk_Example()
        {
            // Load data
            var(observations, targets) = DataSetUtilities.LoadWinequalityWhite();

            // transform data for neural net
            var transform = new MinMaxTransformer(0.0, 1.0);

            transform.Transform(observations, observations);

            var featureCount     = observations.ColumnCount;
            var observationCount = observations.RowCount;
            var targetCount      = 1;

            var inputShape  = new int[] { featureCount, 1 };
            var outputShape = new int[] { targetCount };

            // Convert data to float, and wrap as minibatch data.
            var observationsFloat = observations.Data().Select(v => (float)v).ToArray();
            var observationsData  = new MemoryMinibatchData(observationsFloat, inputShape, observationCount);
            var targetsFloat      = targets.Select(v => (float)v).ToArray();
            var targetsData       = new MemoryMinibatchData(targetsFloat, outputShape, observationCount);

            var dataType = DataType.Float;
            var device   = DeviceDescriptor.CPUDevice;

            // setup input and target variables.
            var inputVariable  = Layers.Input(inputShape, dataType);
            var targetVariable = Variable.InputVariable(outputShape, dataType);

            // setup name to variable
            var nameToVariable = new Dictionary <string, Variable>
            {
                { "observations", inputVariable },
                { "targets", targetVariable },
            };

            // Get cross validation folds.
            var sampler = new RandomIndexSampler <double>(seed: 24);
            var crossValidationIndexSets = CrossValidationUtilities
                                           .GetKFoldCrossValidationIndexSets(sampler, foldCount: 10, targets: targets);
            var predictions = new double[observationCount];

            // Run cross validation loop.
            foreach (var set in crossValidationIndexSets)
            {
                // setup data.
                var trainingNameToData = new Dictionary <string, MemoryMinibatchData>
                {
                    { "observations", observationsData.GetSamples(set.trainingIndices) },
                    { "targets", targetsData.GetSamples(set.trainingIndices) }
                };

                var validationNameToData = new Dictionary <string, MemoryMinibatchData>
                {
                    { "observations", observationsData.GetSamples(set.validationIndices) },
                    { "targets", targetsData.GetSamples(set.validationIndices) }
                };

                var trainSource      = new MemoryMinibatchSource(nameToVariable, trainingNameToData, seed: 232, randomize: true);
                var validationSource = new MemoryMinibatchSource(nameToVariable, validationNameToData, seed: 232, randomize: false);

                // Create model and fit.
                var model = CreateModel(inputVariable, targetVariable, targetCount, dataType, device);
                model.Fit(trainSource, batchSize: 128, epochs: 10);

                // Predict.
                var predictionsRaw     = model.Predict(validationSource);
                var currentPredictions = predictionsRaw.Select(v => (double)v.Single()).ToArray();

                // set cross-validation predictions
                var validationIndices = set.validationIndices;
                for (int i = 0; i < validationIndices.Length; i++)
                {
                    predictions[validationIndices[i]] = currentPredictions[i];
                }
            }

            Trace.WriteLine(FormatErrorString(targets, predictions));
        }