diff --git a/notes/machine_learning/bayesian_methods.ipynb b/notes/machine_learning/bayesian_methods.ipynb index 5dcdaf6..3da7b0e 100644 --- a/notes/machine_learning/bayesian_methods.ipynb +++ b/notes/machine_learning/bayesian_methods.ipynb @@ -12,7 +12,7 @@ "\n", "Под априорной (необученной) дискриминативной моделью распределения матрицы «объекты-признаки» $X$, вектора целевой переменной $y$ и параметров модели $\\theta$ будем понимать условную плотность $p(y, \\theta \\, \\vert \\, X) = p(y \\, \\vert \\, X, \\theta) p(\\theta \\, \\vert X) = p(y \\, \\vert \\, X, \\theta) p(\\theta)$, где последнее равенство верно, потому что предполагается, что априорное распределение параметров не зависит от данных. Доступность такой априорной дискриминативной модели будем понимать как то, что оба множителя из правой части (то есть $p(y \\, \\vert \\, X, \\theta)$ и $p(\\theta)$) известны в аналитическом виде.\n", "\n", - "В байесовском смысле задачей обучения дискриминативной модели является задача нахождения апостериорной условной плотности $p(\\theta \\, \\vert \\, X_\\mathrm{train}, y_\\mathrm{train})$, где $X_\\mathrm{train}$ и $y_\\mathrm{train}$ образуют обучающую выборку. Искомая условная плотность находится по теореме Байеса, где \"меняются местами\" $\\theta$ и $y_\\mathrm{train}$ и где все вероятности являются условными относительно $X_\\mathrm{train}$ (просто на заметку: в дискриминативном моделировании в отличие от генеративного моделирования не предполагается, что известна $p(X_\\mathrm{train})$):\n", + "В байесовском смысле задачей обучения дискриминативной модели является задача нахождения апостериорной условной плотности $p(\\theta \\, \\vert \\, X_\\mathrm{train}, y_\\mathrm{train})$, где $X_\\mathrm{train}$ и $y_\\mathrm{train}$ образуют обучающую выборку. Искомая условная плотность находится по теореме Байеса, где «меняются местами» $\\theta$ и $y_\\mathrm{train}$ и где все вероятности являются условными относительно $X_\\mathrm{train}$ (просто на заметку: в дискриминативном моделировании в отличие от генеративного моделирования не предполагается, что известна $p(X_\\mathrm{train})$):\n", "$$p(\\theta \\, \\vert \\, X_\\mathrm{train}, y_\\mathrm{train}) = \\frac{p(y_\\mathrm{train} \\, \\vert \\, X_\\mathrm{train}, \\theta) p(\\theta)}{\\int p(y_\\mathrm{train} \\, \\vert \\, X_\\mathrm{train}, \\theta) p(\\theta) d\\theta}.$$\n", "В предположении, что интеграл из знаменателя нижеследующего равенства берётся, задача обучения решена, а если он не берётся, то используются приближённые байесовские методы.\n", "\n", @@ -280,7 +280,7 @@ "* условная $\\Theta$-сопряжённость: вариационный ME-алгоритм, оценивающий $q(Z) = \\delta(T - T_0) \\left(\\prod_{i=1}^m q_i(\\Theta_i)\\right) \\approx p(T, \\Theta \\, \\vert \\, X)$;\n", "* никаких свойств нет: жёсткий EM-алгоритм, оценивающий $q(Z) = \\delta(T - T_0) \\delta(\\Theta - \\Theta_0) \\approx p(T, \\Theta \\, \\vert \\, X)$, то есть дающий только точечные оценки.\n", "\n", - "Получившийся список можно прокомментировать так. Чем более слабое свойство имеется, тем более \"простым\" распределением приходится полагать то распределение, которое ищется в задаче статистического вывода. \"Простота\" здесь понимается как факторизуемость и атомарность.\n", + "Получившийся список можно прокомментировать так. Чем более слабое свойство имеется, тем более «простым» распределением приходится полагать то распределение, которое ищется в задаче статистического вывода. «Простота» здесь понимается как факторизуемость и атомарность.\n", "\n", "Напоследок разберём какой-нибудь пример, показывающий, почему указанных свойств достаточно для соответствующих методов. Скажем, остановимся на достаточности $T$-сопряжённости для точного EM-алгоритма. В точном EM-алгоритме сложное место находится на E-шаге, где ищется распределение $$q^{(n+1)}(Z) = p(Z \\, \\vert \\, X, \\Theta^{(n)}) = \\frac{p(X, Z \\, \\vert \\, \\Theta^{(n)})}{\\int p(X, Z \\, \\vert \\, \\Theta^{(n)}) dZ} = \\frac{p(X \\, \\vert \\, Z, \\Theta^{(n)})p(Z \\, \\vert \\, \\Theta^{(n)})}{\\int p(X \\, \\vert \\, Z, \\Theta^{(n)})p(Z \\, \\vert \\, \\Theta^{(n)}) dZ} = \\frac{p(X \\, \\vert \\, T, \\Theta^{(n)})p(T \\, \\vert \\, \\Theta^{(n)})\\delta(\\Theta - \\Theta^{(n)})}{\\int p(X \\, \\vert \\, T, \\Theta^{(n)})p(T \\, \\vert \\, \\Theta^{(n)})\\delta(\\Theta - \\Theta^{(n)}) dT d\\Theta} = \\frac{p(X \\, \\vert \\, T, \\Theta^{(n)})p(T \\, \\vert \\, \\Theta^{(n)})}{\\int p(X \\, \\vert \\, T, \\Theta^{(n)})p(T \\, \\vert \\, \\Theta^{(n)}) dT} = \\frac{p(X, T \\, \\vert \\, \\Theta^{(n)})}{\\int p(X, T \\, \\vert \\, \\Theta^{(n)}) dT},$$\n", "и тут интеграл в полученном в конце выражении берётся явно в силу $T$-сопряжённости." @@ -642,7 +642,7 @@ "\n", "Напомним, что начальные значения $\\mu_1$ и $V_1$ были вычислены при описании базы индукции, так что теперь можно вычислить $\\mu_t$ и $V_t$ для любого $t$. Для этого, начав с прогноза на шаг $t=1$, можно в цикле сначала прогнозировать на следующий шаг, а потом корректировать такой прогноз на соответствующее наблюдаемое значение.\n", "\n", - "Подобная процедура называется проходом вперёд (forward algorithm) — так же, как алгоритм для скрытых марковских моделей, который вычислял аналогичные распределения (правда, с другой конечной целью: с целью вычислительно эффективно найти вероятность последовательности наблюдаемых состояний). Также данный алгоритм называют фильтром Калмана. Слово \"фильтр\" здесь интерпретируется в том ключе, что наблюдаемые значения предполагаются зашумлёнными версиями истинных скрытых значений и требуется сгладить временной ряд, отфильтровав шум.\n", + "Подобная процедура называется проходом вперёд (forward algorithm) — так же, как алгоритм для скрытых марковских моделей, который вычислял аналогичные распределения (правда, с другой конечной целью: с целью вычислительно эффективно найти вероятность последовательности наблюдаемых состояний). Также данный алгоритм называют фильтром Калмана. Слово «фильтр» здесь интерпретируется в том ключе, что наблюдаемые значения предполагаются зашумлёнными версиями истинных скрытых значений и требуется сгладить временной ряд, отфильтровав шум.\n", "\n", "#### Задача нахождения наиболее вероятной последовательности скрытых состояний\n", "\n", @@ -684,7 +684,7 @@ "$$p(x, t \\, \\vert \\, \\theta) = p(x \\, \\vert \\, t, \\theta) p(t \\, \\vert \\, \\theta).$$\n", "Если сделать это удачным образом, то можно добиться того, что распределение $p(x, t \\, \\vert \\, \\theta)$ окажется в экспоненциальном классе. Правда, из-за присутствия скрытых переменных найти $\\theta$ методом максимального правдоподобия уже не получится. Придётся использовать [EM-алгоритм](__home_url__/notes/Общий взгляд на EM-алгоритм).\n", "\n", - "Выше было употреблено размытое словосочетание \"удачным образом\". Проиллюстрируем его значение на примерах. Допустим, исходная $p(x \\, \\vert \\, \\theta)$ соответствует смеси нормальных распределений. Это распределение не принадлежит к экспоненциальному классу. Однако предположим, что теперь введён один дополнительный категориальный признак $t$, кодирующий номер компоненты смеси, откуда был порождён объект. Тогда $p(x, t \\, \\vert \\, \\theta)$ будет лежать в экспоненциальном классе, потому что разлагается в произведение двух множителей, из которых один, а именно $p(x \\, \\vert \\, t, \\theta)$, является плотностью нормального распределения, а другой, то есть $p(t \\, \\vert \\, \\theta)$, является плотностью дискретного распределения. Сам по себе такой шаг хорош. Однако и его можно реализовать неправильно. Количество компонент смеси $k$ должно быть подобрано, и здесь есть опасность недоподгонки или переподгонки. Например, в вырожденном случае $k = l$ каждый объект окажется в своей собственной компоненте, ковариационную матрицу которой, кстати, нельзя будет достоверно оценить." + "Выше было употреблено размытое словосочетание «удачным образом». Проиллюстрируем его значение на примерах. Допустим, исходная $p(x \\, \\vert \\, \\theta)$ соответствует смеси нормальных распределений. Это распределение не принадлежит к экспоненциальному классу. Однако предположим, что теперь введён один дополнительный категориальный признак $t$, кодирующий номер компоненты смеси, откуда был порождён объект. Тогда $p(x, t \\, \\vert \\, \\theta)$ будет лежать в экспоненциальном классе, потому что разлагается в произведение двух множителей, из которых один, а именно $p(x \\, \\vert \\, t, \\theta)$, является плотностью нормального распределения, а другой, то есть $p(t \\, \\vert \\, \\theta)$, является плотностью дискретного распределения. Сам по себе такой шаг хорош. Однако и его можно реализовать неправильно. Количество компонент смеси $k$ должно быть подобрано, и здесь есть опасность недоподгонки или переподгонки. Например, в вырожденном случае $k = l$ каждый объект окажется в своей собственной компоненте, ковариационную матрицу которой, кстати, нельзя будет достоверно оценить." ] }, { @@ -907,7 +907,7 @@ "\n", "#### Введение\n", "\n", - "Латентное размещение Дирихле (Latent Dirichlet Allocation, LDA) является одним из методов тематического моделирования, опирающегося на подход \"мешка слов\". В рамках такого подхода порядок слов внутри документов не учитывается, а учитывается только то, сколько раз то или иное слово вошло в тот или иной документ.\n", + "Латентное размещение Дирихле (Latent Dirichlet Allocation, LDA) является одним из методов тематического моделирования, опирающегося на подход «мешка слов». В рамках такого подхода порядок слов внутри документов не учитывается, а учитывается только то, сколько раз то или иное слово вошло в тот или иной документ.\n", "\n", "LDA является довольно простым методом тематического моделирования, и это даёт ему высокую интерпретируемость, так что можно провести такую аналогию, что LDA для задачи тематического моделирования является примерно тем же, чем линейные модели для задачи регрессии.\n", "\n", diff --git a/notes/machine_learning/miscellaneous.ipynb b/notes/machine_learning/miscellaneous.ipynb index 02ee602..2a4039e 100644 --- a/notes/machine_learning/miscellaneous.ipynb +++ b/notes/machine_learning/miscellaneous.ipynb @@ -38,8 +38,8 @@ "В многомерном случае для каждого объекта считается оценка его типичности (например, оценка плотности генеральной совокупности в нём), а затем выбросами объявляются те объекты, у которых оценка типичности ниже некоторого порога.\n", "\n", "Способы оценить типичность таковы:\n", - "* Метод ядерного сглаживания (kernel density estimate) для оценки плотности генеральной совокупности. Правда, он подвержен \"проклятью размерности\" и работает только в случае, когда размерность данных низкая. Если же размерность высокая, то для применения ядерного сглаживания можно предварительно снизить её, использовав PCA, t-SNE или MDS на отмасштабированных данных, однако как проводить масштабирование — нетривиальный вопрос, вносящий долю субъективности.\n", - "* Расстояние Махаланобиса от объекта до некоторого оценённого по данным распределения, принимаемого за генеральную совокупность. Для вектора $x$ и многомерного вероятностного распределения $\\tau(\\mu, S)$ с вектором средних $\\mu$ и ковариационной матрицей $S$ \"расстоянием\" от $x$ до $\\tau(\\mu, S)$ можно положить величину:\n", + "* Метод ядерного сглаживания (kernel density estimate) для оценки плотности генеральной совокупности. Правда, он подвержен «проклятью размерности» и работает только в случае, когда размерность данных низкая. Если же размерность высокая, то для применения ядерного сглаживания можно предварительно снизить её, использовав PCA, t-SNE или MDS на отмасштабированных данных, однако как проводить масштабирование — нетривиальный вопрос, вносящий долю субъективности.\n", + "* Расстояние Махаланобиса от объекта до некоторого оценённого по данным распределения, принимаемого за генеральную совокупность. Для вектора $x$ и многомерного вероятностного распределения $\\tau(\\mu, S)$ с вектором средних $\\mu$ и ковариационной матрицей $S$ «расстоянием» от $x$ до $\\tau(\\mu, S)$ можно положить величину:\n", "$$D_M(x, \\tau(\\mu, S)) = \\sqrt{(x - \\mu)^T S^{-1} (x - \\mu)},$$\n", "которая и называется расстоянием Махаланобиса. Интуитивно говоря, расстояние Махаланобиса отличается от евклидова расстояния между $x$ и $\\mu$ тем, что каждое направление учитывается с весом, обратно пропорциональным разбросу распределения по этому направлению. Само по себе расстояние Махаланобиса не является плотностью, но если $\\tau$ является гауссовским распределением, то плотность выражается через него и $S$. В литературе этот способ также известен как эллиптическая огибающая (elliptic envelope).\n", "* [Приближение распределения данных смесью многомерных нормальных распределений](__home_url__/notes/Восстановление плотности при помощи EM-алгоритма). Этот подход можно считать обобщением подхода с расстоянием Махалонобиса от $x$ до $\\tau$, являющегося многомерным нормальным распределением, на случай смеси подобных распределений.\n", @@ -65,13 +65,13 @@ "* случайные пропуски — по другим признакам объекты можно разбить на группы, а в каждой группе вероятность, что признак пропущен, одинакова для всех объектов;\n", "* неслучайные пропуски — все остальные случаи (например, вероятность пропуска может зависеть от значения признака).\n", "\n", - "Также отметим, что если процедура заполнения пропусков недетерминирована, её можно применить несколько раз к одному и том же набору данных. В контексте машинного обучения польза от этого под вопросом, ведь качество модели, обученной на конкатенации получившихся нескольких заполненных наборов данных, необязательно будет выше, чем качество модели, обученной только на одном из них. Однако в контексте математической статистики кратные заполнения важны, ведь в них найдёт своё отражение неопределённость, вносимая недетерминированной процедурой заполнения пропусков.\n", + "Также отметим, что если процедура заполнения пропусков недетерминирована, её можно применить несколько раз к одному и том же набору данных. В контексте машинного обучения польза от этого под вопросом, ведь качество модели, обученной на конкатенации получившихся нескольких заполненных наборов данных, необязательно будет выше, чем качество модели, обученной только на одном из них. Однако в контексте [математической статистики](__home_url__/tags/математическая_статистика) кратные заполнения важны, ведь в них найдёт своё отражение неопределённость, вносимая недетерминированной процедурой заполнения пропусков.\n", "\n", "Ниже разбирается, какие есть варианты решения проблемы пропущенных значений.\n", "\n", "#### Использование алгоритмов обучения, умеющих работать с пропусками\n", "\n", - "С пропусками умеют работать решающие деревья и ансамбли над ними. В некоторых программных реализациях в каждом узле объекты, пришедшие в него и содержащие пропуск того признака, по которому в этом узле происходит разделение, идут в обе ветки с весами, пропорциональными тому, как этот узел делит объекты обучающей выборки с заполненным признаком, и в сумме дающими 1. Таким образом, один объект может прийти в несколько листьев, а итоговым предсказанием для него станет взвешенная сумма предсказаний, возвращаемых этими листьями. В других реализациях на этапе обучения пропуск считается отдельным значением, для которого на основании оптимизации критерия, используемого в этом узле, решается, по какой из веток его отправлять. Если же на этапе применения появляется объект с пропуском признака, используемого в узле, где при обучении пропусков не было, он отправляется в ту ветку, куда ушло больше объектов обучающей выборки.\n", + "С пропусками умеют работать [решающие деревья](__home_url__/tags/решающие_деревья) и ансамбли над ними. В некоторых программных реализациях на этапе обучения пропуск считается отдельным значением, для которого на основании оптимизации критерия, используемого в этом узле, решается, по какой из веток его отправить. Если же на этапе применения появляется объект с пропуском признака, используемого в узле, где при обучении пропусков не было, он отправляется в ту ветку, куда ушло больше объектов обучающей выборки. В других реализациях вместо отправки пропуска строго в одну ветку используется отправка сразу в обе ветки с весами, пропорциональными тому, как этот узел делит объекты обучающей выборки с заполненным признаком, и в сумме дающими 1. Таким образом, на этапе обучения один объект влияет на предсказания в каждом из листьев, куда он пришёл, но с соответствующим уменьшенным весом, а на этапе предсказания итоговым значением для некого объекта является взвешенная сумма предсказаний, возвращаемых листьями, до которых он дошёл.\n", "\n", "Также с пропусками может работать метод ближайших соседей, если понятие евклидова расстояния доработать под пропуски. Если есть векторы $u, v \\in (\\mathbb{R} \\cup \\{\\mathrm{None}\\})^n$, то модифицированное расстояние между ними можно определить как:\n", "$$d(u, v) = \\sqrt{\\frac{n}{\\# I} \\sum_{i \\in I} (u_i - v_i)^2},$$\n", @@ -107,7 +107,7 @@ "* подверженность проклятью размерности,\n", "* чувствительность к масштабу признаков (в частности, результаты сильно зависят от единиц измерения).\n", "\n", - "Чтобы вместо метода ближайших соседей можно было использовать любой другой алгоритм машинного обучения, был предложен метод MICE (Multiple Imputation by Chained Equations). В виде псевдокода он устроен так:\n", + "Чтобы вместо метода ближайших соседей можно было использовать любой другой алгоритм машинного обучения, был предложен метод [MICE](https://www.researchgate.net/publication/44203418_MICE_Multivariate_Imputation_by_Chained_Equations_in_R) (Multiple Imputation by Chained Equations). В виде псевдокода он устроен так:\n", "* Все пропуски заполняются как-то.\n", "* Пока не пройдёт заданное число итераций (обычно берут 10):\n", " - Для каждого признака, исходно содержавшего пропуски:\n", @@ -367,28 +367,28 @@ "\n", "Пусть дана порождающая вероятностная модель $\\mathbb{P}\\!\\left(x_i \\, \\left| \\, \\{x_j\\}_{j=1}^{i-1}, v\\right.\\right)$, где $x_i$ — текущий элемент последовательности, $\\{x_j\\}_{j=1}^{i-1}$ — предшествующее ему начало этой последовательности, а $v$ — некоторый вектор (или иной объект), хранящий в себе дополнительную известную информацию (например, если порождается предложение, являющееся переводом заданного предложения на другом языке, то $v$ может быть векторным представлением переводимого предложения). Возникает вопрос: как из такой модели сэмплировать (порождать) последовательности?\n", "\n", - "Простейшим решением является \"жадное\" порождение. Можно выбрать начало по правилу:\n", + "Простейшим решением является «жадное» порождение. Можно выбрать начало по правилу:\n", "$$x_1 = \\arg \\max_x \\mathbb{P}\\!\\left(x \\, \\left| \\, \\{\\}, v\\right.\\right),$$\n", "а всякий раз далее выбирать следующий элемент по правилу:\n", "$$x_i = \\arg \\max_x \\mathbb{P}\\!\\left(x \\, \\left| \\, \\{x_j\\}_{j=1}^{i-1}, v\\right.\\right).$$\n", - "Как это и бывает с \"жадными\" алгоритмами, нет никаких гарантий, что полученная таким образом последовательность будет иметь наибольшую вероятность. Например, пусть рассматриваются последовательности длины 2 над символами $a$ и $b$, дополнительной информации нет (так что $v$ можно опустить), а вероятностная модель имеет вид:\n", + "Как это и бывает с «жадными» алгоритмами, нет никаких гарантий, что полученная таким образом последовательность будет иметь наибольшую вероятность. Например, пусть рассматриваются последовательности длины 2 над символами $a$ и $b$, дополнительной информации нет (так что $v$ можно опустить), а вероятностная модель имеет вид:\n", "$$\\mathbb{P}\\!\\left(a \\, \\left| \\, \\{\\}\\right.\\right) = 0.6,$$\n", "$$\\mathbb{P}\\!\\left(b \\, \\left| \\, \\{\\}\\right.\\right) = 0.4,$$\n", "$$\\mathbb{P}\\!\\left(a \\, \\left| \\, \\{a\\}\\right.\\right) = 0.5,$$\n", "$$\\mathbb{P}\\!\\left(b \\, \\left| \\, \\{a\\}\\right.\\right) = 0.5,$$\n", "$$\\mathbb{P}\\!\\left(a \\, \\left| \\, \\{b\\}\\right.\\right) = 0.9,$$\n", "$$\\mathbb{P}\\!\\left(b \\, \\left| \\, \\{b\\}\\right.\\right) = 0.1.$$\n", - "В рамках такой модели наиболее вероятной последовательностью является последовательность $ba$, однако \"жадный\" поиск закончится ничьёй между $aa$ и $ab$.\n", + "В рамках такой модели наиболее вероятной последовательностью является последовательность $ba$, однако «жадный» поиск закончится ничьёй между $aa$ и $ab$.\n", "\n", "Другой крайностью является полный (экспоненциальный) перебор, когда для каждой возможной последовательности считаются её вероятности, а затем выбирается та последовательность, у которой вероятность наибольшая. Разумеется, данный подход является вычислительно неподъёмным для порождения хоть сколько-нибудь длинных последовательностей.\n", "\n", - "Лучевой поиск (beam search) является компромиссным соединением двух вышеописанных подходов в один новый подход. По сути, это тоже \"жадный\" алгоритм, но чуть более дальновидный.\n", + "Лучевой поиск (beam search) является компромиссным соединением двух вышеописанных подходов в один новый подход. По сути, это тоже «жадный» алгоритм, но чуть более дальновидный.\n", "\n", "Алгоритм лучевого поиска для порождения последовательности длины $l$ (или не более чем $l$, если среди символов есть символ конца последовательности, после появления которого сэмплирование останавливается) получает на вход помимо собственно вероятностной модели и вектора $v$ массив из $l$ чисел $\\{n_i\\}_{i=1}^l$, интерпретируемых как количества подпоследовательностей, остающихся в рассмотрении после каждого шага.\n", "\n", "Устроен же сам алгоритм так. На первом шаге отбираются $n_1$ различных одноэлеметных подпоследовательностей, составленных каждая из одного из $n_1$ элементов с наибольшей $\\mathbb{P}\\!\\left(x \\, \\left| \\, \\{\\}, v\\right.\\right)$. На каждом же из последующих шагов (обозначим номер шага за $i$, $i > 1$) для каждой из $n_{i-1}$ отобранных на предыдущем шаге подпоследовательностей рассматриваются все её возможные продолжения на один элемент вперёд и из получившихся таким образом новых подпоследовательностей отбираются $n_i$ наиболее вероятных. Под конец из $n_l$ отобранных последовательностей выбирается одна наиболее вероятная и возвращается как результат.\n", "\n", - "\"Жадный\" алгоритм, приводившийся как пример решения в начале этой заметки, является частным случаем лучевого поиска при всех $n_i = 1$, а полный перебор является частным случаем лучевого поиска при значениях $n_i$, равных количествам всех без исключения возникающих на соответствующих шагах последовательностей." + "«Жадный» алгоритм, приводившийся как пример решения в начале этой заметки, является частным случаем лучевого поиска при всех $n_i = 1$, а полный перебор является частным случаем лучевого поиска при значениях $n_i$, равных количествам всех без исключения возникающих на соответствующих шагах последовательностей." ] }, { diff --git a/notes/machine_learning/recommender_systems.ipynb b/notes/machine_learning/recommender_systems.ipynb index facf9e7..751ed91 100644 --- a/notes/machine_learning/recommender_systems.ipynb +++ b/notes/machine_learning/recommender_systems.ipynb @@ -26,7 +26,7 @@ "\n", "Множество $I$ может состоять, например, из товаров в интернет-магазине, фильмов в онлайн-кинотеатре или публикаций для ленты в соцсети. Далее эти объекты будут называться предметами по аналогии с англоязычным «items», хотя они и не обязаны быть материальными. Такое обозначение выбрано, потому что слово «объект» применительно к машинному обучению означает элемент обучающей выборки (т.е. строку матрицы признакового описания $X$) и не хочется его перегружать.\n", "\n", - "Контекст может включать в себя признаки ситуации, в которой делаются рекомендации: например, тип рекомендательного блока. Но контекста может и не быть — тогда используются только признаки пользователей и предметов. В частности, если вернуться к примеру с типом блока, то можно обойтись без контекста, построив по отдельной рекомендательной системе для каждого типа.\n", + "Контекст позволяет учитывать признаки, относящиеся к ситуации, в которой делаются рекомендации: например, тип рекомендательного блока. Но контекста может и не быть — тогда используются только признаки пользователей и предметов. В частности, если вернуться к примеру с типом блока, то можно обойтись без контекста, построив по отдельной рекомендательной системе для каждого типа.\n", "\n", "Рекомендательные системы нужны, чтобы автоматизировать или хотя бы облегчить пользовательский выбор, а также чтобы направить его в нужное русло. Выбирать самостоятельно пользователи могут не желать по целому ряду причин. В случае с выбором трека на стриминговой платформе это отвлекает от непрерывного прослушивания музыки; в случае с покупкой дорогой бытовой техники качественный выбор может требовать поиска и анализа определённого количества информации; в случае заказа в сервисе доставки продуктов необходимо ничего не забыть из десятков позиций.\n", "\n", @@ -46,7 +46,7 @@ " \n", "#### Методы ранжирования\n", "\n", - "В число методов, которыми можно провести ранжирование (или отбор кандидатов), входят:\n", + "В число методов, которыми можно провести ранжирование, входят:\n", "* [подсчёт простой статистики](__home_url__/notes/Выдача рекомендаций универсальными методами) и [поиск баланса между изучением и применением](__home_url__/notes/Баланс между изучением и применением в задаче о многоруком бандите);\n", "* [коллаборативная фильтрация](__home_url__/notes/Коллаборативная фильтрация):\n", " - классическая,\n", @@ -63,7 +63,7 @@ "\n", "Некоторые из перечисленных вариантов могут быть использованы и для извлечения кандидатов, если они достаточно быстры в рантайме. Действительно, top-$k$ товаров, отранжированных каким-либо методом, можно рассматривать в качестве кандидатов для более сложного метода.\n", "\n", - "Также оценки релевантностью предмета пользователю, полученные каким-либо методом, можно использовать как признаки в мета-модели, обучаемой с учителем (разумеется, при условии, что используется разделение по времени и/или пользователям, чтобы избежать перетекания целевой переменной в эти признаки).\n", + "Также оценки релевантности предмета пользователю, полученные каким-либо методом, можно использовать как признаки в мета-модели, обучаемой с учителем (разумеется, при условии, что используется разделение по времени и/или пользователям, чтобы избежать перетекания целевой переменной в эти признаки).\n", "\n", "#### Открытые практические вопросы\n", "\n", @@ -88,9 +88,11 @@ "\n", "В матрице $R$ могут храниться оценки предметов, проставляемые пользователями. Тогда матрица $R$ содержит информацию, прямо указывающую на степени соответствия предметов пользователям (в англоязычной литературе это называют explicit feedback). Но может быть и так, что в матрице $R$ хранится количество покупок пользователем какого-либо предмета или бинарный индикатор того, что пользователь хотя бы раз покупал предмет. Тогда информация из матрицы $R$ лишь косвенно указывает на степени соответствия предметов пользователям, а именно делает это лишь в той мере, в какой можно считать, что всё, что пользователь приобретает, ему нравится (это называют implicit feedback).\n", "\n", - "При косвенной релевантности может всплыть проблема подбора отрицательных примеров. Например, если в $R$ хранится бинарный индикатор покупки, то все значения $R$ или равны 1, или не заполнены. В этом случае обучение только на заполненных ячейках бессмысленно. Но даже если бы в $R$ было количество покупок, важнее научиться отличать то, что пользователь никогда не купит, от того, что он может купить, так что и тут только от заполненных ячеек пользы мало. Разумеется, в незаполненные ячейки можно вписывать 0 (так называемый positive-unlabeled learning). Если $\\vert I \\vert$ позволяет, можно все незаполненные ячейки считать отрицательными примерами. Если же от этого задача станет вычислительно неподъёмной, для каждой строки в качестве отрицательных примеров используется лишь часть её ячеек. При этом есть смысл не ограничиваться случайным сэмплированием, а подбирать более сложные отрицательные примеры. \n", + "При косвенной релевантности может всплыть проблема подбора отрицательных примеров. Например, если в $R$ хранится бинарный индикатор покупки, то все значения $R$ или равны 1, или не заполнены. В этом случае обучение только на заполненных ячейках бессмысленно. Но даже если бы в $R$ было количество покупок, важнее научиться отличать то, что пользователь никогда не купит, от того, что он может купить, так что и тут только от заполненных ячеек пользы мало. Разумеется, в незаполненные ячейки можно вписывать 0 (так называемый positive-unlabeled learning). Метод [IALS](https://www.researchgate.net/publication/220765111_Collaborative_Filtering_for_Implicit_Feedback_Datasets) (Implicit Alternating Least Squares) делает так со всеми пустыми ячейками и обучается на полной матрице $R$ за приемлемое время. Однако в общем случае при большом $\\vert I \\vert$ для $i$-го пользователя в качестве отрицательных примеров приходится использовать лишь часть незаполненных ячеек из строки $R_{i\\cdot}$. При этом есть смысл не ограничиваться случайным сэмплированием, а подбирать более сложные отрицательные примеры. \n", "\n", - "В случае явной релевантности незаполненные ячейки матрицы $R$ не понадобятся, если для большинства пользователей встречается почти весь диапазон возможных значений. Но, например, в случае с товарами пользователи гораздо чаще ставят одну звезду, когда им что-то не понравилось, чем пять звёзд, когда всё понравилось. Чтобы выправить это смещение, можно добавить в качестве положительных примеров те товары, которые пользователь купил, но оставил без отзывов. А иногда может оказаться важным исключить субъективную интерпретацию шкалы, то есть добиться, чтобы значения ячеек $R$ содержали унифицированную количественную меру того, подошёл ли предмет пользователю или нет. В качестве простого решения матрицу $R$ можно преобразовать, из каждой строки вычтя её среднее, однако для некоторых методов пользы от этого не будет, поскольку они сами настраивают по данным сдвиги, причём не только для каждой строки, но и для каждого столбца.\n", + "Если же матрица $R$ хранит явные оценки релевантности, заполненных ячеек может оказаться достаточно, особенно если для большинства пользователей встречается почти весь диапазон возможных значений. Но, например, в случае с товарами пользователи гораздо чаще ставят одну звезду, когда им что-то не понравилось, чем пять звёзд, когда всё понравилось. Чтобы выправить это смещение, можно добавить в качестве положительных примеров те товары, у которых оценки нет, но которые пользователь покупал (желательно, несколько раз).\n", + "\n", + "В идеале, при явной обратной связи значения ячеек $R$ должны содержать унифицированную количественную меру того, подошёл ли предмет пользователю или нет, но на практике субъективная интерпретация шкалы может вносить искажения. Поэтому лучше или использовать бинарную шкалу («понравилось» и «не понравилось»), или уделить достаточно внимания сбору данных (например, разместить над формой отправки оценки краткую инструкцию).\n", "\n", "#### Сравнение с матрицей признакового описания\n", "\n", @@ -98,9 +100,9 @@ "* положительными примерами являются предметы, с которыми пользователь органически совершил целевое действие (скажем, заказал товар), отрицательные примеры сэмплируются случайно, а признаки рассчитываются на момент перед соответствующим целевым действием;\n", "* примерами являются фактические показы в рекомендациях, признаки рассчитываются на момент таких показов (возможно, с задержкой, имитирующей задержку данных в реальном сервисе), а целевая переменная зависит от того, привёл ли показ к совершению каких-либо целевых действий.\n", "\n", - "От вышеперечисленных матриц «объекты-признаки» кросс-табуляционная матрица отличается тем, что в ней пара из пользователя и предмета не может встретиться более одного раза. Стало быть, степень соответствия $j$-го предмета $i$-му пользователю всего одна, и можно считать, что она берётся по состоянию на текущей момент. Напротив, в матрицах «объекты-признаки» может получиться так, что в один момент времени некий предмет был отрицательным примером для пользователя, а позже стал положительным, но противоречия тут нет, потому что и признаки должны были поменяться.\n", + "Главное отличие кросс-табуляционной матрицы от матрицы признакового описания связано с тем, что именно она ожидается на вход многими методами, успешно работающими с идентификаторами пользователей и предметов. А вот в матрице признакового описания эти идентификаторы являются категориальными признаками, имеющими большое количество уникальных значений, каждое из которых встречается не так много раз. С такими признаками классические методы обучения на табличных данных работают не очень хорошо. \n", "\n", - "Однако главное отличие кросс-табуляционной матрицы от матриц признакового описания связано с тем, что её формат подходит для методов, в которых идентификаторы пользователей и предметов отображаются в векторные представления. Для классических методов машинного обучения идентификаторы являются категориальными признаками, имеющими большое количество уникальных значений, каждое из которых встречается не так много раз. А с такими признаками классические методы обучения на табличных данных работают не очень хорошо." + "Ещё одно отличие в том, что в кросс-табуляционной матрице пара из пользователя и предмета не может встретиться более одного раза. Стало быть, степень соответствия $j$-го предмета $i$-му пользователю всего одна, и можно считать, что она берётся по состоянию на текущий момент. Напротив, в матрицах «объекты-признаки» может получиться так, что в один момент времени некий предмет был отрицательным примером для пользователя, а позже стал положительным, но противоречия тут нет, потому что и признаки должны были поменяться. Отсюда вытекает, что только модели ранжирования, обученные на матрице «объекты-признаки», могут в режиме реального времени перестраивать рекомендации под текущие цели пользователя." ] }, { @@ -338,7 +340,7 @@ "\n", "#### Очищающий от шума автокодировщик\n", "\n", - "Ещё один из [подходов](http://users.cecs.anu.edu.au/~u5098633/papers/www15.pdf) предполагает обучение очищающего от шума автокодировщика. В обучающих данных объектами являются пользователи, представленные в виде строк матрицы $R$. Шумом же считается замена каких-либо значений на пропуски (или на плэйсхолдер пропуска, если пропуски не поддерживаются конкретным программным инструментом). Получив на вход строку с пропусками, автокодировщик должен вернуть строку без пропусков." + "Ещё один из [подходов](http://users.cecs.anu.edu.au/~u5098633/papers/www15.pdf) предполагает обучение очищающего от шума автокодировщика. В обучающих данных объектами являются пользователи, представленные в виде строк матрицы $R$. Шумом же считается замена каких-либо значений на пропуски (или на плэйсхолдер пропуска, если пропуски не поддерживаются конкретным программным инструментом). Получив на вход строку с искусственно добавленными пропусками, автокодировщик должен вернуть строку без этих пропусков (но с исходно существовавшими пропусками)." ] }, {