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.
Для пользователей, заинтересованных в математических деталях, см. приведенные ниже ссылки.
- Реализация многопоточных методов используемого метода стохастического градиента см. в статье "Быстрый параллельный градиентный метод" для факторизации матриц в системах общей памяти.
- Сведения о вычислениях, происходящих внутри одного потока, см. в разделе "Расписание скорости обучения" для стохастичных градиентных методов в матрицу факторизации.
- Метод параллельного спуска координат, используемый и формула одноклассовой матрицы факторизации, см. в разделе "Выбор отрицательных примеров" для одноклассовой факторизации матрицы.
- Дополнительные сведения в используемой базовой библиотеке см. в статье LIBMF: библиотека для параллельной матричной факторизации в системах с общей памятью.
Ознакомьтесь с разделом "См. также" ссылки на примеры использования.
Свойства
| Имя | Описание |
|---|---|
| Info |
Содержит TrainerInfo общие параметры для этого обучающего средства. |
Методы
| Имя | Описание |
|---|---|
| Fit(IDataView, IDataView) |
Обучает как обучающие MatrixFactorizationTrainer , так и проверяющие данные, возвращает значение MatrixFactorizationPredictionTransformer. |
| Fit(IDataView) |
|
| GetOutputSchema(SchemaShape) |
Распространение схемы для преобразователей. Возвращает выходную схему данных, если входная схема похожа на указанную. |
Методы расширения
| Имя | Описание |
|---|---|
| AppendCacheCheckpoint<TTrans>(IEstimator<TTrans>, IHostEnvironment) |
Добавьте "контрольную точку кэширования" в цепочку оценщика. Это гарантирует, что нижестоящий оценщик будет обучен по кэшированным данным. Рекомендуется использовать контрольную точку кэширования перед обучением, которые принимают несколько передач данных. |
| WithOnFitDelegate<TTransformer>(IEstimator<TTransformer>, Action<TTransformer>) |
При оценке возвращает объект оболочки, который вызовет делегат после Fit(IDataView) вызова. Часто важно для оценки возвращать сведения о том, что было подходяще, поэтому Fit(IDataView) метод возвращает специально типизированный объект, а не просто общий ITransformer. Однако, в то же время, IEstimator<TTransformer> часто формируются в конвейеры с множеством объектов, поэтому нам может потребоваться построить цепочку оценщиков с помощью EstimatorChain<TLastTransformer> того, где оценка, для которой мы хотим получить преобразователь, похоронен где-то в этой цепочке. В этом сценарии мы можем подключить делегат, который будет вызываться после вызова. |