private protected PredictionEngineBase(IHostEnvironment env, ITransformer transformer, bool ignoreMissingColumns,
                                               SchemaDefinition inputSchemaDefinition = null, SchemaDefinition outputSchemaDefinition = null)
        {
            Contracts.CheckValue(env, nameof(env));
            env.AssertValue(transformer);
            Transformer = transformer;
            var makeMapper = TransformerChecker(env, transformer);

            env.AssertValue(makeMapper);
            _inputRow = DataViewConstructionUtils.CreateInputRow <TSrc>(env, inputSchemaDefinition);
            PredictionEngineCore(env, _inputRow, makeMapper(_inputRow.Schema), ignoreMissingColumns, outputSchemaDefinition, out _disposer, out _outputRow);
            OutputSchema = Transformer.GetOutputSchema(_inputRow.Schema);
        }
    /// <summary>
    /// Sets up the <see cref="IDtoEmotion"/> field.
    /// </summary>
    /// <param name="inputDataViewSchema">The schema when the initial data view is loaded. This will be inside of <see cref="TrainModel{TFaceData}"/>.</param>
    private static void SetupEmotionsToId(DataViewSchema inputDataViewSchema)
    {
        // Get names of emotions.

        var slotNames = new VBuffer <ReadOnlyMemory <char> >();

        model.GetOutputSchema(inputDataViewSchema).GetColumnOrNull("Label")?.GetKeyValues(ref slotNames);
        IDtoEmotion = new Dictionary <int, string>();
        int num = 0;

        foreach (var denseValue in slotNames.DenseValues())
        {
            IDtoEmotion.Add(num++, denseValue.ToString());
        }
    }
