C# 我的ML.Net推荐算法对RSquared和Root平均值都返回0

C# 我的ML.Net推荐算法对RSquared和Root平均值都返回0,c#,ml.net,C#,Ml.net,我不熟悉机器学习,但我有C#方面的经验,这就是为什么我想学习Ml.net作为熟悉这个主题的一种方式 由于我掌握了这个概念,我决定制作一个啤酒推荐模型,它将接受以前的评论并推荐一种新的啤酒 无论如何,当我运行程序时,下面EvaluateModel中返回的值都返回0。我想再看一眼。谢谢 这就是培训模式 public static ITransformer BuildAndTrainModel(MLContext mlContext, IDataView trainingDataView)

我不熟悉机器学习,但我有C#方面的经验,这就是为什么我想学习Ml.net作为熟悉这个主题的一种方式

由于我掌握了这个概念,我决定制作一个啤酒推荐模型,它将接受以前的评论并推荐一种新的啤酒

无论如何,当我运行程序时,下面EvaluateModel中返回的值都返回0。我想再看一眼。谢谢

这就是培训模式

public static ITransformer BuildAndTrainModel(MLContext mlContext, IDataView trainingDataView)
        {
            IEstimator<ITransformer> estimator = mlContext.Transforms.Categorical.OneHotEncoding(outputColumnName: "abvEncoded", inputColumnName: "abv")
                                .Append(mlContext.Transforms.Categorical.OneHotEncoding(outputColumnName: "ibuEncoded", inputColumnName: "ibu"))
                                .Append(mlContext.Transforms.Conversion.MapValueToKey(outputColumnName: "beerIDEncoded", inputColumnName: "beerID"))
                                .Append(mlContext.Transforms.Categorical.OneHotEncoding(outputColumnName: "nameEncoded", inputColumnName: "name"))
                                .Append(mlContext.Transforms.Categorical.OneHotEncoding(outputColumnName: "styleEncoded", inputColumnName: "style"))
                                .Append(mlContext.Transforms.Categorical.OneHotEncoding(outputColumnName: "breweryIDEncoded", inputColumnName: "breweryID"))
                                .Append(mlContext.Transforms.Conversion.MapValueToKey(outputColumnName: "userIDEncoded", inputColumnName: "userID"))
                                .Append(mlContext.Transforms.Concatenate("Features", "abvEncoded", "ibuEncoded", "styleEncoded"));

                        var options = new MatrixFactorizationTrainer.Options
            {
                MatrixColumnIndexColumnName = "userIDEncoded",
                MatrixRowIndexColumnName = "beerIDEncoded",
                LabelColumnName = "Label",
                NumberOfIterations = 20,
                ApproximationRank = 100
            };

            var trainerEstimator = estimator.Append(mlContext.Recommendation().Trainers.MatrixFactorization(options));

            Console.WriteLine("=============== Training the model ===============");
            ITransformer model = trainerEstimator.Fit(trainingDataView);

            return model;
啤酒的对象类

    class Beers
    {
        [LoadColumn(0)]
        public float userID { get; set; }

        [LoadColumn(1)]
        public string abv { get; set; }

        [LoadColumn(2)]
        public string ibu { get; set; }

        [LoadColumn(3)]
        public float beerID { get; set; }

        [LoadColumn(4)]
        public string name { get; set; }

        [LoadColumn(5)]
        public string style { get; set; }

        [LoadColumn(6)]
        public float breweryID { get; set; }

        [LoadColumn(7)]
        public float ounces { get; set; }

        [LoadColumn(8), ColumnName("Label")]
        public float rating { get; set; }




    }
}

你的训练数据集有多少行?@Jon包括标题,数据集是32行。我打赌这就是原因。我认为数据集不够大,无法从中获得合适的指标。我可以尝试增加数据集。我觉得它与最后一行中的BuildAndTrainModel()有关。Append(mlContext.Transforms.Concatenate(“Features”、“abvEncoded”、“ibuEncoded”、“styleEncoded”);似乎模型可能不完全理解我给它的功能。我不确定你是否需要一个热编码ABV和IBU。这些都是数值,因此它们应该可以按原样使用或通过规范化使用。您的训练数据集有多少行?@Jon包括标题,数据集是32行。我打赌这就是原因。我认为数据集不够大,无法从中获得合适的指标。我可以尝试增加数据集。我觉得它与最后一行中的BuildAndTrainModel()有关。Append(mlContext.Transforms.Concatenate(“Features”、“abvEncoded”、“ibuEncoded”、“styleEncoded”);似乎模型可能不完全理解我给它的功能。我不确定你是否需要一个热编码ABV和IBU。这些都是数值,因此它们应该能够按原样使用或通过规范化使用。
 static void Main(string[] args)
        {
            MLContext mLContext = new MLContext();

            (IDataView trainingDataView, IDataView testDataView) = LoadData(mLContext);

            ITransformer model = BuildAndTrainModel(mLContext, trainingDataView);

            EvaluateModel(mLContext, testDataView, model);

            UseModelForSinglePrediction(mLContext, model);

            SaveModel(mLContext, trainingDataView.Schema, model);

            Console.Read();
    class Beers
    {
        [LoadColumn(0)]
        public float userID { get; set; }

        [LoadColumn(1)]
        public string abv { get; set; }

        [LoadColumn(2)]
        public string ibu { get; set; }

        [LoadColumn(3)]
        public float beerID { get; set; }

        [LoadColumn(4)]
        public string name { get; set; }

        [LoadColumn(5)]
        public string style { get; set; }

        [LoadColumn(6)]
        public float breweryID { get; set; }

        [LoadColumn(7)]
        public float ounces { get; set; }

        [LoadColumn(8), ColumnName("Label")]
        public float rating { get; set; }




    }
}