MatrixFactorizationTrainer 类
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
使用 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
- 实现
注解
若要创建此训练程序,请使用 MatrixFactorization 或 MatrixFactorization (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 矩阵分解中使用的基础库。
对于对数学详细信息感兴趣的用户,请参阅以下参考。
- 有关所用随机渐变方法的多线程实现,请参阅 共享内存系统中矩阵分解的快速并行随机梯度方法。
- 有关在单个线程内发生的计算,请参阅随机 梯度方法到矩阵分解的学习速率计划。
- 有关使用的并行坐标下降方法和单类矩阵分解公式,请参阅 单类矩阵分解的负样本选择。
- 有关所用基础库的详细信息,请参阅 LIBMF:共享内存系统中并行矩阵分解的库。
有关使用示例的链接,请查看“另请参阅”部分。
属性
Info |
包含 TrainerInfo 此训练器的常规参数。 |
方法
Fit(IDataView) |
|
Fit(IDataView, IDataView) |
MatrixFactorizationTrainer使用训练和验证数据训练 ,返回 MatrixFactorizationPredictionTransformer。 |
GetOutputSchema(SchemaShape) |
转换器的架构传播。 如果输入架构与提供的架构类似,则返回数据的输出架构。 |