为什么 ML.NET MatrixFactorization 在每次训练后都会得到不同的结果,并且输出没有意义的建议

问题描述 投票:0回答:1

我使用 ML.NET 矩阵分解开发了一个产品推荐器。 训练数据仅包含产品 ID 对,因此我根据 Microsoft 文档调整了训练器。

有两个问题:

1- 每次我使用完全相同的数据训练模型时,同一产品都会得到不同的最高分结果。

2- 有时,结果甚至没有意义,因为当询问男士产品的建议时,会建议女士产品。训练数据产品对始终是男性产品对或女性产品对,从不混合。

数据处理管道似乎是正确的:

产品 ID 是文本,因此我使用 ML.NET MapValueToKey 对它们进行标准化。

var dataProcessPipeline = mlContext.Transforms.Conversion
                .MapValueToKey("CoPurchaseProductIdEncoded", "CoPurchaseProductId")
                .Append(MLContext.Transforms.Conversion.MapValueToKey("ProductIdEncoded","ProductId"));

传递给培训师的选项是:

MatrixFactorizationTrainer.Options options = new MatrixFactorizationTrainer.Options();
            options.MatrixColumnIndexColumnName = "ProductIdEncoded";
            options.MatrixRowIndexColumnName = "CoPurchaseProductIdEncoded";
            options.LabelColumnName = "Label";
            options.LossFunction = MatrixFactorizationTrainer.LossFunctionType.SquareLossOneClass;
            options.Alpha = 0.01;
            options.Lambda = 0.025;
            options.NumberOfIterations = 500;
            var est = MLContext.Recommendation().Trainers.MatrixFactorization(options);
ml.net recommendation-engine matrix-factorization
1个回答
0
投票
  1. 您没有展示如何构建

    MLContext
    ,但我怀疑您没有传递固定的
    seed
    值。这样做会给你确定性的结果。请参阅文档中的备注部分。

  2. 这些模型并不完美,因此不同的产品组会有一些渗透。如果您想将建议限制为不同的组,您可以训练两个模型或随后过滤建议。

© www.soinside.com 2019 - 2024. All rights reserved.