MatrixFactorizationTrainer Třída

Definice

Predikce IEstimator<TTransformer> prvků v matici pomocí faktorizace matice (označovaná také jako typ filtrování pro spolupráci)

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)
Dědičnost
MatrixFactorizationTrainer
Implementuje

Poznámky

K vytvoření tohoto trenéra použijte MatrixFactorization nebo MatrixFactorization(Options).

Vstupní a výstupní sloupce

Existují tři vstupní sloupce, jeden pro indexy řádků matice, jeden pro indexy maticových sloupců a jeden pro hodnoty (tj. popisky) v matici. Společně definují matici ve formátu COO . Typ sloupce popisku je vektor Single , zatímco ostatní dva sloupce jsou skalární typ klíče .

Název výstupního sloupce Typ sloupce Description
Score Single Předpovězená maticová hodnota v umístění určeném vstupními sloupci (sloupec indexu řádku a sloupec indexu sloupců).

Charakteristiky trenéra

Úloha strojového učení Doporučené systémy
Vyžaduje se normalizace? Ano
Vyžaduje se ukládání do mezipaměti? Ano
Požadovaný NuGet kromě Microsoft.ML Microsoft.ML.Recommender
Exportovatelné do ONNX No

Background

Základní myšlenkou faktorizace matice je nalezení dvou matric faktoru nízkého pořadí pro přibližnou trénovací matici. V tomto modulu jsou očekávaná trénovací data (faktorizovaná matice) seznam řazených kolekcí členů. Každá řazená kolekce členů se skládá z indexu sloupce, indexu řádku a hodnoty v umístění určeném dvěma indexy. Například datovou strukturu řazené kolekce členů můžete použít:

// 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;
}

Všimněte si, že není nutné zadávat všechny položky v trénovací matici, aby bylo možné použít faktorizaci matice k vyplnění chybějících hodnot. Toto chování je velmi užitečné při sestavování systémů doporučovačů.

Abychom lépe pochopili praktické použití faktorizace matice, podívejme se na doporučení hudby jako příklad. Předpokládejme, že ID uživatelů a ID hudby se používají jako indexy řádků a sloupců a hodnoty matice jsou hodnocení poskytovaná těmito uživateli. To znamená, že hodnocení $r$ na řádku $u$ a sloupec $v$ znamená, že uživatel $u$ dává $r$ položku $v$. Neúplná matice je velmi běžná, protože ne všichni uživatelé mohou poskytnout zpětnou vazbu ke všem produktům (například nikdo nemůže hodnotit deset milionů skladeb). Předpokládejme, že $R\in{\mathbb R}^{m\times n}$ je matice hodnocení m-by-n a pořadí dvoufaktorových matic jsou $P\v {\mathbb R}^{k\times m}$ a $Q\in {\mathbb R}^{k\times n}$, kde $k$ je pořadí aproximace. Predikované hodnocení na řádku $u$-th a sloupec $v$-th v $R$ by byl vnitřní součin $u$-th řádku $P$ a $v$-th řádku $Q$; to znamená, že $R$ je přibližný součin transponace $P$ ($P^T$) a $Q$. Všimněte si, že $k$ je obvykle mnohem menší než $m$ a $n$, takže $P^T Q$ se obvykle nazývá aproximace $R$.

Tento trenér zahrnuje metodu stochastického přechodu a metodu souřadnicového sestupu pro hledání $P$ a $Q$ minimalizací vzdálenosti mezi $R$ a jeho aproximací $P^T Q$. Zahrnutá metoda souřadnicového sestupu je určena speciálně pro faktorizaci matice jedné třídy, kde všechna pozorovaná hodnocení jsou pozitivní signály (to znamená, že všechny hodnoty hodnocení jsou 1). Všimněte si, že jediný způsob, jak vyvolat faktorizaci matice jedné třídy, je přiřadit ztrátu 1 třídy ke ztrátěfunkce při volání MatrixFactorization(Options). Stručný úvod ke standardní maticové faktorizaci a faktorizaci matice s jednou třídou najdete zde na stránce 6 a na stránce 28. Výchozí nastavení indukuje standardní faktorizaci matice. Podkladovou knihovnu použitou v ML.NET faktorizaci matice najdete v úložišti GitHub.

Pro uživatele, kteří se zajímají o matematické podrobnosti, se podívejte na následující odkazy.

Odkazy na příklady použití najdete v části Viz také.

Vlastnosti

Name Description
Info

Obsahuje TrainerInfo obecné parametry pro tohoto trenéra.

Metody

Name Description
Fit(IDataView, IDataView)

Trénuje MatrixFactorizationTrainer pomocí trénovacích i ověřovacích dat, vrátí hodnotu MatrixFactorizationPredictionTransformer.

Fit(IDataView) Vlaky a vrací .MatrixFactorizationPredictionTransformer
GetOutputSchema(SchemaShape)

Šíření schématu pro transformátory Vrátí výstupní schéma dat, pokud je vstupní schéma podobné zadanému schématu.

Metody rozšíření

Name Description
AppendCacheCheckpoint<TTrans>(IEstimator<TTrans>, IHostEnvironment)

Připojte kontrolní bod ukládání do mezipaměti do řetězu odhadce. Tím zajistíte, aby podřízené estimátory byly natrénovány proti datům uloženým v mezipaměti. Před průchodem více dat je užitečné mít kontrolní bod ukládání do mezipaměti.

WithOnFitDelegate<TTransformer>(IEstimator<TTransformer>, Action<TTransformer>)

Vzhledem k estimátoru vraťte objekt obtékání, který jednou zavolá delegáta Fit(IDataView) . Často je důležité, aby estimátor vrátil informace o tom, co bylo vhodné, což je důvod, proč Fit(IDataView) metoda vrací konkrétní typ objekt, spíše než jen obecný ITransformer. Ve stejnou dobu se však často vytvářejí do kanálů s mnoha objekty, takže možná budeme muset vytvořit řetěz odhadců prostřednictvím IEstimator<TTransformer> místa, kde odhadovač, EstimatorChain<TLastTransformer> pro který chceme získat transformátor, je někde v tomto řetězu. Pro tento scénář můžeme prostřednictvím této metody připojit delegáta, který bude volána po zavolání fit.

Platí pro

Viz také