MatrixFactorizationTrainer Класс

Определение

Прогнозирование IEstimator<TTransformer> элементов в матрице с помощью факторизации матрицы (также известного как тип совместной фильтрации).

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)
Наследование
MatrixFactorizationTrainer
Реализации

Комментарии

Чтобы создать этот обучатель, используйте MatrixFactorization или MatrixFactorization(Options).

Входные и выходные столбцы

Существует три входных столбца, один для индексов строк матрицы, один для индексов столбцов матрицы, а один — для значений (т. е. меток) в матрице. Они вместе определяют матрицу в формате COO . Тип столбца метки является вектором Single , а другие два столбца являются скалярными типами ключей .

Имя выходного столбца Тип столбца Description
Score Single Прогнозируемое значение матрицы в расположении, указанном входными столбцами (столбец индекса строк и столбец индекса столбца).

Характеристики тренера

Задача машинного обучения системы рекомендаций.
Требуется ли нормализация? Yes
Требуется ли кэширование? Yes
Обязательный NuGet в дополнение к Microsoft.ML Microsoft.ML.Recommender
Экспортируемый в ONNX No

Предыстория

Основная идея факторизации матрицы заключается в поиске двух низкоранговых матриц матриц, чтобы приблизить матрицу обучения. В этом модуле ожидаемые данные обучения (факторизованная матрица) — это список кортежей. Каждый кортеж состоит из индекса столбца, индекса строки и значения в расположении, указанном двумя индексами. Пример структуры данных кортежа можно использовать:

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

Обратите внимание, что не обязательно указывать все записи в матрице обучения, поэтому факторизация матрицы может использоваться для заполнения отсутствующих значений. Это поведение очень полезно при создании систем рекомендаций.

Чтобы обеспечить лучшее понимание практического использования факторизации матрицы, давайте рассмотрим рекомендацию по музыке в качестве примера. Предположим, что идентификаторы пользователей и музыкальные идентификаторы используются в качестве индексов строк и столбцов соответственно, а значения матрицы — это оценки, предоставляемые этими пользователями. То есть оценка $r$ по строке $u$ и столбцу $v$ означает, что пользователь $u$ дает $r$ элементу $v$. Неполная матрица очень распространена, так как не все пользователи могут предоставлять свои отзывы всем продуктам (например, никто не может оценить десять миллионов песен). Предположим, что $R\in{\mathbb R}^{m\times n}$ является матрицей рейтингов m-by-n и рангом двух коэффициентов матрицы являются $P\in {\mathbb R}^{k\times m}$ и $Q\in {\mathbb R}^{k\times n}$, где $k$ является рангом приближения. Прогнозируемый рейтинг по строке $u$-th и столбец $v$-th в $R$ будет внутренним продуктом строки $u$-th $P$ и $v$-th строкой $Q$; т. е. $R$ приблизительно по продукту транспонирования $P$ ($P^T$) и $Q$. Обратите внимание, что $k$ обычно гораздо меньше, чем $m$ и $n$, поэтому $P^T Q$ обычно называется низкоранговой приближением $R$.

Этот тренер включает в себя метод стохастического градиента и метод спуска координат для поиска $P$ и $Q$ путем минимизации расстояния между (не отсутствующим частью) $R$ и его приближением $P^T Q$. Метод спуска координат включается специально для одноклассовой факторизации матрицы, где все наблюдаемые оценки являются положительными сигналами (то есть все значения оценки равно 1). Обратите внимание, что единственным способом вызова одноклассовой факторизации матрицы является назначение одноклассовой квадратной потери функции потери при вызове MatrixFactorization(Options). Сведения о стандартной факторизации матрицы и одноклассной факторизации матриц см. на странице 6 и странице 28. Параметр по умолчанию вызывает стандартную факторизацию матрицы. Базовая библиотека, используемая в ML.NET факторизации матрицы, можно найти в репозитории Github.

Для пользователей, заинтересованных в математических деталях, см. приведенные ниже ссылки.

Ознакомьтесь с разделом "См. также" ссылки на примеры использования.

Свойства

Имя Описание
Info

Содержит TrainerInfo общие параметры для этого обучающего средства.

Методы

Имя Описание
Fit(IDataView, IDataView)

Обучает как обучающие MatrixFactorizationTrainer , так и проверяющие данные, возвращает значение MatrixFactorizationPredictionTransformer.

Fit(IDataView) Поезда и возвращается MatrixFactorizationPredictionTransformer.
GetOutputSchema(SchemaShape)

Распространение схемы для преобразователей. Возвращает выходную схему данных, если входная схема похожа на указанную.

Методы расширения

Имя Описание
AppendCacheCheckpoint<TTrans>(IEstimator<TTrans>, IHostEnvironment)

Добавьте "контрольную точку кэширования" в цепочку оценщика. Это гарантирует, что нижестоящий оценщик будет обучен по кэшированным данным. Рекомендуется использовать контрольную точку кэширования перед обучением, которые принимают несколько передач данных.

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

При оценке возвращает объект оболочки, который вызовет делегат после Fit(IDataView) вызова. Часто важно для оценки возвращать сведения о том, что было подходяще, поэтому Fit(IDataView) метод возвращает специально типизированный объект, а не просто общий ITransformer. Однако, в то же время, IEstimator<TTransformer> часто формируются в конвейеры с множеством объектов, поэтому нам может потребоваться построить цепочку оценщиков с помощью EstimatorChain<TLastTransformer> того, где оценка, для которой мы хотим получить преобразователь, похоронен где-то в этой цепочке. В этом сценарии мы можем подключить делегат, который будет вызываться после вызова.

Применяется к

См. также раздел