MatrixFactorizationTrainer Classe
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
Pour IEstimator<TTransformer> prédire des éléments dans une matrice à l’aide de la factorisation de matrice (également appelée type de filtrage collaboratif).
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)
- Héritage
-
MatrixFactorizationTrainer
- Implémente
Remarques
Pour créer ce formateur, utilisez MatrixFactorization ou MatrixFactorization(Options).
Colonnes d’entrée et de sortie
Il existe trois colonnes d’entrée requises, une pour les index de ligne de matrice, une pour les index de colonne de matrice et une pour les valeurs (par exemple, les étiquettes) dans la matrice. Ils définissent ensemble une matrice au format COO . Le type de colonne d’étiquette est un vecteur de Single tandis que les deux autres colonnes sont scalaires de type clé .
| Nom de la colonne de sortie | Type de colonne | Description |
|---|---|---|
Score |
Single | Valeur de matrice prédite à l’emplacement spécifié par les colonnes d’entrée (colonne d’index de ligne et colonne d’index de colonne). |
Caractéristiques de l’entraîneur
| Tâche Machine Learning | systèmes de recommandation. |
| La normalisation est-elle nécessaire ? | Oui |
| La mise en cache est-elle requise ? | Oui |
| NuGet requis en plus de Microsoft.ML | Microsoft.ML.Recommender |
| Exportable vers ONNX | Non |
Background
L’idée de base de la factorisation de matrice consiste à trouver deux matrices de facteurs de bas rang pour estimer la matrice d’entraînement. Dans ce module, les données d’entraînement attendues (matrice factorisée) sont une liste de tuples. Chaque tuple se compose d’un index de colonne, d’un index de ligne et de la valeur à l’emplacement spécifié par les deux index. Pour obtenir un exemple de structure de données d’un tuple, vous pouvez utiliser :
// 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;
}
Notez qu’il n’est pas nécessaire de spécifier toutes les entrées de la matrice d’entraînement. Par conséquent, la factorisation de matrice peut être utilisée pour remplir les valeurs manquantes. Ce comportement est très utile lors de la création de systèmes de recommandation.
Pour mieux comprendre les utilisations pratiques de la factorisation de matrice, prenons l’exemple de recommandation musicale. Supposons que les ID utilisateur et les ID de musique sont utilisés comme index de ligne et de colonne, respectivement, et que les valeurs de la matrice sont des évaluations fournies par ces utilisateurs. Autrement dit, l’évaluation $r$ à la ligne $u$ et la colonne $v$ signifie que l’utilisateur $u$ donne $r$ à l’élément $v$. Une matrice incomplète est très courante, car tous les utilisateurs ne peuvent pas fournir leurs commentaires à tous les produits (par exemple, personne ne peut évaluer dix millions de chansons). Supposons que $R\in{\mathbb R}^{m\times n}$ est une matrice d’évaluation m-by-n et que le rang des deux matrices de facteurs est $P\in {\mathbb R}^{k\times m}$ et $Q\in {\mathbb R}^{k\times n}$, où $k$ est le rang d’approximation. L’évaluation prédite à la $u$-ième ligne et la $v$-ième colonne dans $R$ serait le produit interne de la $u$-ième ligne de $P$ et la $v$-ième ligne de $Q$ ; autrement dit, $R$ est approximatif par le produit de la transposer de $P$ ($P^T$) et $Q$. Notez que $k$ est généralement beaucoup plus petit que $m$ et $n$, donc $P^T Q$ est généralement appelé une approximation de faible rang de $R$.
Ce formateur comprend une méthode de dégradé stochastique et une méthode de descente de coordonnées pour trouver $P$ et $Q$ via la réduction de la distance entre (partie non manquante) $R$ et son approximation $P^T Q$. La méthode de descente de coordonnées incluse est spécifiquement pour la factorisation de matrice d’une classe où toutes les évaluations observées sont des signaux positifs (autrement dit, toutes les valeurs d’évaluation sont 1). Notez que la seule façon d’appeler la factorisation de matrice d’une classe consiste à affecter une perte carrée à uneclasse à la fonction de perte lors de l’appel de MatrixFactorization(Options). Consultez la page 6 et la page 28 ici pour une brève présentation de la factorisation de matrice standard et de la factorisation à une seule classe. Le paramètre par défaut induit la factorisation de matrice standard. La bibliothèque sous-jacente utilisée dans ML.NET factorisation de matrice se trouve sur un dépôt Github.
Pour les utilisateurs intéressés par les détails mathématiques, consultez les références ci-dessous.
- Pour l’implémentation multithreading de la méthode de dégradé stochastique utilisée, consultez A Fast Parallel Stochastic Gradient Method for Matrix Factorization in Shared Memory Systems.
- Pour le calcul se produisant à l’intérieur d’un thread unique, consultez une planification de taux d’apprentissage pour les méthodes de dégradé stochastique à la factorisation de matrice.
- Pour connaître la méthode de descente de coordonnées parallèles utilisée et la formule de factorisation de matrice à une classe, consultez Sélection d’exemples négatifs pour la factorisation de matrice d’une classe.
- Pour plus d’informations sur la bibliothèque sous-jacente utilisée, consultez LIBMF : Bibliothèque pour la factorisation de matrice parallèle dans les systèmes en mémoire partagée.
Consultez la section Voir aussi pour obtenir des liens vers des exemples d’utilisation.
Propriétés
| Nom | Description |
|---|---|
| Info |
Contient TrainerInfo des paramètres généraux pour cet entraîneur. |
Méthodes
| Nom | Description |
|---|---|
| Fit(IDataView, IDataView) |
Effectue l’apprentissage à MatrixFactorizationTrainer l’aide de données d’entraînement et de validation, retourne un MatrixFactorizationPredictionTransformer. |
| Fit(IDataView) |
|
| GetOutputSchema(SchemaShape) |
Propagation de schéma pour les transformateurs. Retourne le schéma de sortie des données, si le schéma d’entrée est semblable à celui fourni. |
Méthodes d’extension
| Nom | Description |
|---|---|
| AppendCacheCheckpoint<TTrans>(IEstimator<TTrans>, IHostEnvironment) |
Ajoutez un « point de contrôle de mise en cache » à la chaîne d’estimateur. Cela garantit que les estimateurs en aval seront entraînés par rapport aux données mises en cache. Il est utile d’avoir un point de contrôle de mise en cache avant les formateurs qui prennent plusieurs passes de données. |
| WithOnFitDelegate<TTransformer>(IEstimator<TTransformer>, Action<TTransformer>) |
En fonction d’un estimateur, retournez un objet de création de package de restrictions qui appellera un délégué une fois Fit(IDataView) appelé. Il est souvent important pour un estimateur de retourner des informations sur ce qui était adapté, c’est pourquoi la Fit(IDataView) méthode retourne un objet spécifiquement typé, plutôt que simplement un général ITransformer. Toutefois, en même temps, IEstimator<TTransformer> sont souvent formés en pipelines avec de nombreux objets, nous devrons peut-être construire une chaîne d’estimateurs via EstimatorChain<TLastTransformer> laquelle l’estimateur pour lequel nous voulons obtenir le transformateur est enterré quelque part dans cette chaîne. Pour ce scénario, nous pouvons par le biais de cette méthode attacher un délégué qui sera appelé une fois l’ajustement appelé. |