次の方法で共有


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
実装

注釈

このトレーナーを作成するには、 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 リポジトリにあります。

数学的な詳細に関心があるユーザーについては、以下のリファレンスを参照してください。

使用例へのリンクについては、「関連項目」セクションを参照してください。

プロパティ

Info

には TrainerInfo 、このトレーナーの一般的なパラメーターが含まれています。

メソッド

Fit(IDataView) をトレーニングして返します MatrixFactorizationPredictionTransformer
Fit(IDataView, IDataView)

トレーニング データと検証データの MatrixFactorizationTrainer 両方を使用して をトレーニングし、 を MatrixFactorizationPredictionTransformer返します。

GetOutputSchema(SchemaShape)

トランスフォーマーのスキーマ伝達。 入力スキーマが指定されたスキーマと同じ場合は、データの出力スキーマを返します。

適用対象

こちらもご覧ください