File: Scenarios\Api\Estimators\TrainWithInitialPredictor.cs
Web Access
Project: src\test\Microsoft.ML.Tests\Microsoft.ML.Tests.csproj (Microsoft.ML.Tests)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
 
using Microsoft.ML.Data;
using Microsoft.ML.RunTests;
using Microsoft.ML.TestFrameworkCommon;
using Microsoft.ML.Trainers;
using Xunit;
 
namespace Microsoft.ML.Tests.Scenarios.Api
{
    public partial class ApiScenariosTests
    {
        /// <summary>
        /// Train with initial predictor: Similar to the simple train scenario, but also accept a pre-trained initial model.
        /// The scenario might be one of the online linear learners that can take advantage of this, for example, averaged perceptron.
        /// </summary>
        [Fact]
        public void TrainWithInitialPredictor()
        {
 
            var ml = new MLContext(seed: 1);
 
            var data = ml.Data.LoadFromTextFile<SentimentData>(GetDataPath(TestDatasets.Sentiment.trainFilename), hasHeader: true);
 
            // Pipeline.
            var pipeline = ml.Transforms.Text.FeaturizeText("Features", "SentimentText");
 
            // Train the pipeline, prepare train set. Since it will be scanned multiple times in the subsequent trainer, we cache the 
            // transformed data in memory.
            var trainData = ml.Data.Cache(pipeline.Fit(data).Transform(data));
 
            // Train the first predictor.
            var trainer = ml.BinaryClassification.Trainers.SdcaNonCalibrated(
                new SdcaNonCalibratedBinaryTrainer.Options { NumberOfThreads = 1 });
 
            var firstModel = trainer.Fit(trainData);
 
            // Train the second predictor on the same data.
            var secondTrainer = ml.BinaryClassification.Trainers.AveragedPerceptron("Label", "Features");
 
            var trainRoles = new RoleMappedData(trainData, label: "Label", feature: "Features");
            var finalModel = ((ITrainer)secondTrainer).Train(new TrainContext(trainRoles, initialPredictor: firstModel.Model));
 
        }
    }
}