Пример #3
0
        private static void TestSomePredictions(MLContext mlContext)
        {
            ConsoleHelper.ConsoleWriteHeader("=============== Testing prediction engine ===============");

            ITransformer trainedModel = mlContext.Model.Load(ModelPath, out var modelInputSchema);

            // Create prediction engine related to the loaded trained model
            var predEngine = mlContext.Model.CreatePredictionEngine <InputData, OutputData>(trainedModel);

            // Get the key value mapping for Number to Score index
            var keyValues = default(VBuffer <float>);

            trainedModel.GetOutputSchema(modelInputSchema)["Number"].GetKeyValues <float>(ref keyValues);
            var keys = keyValues.Items().ToDictionary(x => (int)x.Value, x => x.Key);

            //InputData data1 = SampleMNISTData.MNIST1;
            var predictedResult1 = predEngine.Predict(SampleMNISTData.MNIST1);

            Console.WriteLine($"Actual: 1     Predicted probability:       zero:  {predictedResult1.Score[keys[0]]:0.####}");
            Console.WriteLine($"                                           One :  {predictedResult1.Score[keys[1]]:0.####}");
            Console.WriteLine($"                                           two:   {predictedResult1.Score[keys[2]]:0.####}");
            Console.WriteLine($"                                           three: {predictedResult1.Score[keys[3]]:0.####}");
            Console.WriteLine($"                                           four:  {predictedResult1.Score[keys[4]]:0.####}");
            Console.WriteLine($"                                           five:  {predictedResult1.Score[keys[5]]:0.####}");
            Console.WriteLine($"                                           six:   {predictedResult1.Score[keys[6]]:0.####}");
            Console.WriteLine($"                                           seven: {predictedResult1.Score[keys[7]]:0.####}");
            Console.WriteLine($"                                           eight: {predictedResult1.Score[keys[8]]:0.####}");
            Console.WriteLine($"                                           nine:  {predictedResult1.Score[keys[9]]:0.####}");
            Console.WriteLine();

            var predictedResult2 = predEngine.Predict(SampleMNISTData.MNIST2);

            Console.WriteLine($"Actual: 7     Predicted probability:       zero:  {predictedResult2.Score[keys[0]]:0.####}");
            Console.WriteLine($"                                           One :  {predictedResult2.Score[keys[1]]:0.####}");
            Console.WriteLine($"                                           two:   {predictedResult2.Score[keys[2]]:0.####}");
            Console.WriteLine($"                                           three: {predictedResult2.Score[keys[3]]:0.####}");
            Console.WriteLine($"                                           four:  {predictedResult2.Score[keys[4]]:0.####}");
            Console.WriteLine($"                                           five:  {predictedResult2.Score[keys[5]]:0.####}");
            Console.WriteLine($"                                           six:   {predictedResult2.Score[keys[6]]:0.####}");
            Console.WriteLine($"                                           seven: {predictedResult2.Score[keys[7]]:0.####}");
            Console.WriteLine($"                                           eight: {predictedResult2.Score[keys[8]]:0.####}");
            Console.WriteLine($"                                           nine:  {predictedResult2.Score[keys[9]]:0.####}");
            Console.WriteLine();
        }
        public void RunMultiplePredictions(int numberOfPredictions)
        {
            var mlContext = new MLContext();

            //Load data as input for predictions
            IDataView inputDataForPredictions = mlContext.Data.LoadFromTextFile <TransactionObservation>(_dasetFile, separatorChar: ',', hasHeader: true);

            Console.WriteLine($"Predictions from saved model:");

            ITransformer model = mlContext.Model.Load(_modelfile, out var inputSchema);

            var predictionEngine = mlContext.Model.CreatePredictionEngine <TransactionObservation, TransactionFraudPredictionWithContribution>(model);

            Console.WriteLine($"\n \n Test {numberOfPredictions} transactions, from the test datasource, that should be predicted as fraud (true):");

            mlContext.Data.CreateEnumerable <TransactionObservation>(inputDataForPredictions, reuseRowObject: false)
            .Where(x => x.Label == true)
            .Take(numberOfPredictions)
            .Select(testData => testData)
            .ToList()
            .ForEach(testData =>
            {
                Console.WriteLine($"--- Transaction ---");
                testData.PrintToConsole();
                predictionEngine.Predict(testData).PrintToConsole();
                Console.WriteLine($"-------------------");
            });


            Console.WriteLine($"\n \n Test {numberOfPredictions} transactions, from the test datasource, that should NOT be predicted as fraud (false):");

            mlContext.Data.CreateEnumerable <TransactionObservation>(inputDataForPredictions, reuseRowObject: false)
            .Where(x => x.Label == false)
            .Take(numberOfPredictions)
            .ToList()
            .ForEach(testData =>
            {
                Console.WriteLine($"--- Transaction ---");
                testData.PrintToConsole();
                predictionEngine.Predict(testData).PrintToConsole(model.GetOutputSchema(inputDataForPredictions.Schema));
                Console.WriteLine($"-------------------");
            });
        }
        public List <DataStructures.TaxiFarePrediction> RunMultiplePredictions(int numberOfPredictions)
        {
            // Load data as input for predictions.
            IDataView inputDataForPredictions = context.Data.LoadFromTextFile <TaxiTrip>(_datasetFile, hasHeader: true, separatorChar: ',');

            Console.WriteLine("Predictions from saved model:");

            Console.WriteLine($"\n \n Test {numberOfPredictions} transactions, from the test datasource, that should be predicted as fraud (true):");

            var transactionList = new List <DataStructures.TaxiFarePrediction>();
            TaxiTripFarePredictionWithContribution prediction;

            DataStructures.TaxiFarePrediction explainedPrediction;

            context.Data.CreateEnumerable <TaxiTrip>(inputDataForPredictions, reuseRowObject: false)
            .Take(numberOfPredictions)
            .Select(testData => testData)
            .ToList()
            .ForEach(testData =>
            {
                testData.PrintToConsole();
                prediction          = predictionEngine.Predict(testData);
                explainedPrediction = new DataStructures.TaxiFarePrediction(prediction.FareAmount, prediction.GetFeatureContributions(model.GetOutputSchema(inputDataForPredictions.Schema)));
                transactionList.Add(explainedPrediction);
            });

            return(transactionList);
        }