MatrixFactorizationTrainer Classe
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Oggetto IEstimator<TTransformer> per stimare gli elementi in una matrice usando la fattorizzazione della matrice (noto anche come tipo di filtro collaborativo).
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)
- Ereditarietà
-
MatrixFactorizationTrainer
- Implementazioni
Commenti
Per creare questo formatore, usare MatrixFactorization o MatrixFactorization(Options).To create this trainer, use MatrixFactorization or MatrixFactorization(Options).
Colonne di input e output
Sono necessarie tre colonne di input, una per gli indici di riga matrice, una per gli indici di colonna matrice e una per i valori (ad esempio etichette) nella matrice. Insieme definiscono una matrice in formato COO . Il tipo per la colonna label è un vettore di Single mentre le altre due colonne sono scalari di tipo chiave .
Nome colonna di output | Tipo di colonna | Descrizione |
---|---|---|
Score |
Single | Valore della matrice stimato nella posizione specificata dalle colonne di input (colonna dell'indice di riga e colonna dell'indice di colonna). |
Caratteristiche del formatore
Attività di Machine Learning | sistemi di raccomandazione |
La normalizzazione è necessaria? | Sì |
La memorizzazione nella cache è necessaria? | Sì |
NuGet richiesto oltre a Microsoft.ML | Microsoft.ML.Recommender |
Esportabile in ONNX | No |
Background
L'idea di base della fattorizzazione della matrice consiste nel trovare due matrici di fattori di rango basso per approssimare la matrice di training. In questo modulo i dati di training previsti (matrice fattorizzata) sono un elenco di tuple. Ogni tupla è costituita da un indice di colonna, da un indice di riga e dal valore nella posizione specificata dai due indici. Per una struttura di dati di esempio di una tupla, è possibile usare:
// 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;
}
Si noti che non è necessario specificare tutte le voci nella matrice di training, pertanto la fattorizzazione della matrice può essere usata per riempire i valori mancanti. Questo comportamento è molto utile quando si creano sistemi di raccomandazione.
Per fornire una migliore comprensione degli usi pratici della fattorizzazione della matrice, si consideri la raccomandazione musicale come esempio. Si supponga che gli ID utente e gli ID musicali vengano usati rispettivamente come indici di riga e colonna e che i valori della matrice siano le classificazioni fornite da tali utenti. Ovvero, la classificazione $r$ alla riga $u$ e la colonna $v$ significa che l'utente $u$ assegna $r$ all'elemento $v$. Una matrice incompleta è molto comune perché non tutti gli utenti possono fornire i propri feedback a tutti i prodotti (ad esempio, nessuno può valutare dieci milioni di brani). Si supponga che $R\in{\mathbb R}^{m\times n}$ sia una matrice di classificazione m-by-n e che il rango delle matrici a due fattori sia $P\in {\mathbb R}^{k\times m}$ e $Q\in {\mathbb R}^{k\times n}$, dove $k$ è il rango di approssimazione. La valutazione stimata alla riga $u$-th e la colonna $v$-th in $R$ sarebbe il prodotto interno della riga $u$-th di $P$ e la riga $v$-th di $Q$; vale a dire, $R$ è approssimativo dal prodotto della trasposizione di $P$($P^T$) e $Q$. Si noti che $k$ è in genere molto più piccolo di $m$ e $n$, quindi $P^T Q$ è in genere chiamato approssimazione a basso rango di $R$.
Questo formatore include un metodo di gradiente stocastico e un metodo di discesa delle coordinate per trovare $P$ e $Q$ riducendo al minimo la distanza tra (parte non mancante di) $R$ e la relativa approssimazione $P^T Q$. Il metodo di discesa delle coordinate incluso è specifico per la fattorizzazione di matrice a una classe, in cui tutte le classificazioni osservate sono segnali positivi ,ovvero tutti i valori di classificazione sono 1. Si noti che l'unico modo per richiamare la fattorizzazione della matrice a una classe consiste nell'assegnare una perdita quadrata a una classe alla funzione di perdita quando si chiama MatrixFactorization(Options). Vedere La pagina 6 e la pagina 28 sono disponibili qui per una breve introduzione alla fattorizzazione della matrice standard e alla fattorizzazione di una matrice a una classe. L'impostazione predefinita induce la fattorizzazione della matrice standard. La libreria sottostante usata in ML.NET fattorizzazione della matrice è disponibile in un repository GitHub.
Per gli utenti interessati ai dettagli matematici, vedere i riferimenti seguenti.
- Per l'implementazione multithreading del metodo sfumato stocastico usato, vedere Metodo sfumato stocastico rapido parallelo per la fattorizzazione della matrice nei sistemi di memoria condivisa.
- Per il calcolo eseguito all'interno di un singolo thread, vedere Una pianificazione della frequenza di apprendimento per i metodi sfumati stocastici alla factorizzazione della matrice.
- Per il metodo di discesa delle coordinate parallele usato e la formula di fattorizzazione della matrice a una classe, vedere Selezione di campioni negativi per la factorizzazione matrice a una classe.
- Per informazioni dettagliate sulla libreria sottostante usata, vedere LIBMF: A Library for Parallel Matrix Factorization in Shared-Memory Systems.For details in the underlying library used, see LIBMF: A Library for Parallel Matrix Factorization in Shared-Memory Systems.
Vedere la sezione Vedere anche i collegamenti agli esempi di utilizzo.
Proprietà
Info |
TrainerInfo Contiene parametri generali per questo formatore. |
Metodi
Fit(IDataView) |
|
Fit(IDataView, IDataView) |
Esegue il training di un MatrixFactorizationTrainer oggetto usando sia i dati di training che di convalida, restituisce un oggetto MatrixFactorizationPredictionTransformer. |
GetOutputSchema(SchemaShape) |
Propagazione dello schema per i trasformatori. Restituisce lo schema di output dei dati, se lo schema di input è simile a quello fornito. |