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)を使用します。
入力列と出力列
必須の入力列は 3 つあり、1 つはマトリックス行インデックス用、もう 1 つはマトリックス列インデックス用、もう 1 つはマトリックス内の値 (つまりラベル) 用です。 これらは共に COO 形式で行列を定義します。 ラベル列の型は のベクターですが、他の Single 2 つの列は キー 型スカラーです。
出力列の名前 | 列の型 | 説明 |
---|---|---|
Score |
Single | 入力列 (行インデックス列と列インデックス列) で指定された位置にある予測マトリックス値。 |
トレーナーの特性
機械学習タスク | レコメンダー システム |
正規化は必要ですか? | はい |
キャッシュは必要ですか? | はい |
Microsoft.ML に加えて必要な NuGet | Microsoft.ML.Recommender |
ONNX にエクスポート可能 | いいえ |
バックグラウンド
行列分解の基本的な考え方は、トレーニング行列を近似する 2 つの低ランク因子行列を見つけることです。 このモジュールでは、予想されるトレーニング データ (階乗行列) はタプルの一覧です。 すべてのタプルは、列インデックス、行インデックス、および 2 つのインデックスで指定された位置にある値で構成されます。 タプルのデータ構造の例では、次のものを使用できます。
// 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 評価行列であり、2 つの因子行列の ランク が {\mathbb R}^{k\times m}$ で$P\、{\mathbb R}^{k\times n}$ の$Q\($k$ は近似ランク) であるとします。 $R$ の$u$番目の行と$v$番目の列で予測される評価は、$P$ の$u$番目の行の内部積と、$Q$ の$v$番目の行になります。つまり、$R$ は、$P$の転置 ($P^T$) と $Q$ の積で概算されます。 通常、$k$ は $m$ と $n$ よりもはるかに小さいため、$P^T Q$ は通常、$R$ の低ランク近似と呼ばれます。
このトレーナーには、 確率的勾配法 と、(の欠落していない部分) $R$ とその近似$P^T Q$ の間の距離を最小限に抑えることによって、$P$ と$Q$ を見つけるための 座標降下法 が含まれています。 含まれる座標降下法は、観察されたすべての評価が正のシグナル (つまり、すべての評価値が 1) である 1 クラスの行列分解専用です。 1 クラスの行列分解を呼び出す唯一の方法は、MatrixFactorization(Options) を呼び出すときに、損失関数に 1 クラスの 2 乗損失を割り当てることです。 標準行列分解と 1 クラス行列階乗の簡単な概要については、ページ 6 とページ 28 を参照 してください。 既定の設定では、標準行列分解が行われます。 ML.NET 行列分解で使用される基になるライブラリは、 Github リポジトリにあります。
数学的な詳細に関心があるユーザーについては、以下のリファレンスを参照してください。
- 使用される確率的勾配法のマルチスレッド実装については、「 共有メモリ システムにおける行列階乗の高速並列確率勾配法」を参照してください。
- 1 つのスレッド内で発生する計算については、「 確率的勾配法から行列階乗への学習率スケジュール」を参照してください。
- 使用される並列座標降下法と 1 クラスの行列分解式については、「1 クラス行列階乗の負のサンプルの選択」を参照してください。
- 使用される基になるライブラリの詳細については、「 LIBMF: A Library for Parallel Matrix Factorization in Shared-memory Systems」を参照してください。
使用例へのリンクについては、「関連項目」セクションを参照してください。
プロパティ
Info |
には TrainerInfo 、このトレーナーの一般的なパラメーターが含まれています。 |
メソッド
Fit(IDataView) |
|
Fit(IDataView, IDataView) |
トレーニング データと検証データの MatrixFactorizationTrainer 両方を使用して をトレーニングし、 を MatrixFactorizationPredictionTransformer返します。 |
GetOutputSchema(SchemaShape) |
トランスフォーマーのスキーマ伝達。 入力スキーマが指定されたスキーマと同じ場合は、データの出力スキーマを返します。 |