public static AutoMlMlState InferPipelines(IHostEnvironment env, PipelineOptimizerBase autoMlEngine, string trainDataPath,
                                                   string schemaDefinitionFile, out string schemaDefinition, int numTransformLevels, int batchSize, SupportedMetric metric,
                                                   out PipelinePattern bestPipeline, int numOfSampleRows, ITerminator terminator, MacroUtils.TrainerKinds trainerKind)
        {
            Contracts.CheckValue(env, nameof(env));

            // REVIEW: Should be able to infer schema by itself, without having to
            // infer recipes. Look into this.
            // Set loader settings through inference
            RecipeInference.InferRecipesFromData(env, trainDataPath, schemaDefinitionFile,
                                                 out var _, out schemaDefinition, out var _, true);

#pragma warning disable 0618
            var data = ImportTextData.ImportText(env, new ImportTextData.Input
            {
                InputFile    = new SimpleFileHandle(env, trainDataPath, false, false),
                CustomSchema = schemaDefinition
            }).Data;
#pragma warning restore 0618
            var splitOutput = TrainTestSplit.Split(env, new TrainTestSplit.Input {
                Data = data, Fraction = 0.8f
            });
            AutoMlMlState amls = new AutoMlMlState(env, metric, autoMlEngine, terminator, trainerKind,
                                                   splitOutput.TrainData.Take(numOfSampleRows), splitOutput.TestData.Take(numOfSampleRows));
            bestPipeline = amls.InferPipelines(numTransformLevels, batchSize, numOfSampleRows);
            return(amls);
        }
Beispiel #2
0
        static void Main(string[] args)
        {
            var df = DataFrame.ReadCSV("iris.csv", ',', true);
            var X  = df.GetDoubleRange(0, 4);
            var y  = df.GetRange(4, 5, x => x).Select(x => x[0]).ToArray();
            var Y  = DataFrame.GetDummies(y);


            var testSplit = new TrainTestSplit(X, Y);
            var t         = testSplit.Split(0, testSize: 0.30);

            var network = new MLPClassifier(new int[] { 4, 5, 5, 5, 3 },
                                            activation: "sigmoid",
                                            randomSeed: 0,
                                            verbose: true,
                                            learningRate: 0.5);

            network.Fit(t.XTrain, t.YTrain, numberOfEpochs: 200);
            var predictions = network.Predict(t.XTest);

            var report = new ClasificationReport(t.YTest, predictions);

            System.Console.WriteLine($"Good predictions: {report.CorrectPredictions}/{report.SampleLength}. Presicion: {report.CorrectPredictions / (double)report.SampleLength}");

            System.Console.ReadLine();
        }
        public static AutoMlMlState InferPipelines(IHostEnvironment env, PipelineOptimizerBase autoMlEngine, IDataView data, int numTransformLevels,
                                                   int batchSize, SupportedMetric metric, out PipelinePattern bestPipeline, int numOfSampleRows,
                                                   ITerminator terminator, MacroUtils.TrainerKinds trainerKind)
        {
            Contracts.CheckValue(env, nameof(env));
            env.CheckValue(data, nameof(data));

            var splitOutput = TrainTestSplit.Split(env, new TrainTestSplit.Input {
                Data = data, Fraction = 0.8f
            });
            AutoMlMlState amls = new AutoMlMlState(env, metric, autoMlEngine, terminator, trainerKind,
                                                   splitOutput.TrainData.Take(numOfSampleRows), splitOutput.TestData.Take(numOfSampleRows));

            bestPipeline = amls.InferPipelines(numTransformLevels, batchSize, numOfSampleRows);
            return(amls);
        }