MatrixFactorizationTrainer 类

定义

使用 IEstimator<TTransformer> 矩阵分解预测矩阵中的元素 (也称为 协作筛选) 类型。

public sealed class MatrixFactorizationTrainer : Microsoft.ML.IEstimator<Microsoft.ML.Trainers.Recommender.MatrixFactorizationPredictionTransformer>, Microsoft.ML.Trainers.ITrainerEstimator<Microsoft.ML.Trainers.Recommender.MatrixFactorizationPredictionTransformer,Microsoft.ML.Trainers.Recommender.MatrixFactorizationModelParameters>
type MatrixFactorizationTrainer = class
    interface ITrainerEstimator<MatrixFactorizationPredictionTransformer, MatrixFactorizationModelParameters>
    interface IEstimator<MatrixFactorizationPredictionTransformer>
Public NotInheritable Class MatrixFactorizationTrainer
Implements IEstimator(Of MatrixFactorizationPredictionTransformer), ITrainerEstimator(Of MatrixFactorizationPredictionTransformer, MatrixFactorizationModelParameters)
继承
MatrixFactorizationTrainer
实现

注解

若要创建此训练程序,请使用 MatrixFactorizationMatrixFactorization (Options)

输入和输出列

需要三个输入列,一个用于矩阵行索引,一个用于矩阵列索引,一个用于值 (即矩阵中的标签) 。 它们共同定义 COO 格式的矩阵。 标签列的类型是 的 Single 向量,而其他两列是 类型标量。

输出列名称 列名称 说明
Score Single 输入列指定的位置处的预测矩阵值 (行索引列和列索引列) 。

训练程序特征

机器学习任务 推荐器系统
是否需要规范化?
是否需要缓存?
除 Microsoft.ML 外,还需要 NuGet Microsoft.ML.Recommender
可导出到 ONNX

背景

矩阵分解的基本思路是找到两个低秩因子矩阵来近似定型矩阵。 在本模块中, (分解矩阵) 的预期训练数据是元组列表。 每个元组由列索引、行索引和两个索引所指定位置处的值组成。 对于元组的示例数据结构,可以使用:

// The following variables defines the shape of a m-by-n matrix. Indexes start with 0; that is, our indexing system
// is 0-based.
const int m = 60;
const int n = 100;

// A tuple of row index, column index, and rating. It specifies a value in the rating matrix.
class MatrixElement
{
    // Matrix column index starts from 0 and is at most n-1.
    [KeyType(n)]
    public uint MatrixColumnIndex;
    // Matrix row index starts from 0 and is at most m-1.
    [KeyType(m)]
    public uint MatrixRowIndex;
    // The rating at the MatrixColumnIndex-th column and the MatrixRowIndex-th row.
    public float Value;
}

请注意,无需指定训练矩阵中的所有条目,因此矩阵分解可用于填充 缺失值。 生成推荐器系统时,此行为非常有用。

为了更好地了解矩阵分解的实际用途,让我们以音乐推荐为例。 假设用户 ID 和音乐 ID 分别用作行索引和列索引,矩阵的值是这些用户提供的分级。 也就是说,在行$u$ 和列$v$ 处分级$r$ 意味着用户$u$ 为项 $v$ 提供$r$。 不完整的矩阵很常见,因为并非所有用户都可以向所有产品提供反馈 (例如,没有人能) 评分 1000 万首歌曲。 假设 $R\in{\mathbb R}^{m\times n}$ 是一个 m-by-n 分级矩阵,并且两个因子矩阵的 排名 $P在 {\mathbb R}^{k\times m}$ 和 {\mathbb R}^{k\times n}$ 中的$Q\,其中 $k$ 是近似秩。 $R$ 中第$u行和第$v列的预测评级将是$P$ 的第$u$行和第$v行$Q$的内部乘积;也就是说,$R$ 是$P$的转置 ($P^T$) 和$Q$ 的乘积的近似值。 请注意,$k$ 通常比 $m$ 和 $n$ 小得多,因此$P^T Q$ 通常称为$R$ 的低秩近似值。

此训练器包括随机梯度方法和坐标下降方法,用于通过最小化 () $R$ 的非缺失部分与近似$P^T Q$ 之间的距离来查找$P$ 和 $Q$。 包含的坐标下降方法专门用于单类矩阵分解,其中所有观察到的分级都是正信号 (即,所有分级值均为 1) 。 请注意,调用单类矩阵分解的唯一方法是在调用 MatrixFactorization (Options) 时将单类平方损失分配给损失函数。 有关标准矩阵分解和单类矩阵分解的简要介绍,请参阅 此处 第 6 页和第 28 页。 默认设置引入标准矩阵分解。 可在 Github 存储库中找到 ML.NET 矩阵分解中使用的基础库。

对于对数学详细信息感兴趣的用户,请参阅以下参考。

有关使用示例的链接,请查看“另请参阅”部分。

属性

Info

包含 TrainerInfo 此训练器的常规参数。

方法

Fit(IDataView) 训练并返回 MatrixFactorizationPredictionTransformer
Fit(IDataView, IDataView)

MatrixFactorizationTrainer使用训练和验证数据训练 ,返回 MatrixFactorizationPredictionTransformer

GetOutputSchema(SchemaShape)

转换器的架构传播。 如果输入架构与提供的架构类似,则返回数据的输出架构。

适用于

另请参阅