public static List <SearchData> GenerateData(int count = 100) { var data = new List <SearchData>(); var rnd = new Random(); for (int i = 0; i < count; i++) { var newNode = new SearchData() { GroupId = rnd.Next(1, 5).ToString(), //nama yang di rating Label = rnd.Next(0, 4), //rating 0-4 Features = rnd.Next(1, 100) //user atau identitas }; data.Add(newNode); } return(data); }
public static void Run() { MLContext mlContext = new MLContext(); // STEP 1: Load data IDataView trainDataView = mlContext.Data.LoadFromEnumerable <SearchData>(GenerateData()); IDataView testDataView = mlContext.Data.LoadFromEnumerable <SearchData>(GenerateData(10)); // STEP 2: Run AutoML experiment Console.WriteLine($"Running AutoML recommendation experiment for {ExperimentTime} seconds..."); ExperimentResult <RankingMetrics> experimentResult = mlContext.Auto() .CreateRankingExperiment(new RankingExperimentSettings() { MaxExperimentTimeInSeconds = ExperimentTime }) .Execute(trainDataView, testDataView, new ColumnInformation() { LabelColumnName = LabelColumnName, GroupIdColumnName = GroupColumnName }); // STEP 3: Print metric from best model RunDetail <RankingMetrics> bestRun = experimentResult.BestRun; Console.WriteLine($"Total models produced: {experimentResult.RunDetails.Count()}"); Console.WriteLine($"Best model's trainer: {bestRun.TrainerName}"); Console.WriteLine($"Metrics of best model from validation data --"); PrintMetrics(bestRun.ValidationMetrics); // STEP 5: Evaluate test data IDataView testDataViewWithBestScore = bestRun.Model.Transform(testDataView); RankingMetrics testMetrics = mlContext.Ranking.Evaluate(testDataViewWithBestScore, labelColumnName: LabelColumnName); Console.WriteLine($"Metrics of best model on test data --"); PrintMetrics(testMetrics); // STEP 6: Save the best model for later deployment and inferencing mlContext.Model.Save(bestRun.Model, trainDataView.Schema, ModelPath); // STEP 7: Create prediction engine from the best trained model var predictionEngine = mlContext.Model.CreatePredictionEngine <SearchData, SearchDataPrediction>(bestRun.Model); // STEP 8: Initialize a new test, and get the prediction var testPage = new SearchData { GroupId = "1", Features = 9, Label = 1 }; var prediction = predictionEngine.Predict(testPage); Console.WriteLine($"Predicted rating for: {prediction.Prediction}"); // New Page testPage = new SearchData { GroupId = "2", Features = 2, Label = 9 }; prediction = predictionEngine.Predict(testPage); Console.WriteLine($"Predicted: {prediction.Prediction}"); Console.WriteLine("Press any key to continue..."); Console.ReadKey(); }