MatrixFactorizationTrainer Klasse
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Der IEstimator<TTransformer> , der Elemente in einer Matrix mithilfe der Matrixfaktorisierung vorhersagt (auch bekannt als eine Art der kollaborativen Filterung).
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)
- Vererbung
-
MatrixFactorizationTrainer
- Implementiert
Hinweise
Verwenden Sie MatrixFactorization oder MatrixFactorization(Options), um diesen Trainer zu erstellen.
Eingabe- und Ausgabespalten
Es sind drei Eingabespalten erforderlich: eine für Matrixzeilenindizes, eine für Matrixspaltenindizes und eine für Werte (d. h. Bezeichnungen) in der Matrix. Sie definieren zusammen eine Matrix im COO-Format . Der Typ für die Bezeichnungsspalte ist ein Vektor von Single , während die anderen beiden Spalten den Schlüsseltyp skalar sind.
Name der Ausgabespalte | Spaltentyp | BESCHREIBUNG |
---|---|---|
Score |
Single | Der vorhergesagte Matrixwert an der durch Eingabespalten angegebenen Position (Zeilenindexspalte und Spaltenindexspalte). |
Trainermerkmale
ML-Aufgabe | Empfehlungssysteme |
Ist eine Normalisierung erforderlich? | Yes |
Ist Zwischenspeicherung erforderlich? | Yes |
Erforderliche NuGet zusätzlich zu Microsoft.ML | Microsoft.ML.Recommender |
Exportierbar nach ONNX | Nein |
Hintergrund
Die Grundidee der Matrixfaktorisierung besteht darin, zwei niedrige Rangfaktormatrizen zu finden, um die Trainingsmatrix zu nähern. In diesem Modul sind die erwarteten Trainingsdaten (die faktorisierte Matrix) eine Liste von Tupeln. Jedes Tupel besteht aus einem Spaltenindex, einem Zeilenindex und dem Wert an der durch die beiden Indizes angegebenen Position. Für eine Beispieldatenstruktur eines Tupels kann folgendes verwendet werden:
// 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;
}
Beachten Sie, dass es nicht erforderlich ist, alle Einträge in der Trainingsmatrix anzugeben, sodass die Matrixfaktorisierung zum Ausfüllen fehlender Werte verwendet werden kann. Dieses Verhalten ist beim Erstellen von Empfehlungssystemen sehr hilfreich.
Um ein besseres Verständnis der praktischen Verwendung der Matrixfaktorisierung zu erhalten, betrachten wir die Musikempfehlung als Beispiel. Angenommen, Benutzer-IDs und Musik-IDs werden als Zeilen- bzw. Spaltenindizes verwendet, und die Werte der Matrix sind Bewertungen, die von diesen Benutzern bereitgestellt werden. Das heißt, die Bewertung $r$ bei Zeile $u$ und Spalte $v$ bedeutet, dass Der Benutzer $u$ $r$ an element $v$ gibt. Eine unvollständige Matrix ist sehr häufig, da nicht alle Benutzer ihr Feedback zu allen Produkten geben können (z. B. kann niemand zehn Millionen Songs bewerten). Angenommen, $R\in{\mathbb R}^{m\times n}$ ist eine m-by-n-Bewertungsmatrix und der Rang der beiden Faktormatrizen sind $P\in {\mathbb R}^{k\times m}$ und $Q\in {\mathbb R}^{k\times n}$, wobei $k$ der Näherungsrang ist. Die vorhergesagte Bewertung in der $u$-ten Zeile und der $v$-ten Spalte in $R$ wäre das innere Produkt der $u$-ten Zeile von $P$ und der $v$-ten Zeile von $Q$; das heißt, $R$ wird durch das Produkt der Transponenz von $P$ ($P^T$) und $Q$ angenähert. Beachten Sie, dass $k$ in der Regel viel kleiner ist als $m$ und $n$, sodass $P^T Q$ in der Regel als niedrigwertige Näherung von $R$ bezeichnet wird.
Dieser Trainer umfasst eine stochastische Gradientenmethode und eine Koordinatenabstiegsmethode , um $P$ und $Q$ zu finden, indem der Abstand zwischen (nicht fehlendem Teil von) $R$ und dessen Näherung $P^T Q$ minimiert wird. Die eingeschlossene Koordinatenabstiegsmethode ist speziell für die Matrixfaktorisierung mit einer Klasse vorgesehen, bei der alle beobachteten Bewertungen positive Signale sind (d. a. alle Bewertungswerte sind 1). Beachten Sie, dass die einzige Möglichkeit zum Aufrufen der 1-Klassen-Matrix-Factorisierung darin besteht, beim Aufrufen von MatrixFactorization(Options) der Verlustfunktioneinen Klassenquadratverlust zuzuweisen. Auf Seite 6 und Seite 28 finden Sie hier eine kurze Einführung in die Standardmatrixfaktorisierung und die Einklassenmatrixfaktorisierung. Die Standardeinstellung induziert die Standardmatrix-Factorisierung. Die zugrunde liegende Bibliothek, die in ML.NET Matrixfaktorisierung verwendet wird, finden Sie in einem GitHub-Repository.
Für Benutzer, die an den mathematischen Details interessiert sind, sehen Sie sich die unten angegebenen Referenzen an.
- Informationen zur Multithreadingimplementierung der verwendeten stochastischen Gradient-Methode finden Sie unter A Fast Parallel Stochastic Gradient Method for Matrix Factorization in Shared Memory Systems.
- Informationen zur Berechnung innerhalb eines einzelnen Threads finden Sie unter A Learning-rate Schedule for Stochastic Gradient Methods to Matrix Factorization.For the computation happening in a single thread, see A Learning-rate Schedule for Stochastic Gradient Methods to Matrix Factorization.
- Die verwendete Parallelkoordinatenabstiegsmethode und die Formel für die Matrixfaktorisierung mit einer Klasse finden Sie unter Auswahl negativer Stichproben für die Einklassenmatrixfaktorisierung.
- Ausführliche Informationen zur zugrunde liegenden Bibliothek finden Sie unter LIBMF: A Library for Parallel Matrix Factorization in Shared-Memory-Systemen.
Im Abschnitt Siehe auch finden Sie Links zu Verwendungsbeispielen.
Eigenschaften
Info |
Enthält TrainerInfo allgemeine Parameter für diesen Trainer. |
Methoden
Fit(IDataView) |
|
Fit(IDataView, IDataView) |
Trainiert eine MatrixFactorizationTrainer mit Trainings- und Validierungsdaten, gibt zurück MatrixFactorizationPredictionTransformer. |
GetOutputSchema(SchemaShape) |
Schemaverteilung für Transformatoren. Gibt das Ausgabeschema der Daten zurück, wenn das Eingabeschema dem angegebenen entspricht. |