VS2022/.NET8下ML.NET中Recommendation()方法找不到的问题求助
问题排查与解决
核心原因
你遇到的Recommendation()方法无法调用的问题,是因为ML.NET在适配.NET 8的3.x及以上版本中,已移除mlContext.Recommendation()这个API入口,相关的矩阵分解训练器被整合到了回归任务模块中(电影评分预测属于回归场景)。
具体修复步骤
1. 替换训练管道的API调用
将原代码中构建训练管道的行:
var trainingPipeLine = dataProcessingPipeline.Append(mlContext.Recommendation().Transforms.MatrixFactorization(options));
替换为回归任务模块下的训练器调用:
var trainingPipeLine = dataProcessingPipeline.Append(mlContext.Regression.Trainers.MatrixFactorization(options));
2. 确认依赖包版本
确保项目安装了最新稳定版的Microsoft.ML NuGet包,无需单独安装Microsoft.ML.Recommendation,该包功能已整合到主包中。可通过VS2022的NuGet包管理器搜索并更新。
3. 验证标签字段类型
确保MovieRating类中的Label字段为float类型(回归任务要求标签为数值型),示例定义:
public class MovieRating { [LoadColumn(0)] public float userId; [LoadColumn(1)] public float movieId; [LoadColumn(2)] public float Label; // 电影评分,作为模型预测的标签 }
完整修正后的方法代码
using Microsoft.ML; using Microsoft.ML.Trainers; using Microsoft.ML.Data; using Microsoft.ML.Transforms; ITransformer BuildAndTrainModel(MLContext mlContext, IDataView trainingDataView) { // 数据处理管道:将userId和movieId编码为模型可识别的键值 var dataProcessingPipeline = mlContext.Transforms.Conversion.MapValueToKey(outputColumnName: "userIdEncoded", inputColumnName: nameof(MovieRating.userId)) .Append(mlContext.Transforms.Conversion.MapValueToKey(outputColumnName: "movieIdEncoded", inputColumnName: nameof(MovieRating.movieId))); // 配置矩阵分解训练器参数 MatrixFactorizationTrainer.Options options = new MatrixFactorizationTrainer.Options(); options.MatrixColumnIndexColumnName = "userIdEncoded"; options.MatrixRowIndexColumnName = "movieIdEncoded"; options.LabelColumnName = "Label"; options.NumberOfIterations = 20; options.ApproximationRank = 100; // 构建训练管道:使用回归模块下的矩阵分解训练器 var trainingPipeLine = dataProcessingPipeline.Append(mlContext.Regression.Trainers.MatrixFactorization(options)); Console.WriteLine("=============== Training the model ==============="); ITransformer model = trainingPipeLine.Fit(trainingDataView); return model; }
内容的提问来源于stack exchange,提问作者Rihah
相关产品推荐
相关产品推荐

