MatrixFactorizationTrainer Třída
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
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.
- Vícevláknové implementace použité metody stochastického přechodu naleznete v tématu Fast Parallel Stochastic Gradient Method for Matrix Factorization in Shared Memory Systems.
- Výpočet probíhající uvnitř jednoho vlákna najdete v části Plán rychlosti učení pro stochastické metody přechodu na maticovou faktorizaci.
- Paralelní metoda sestupu souřadnic použitá a vzorec faktorizace matice 1 třídy naleznete v tématu Výběr záporných vzorků pro maticové faktorizace jedné třídy.
- Podrobnosti o použité podkladové knihovně najdete v tématu LIBMF: Knihovna pro paralelní maticové faktorizace v systémech se sdílenou pamětí.
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) |
|
| 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. |