Вопрос или проблема
Мое понимание l2 регуляризации:
Весы модели считаются имеющими априорное гауссово распределение, центрированное вокруг 0. Затем оценка MAP по данным добавляет дополнительное наказание в функцию стоимости.
Мое сформулированное заявление:
Я делаю разумное предположение (основанное на знаниях области), что мои признаки независимы, что означает, что я могу использовать веса признаков для вывода важности признаков в влиянии на Y.
Из знаний области я хочу предположить априоры о соотношении весов. Например:
W1/W2 – это гауссово распределение со средним 0.7
W2/W5 – это гауссово распределение со средним 2.4
И затем оценка MAP по данным даст мне функцию стоимости с добавленным дополнительным наказанием.
Правильно ли я рассуждаю? Моя цель – чтобы веса были близки к априорам, вычисленным на основе некоторых эвристик. Это также поможет мне справляться с разреженными данными.
Детали реализации:
Существует ли какая-либо библиотека (на любом языке), где это легко сделать? Или мне придется самостоятельно вычислять функцию стоимости и ее градиент и реализовывать градиентный спуск по ней?
Помощь с математикой:
Кроме того, я начал изучать статистику (и математику в целом) более строго, но мне еще предстоит пройти большой путь. Предполагая, что все Wi/Wj известны, может кто-то, пожалуйста, дать мне новую функцию стоимости. Я напишу программу для поиска весов на основе этой функции стоимости.
ИЗМЕНЕНИЕ:
Так как я знаю Wi/Wj, могу ли я предположить, что сумма(Wi) = 100 и подогнать байесовскую логистическую регрессию?
Кроме того, метод API подгонки байесовской логистической регрессии требует матрицы Гессе.
http://bayes-logistic.readthedocs.io/en/latest/usage.html?highlight=fit_bayes_logistic называет матрицу Гессе ковариационной матрицей подогнанных параметров MAP. Предполагая, что признаки независимы и дисперсия признака равна 1, могу ли я предположить, что матрица Гессе является единичной матрицей?
Вы описываете байесовскую логистическую регрессию, которая допускает априоры и распределительные оценки.
Python’s PyMC3 поддерживает байесовскую логистическую регрессию с помощью своего glm модуля.
Ответ или решение
Ваш подход к задачам регуляризации в логистической регрессии и использование априорных распределений для весов выглядит многообещающе. Давайте рассмотрим ваши вопросы более подробно.
Понимание L2 регуляризации
Вы правильно понимаете, что L2 регуляризация подразумевает, что веса модели предполагаются распределёнными по нормальному закону с центром в 0. Это действительно добавляет штраф в целевую функцию, что помогает избежать переобучения.
Ваше утверждение о соотношении весов
Ваше предположение о независимости признаков и использование соотношений весов для оценки их важности в модели — это разумный подход. Предполагая, что соотношения весов (например, W1/W2 и W2/W5) имеют свои распределения, вы можете индивидуально регулировать целевую функцию, добавляя кастомные штрафы, соответствующие вашим априорным знаниям.
Новая целевая функция
Общая форма целевой функции (логарифмическое правдоподобие с регуляризацией) может выглядеть следующим образом:
[
L(\mathbf{W}) = -\sum_{i=1}^{N} \left( y_i \log(p_i) + (1 – y_i) \log(1 – pi) \right) + \lambda R(\mathbf{W}) + \sum{j=1}^{m} \frac{(W_i/Wj – \mu{i,j})^2}{\sigma_{i,j}^2}
]
где:
- ( p_i = \sigma(\mathbf{W}^T \mathbf{x}_i) )
- ( R(\mathbf{W}) ) — регуляризующее слагаемое (например, L2)
- ( \lambda ) — коэффициент регуляризации
- ( \mu{i,j} ) и ( \sigma{i,j} ) — параметры ваших априорных распределений для соотношений.
Таким образом, вы фактически добавляете штраф за отклонение ваших соотношений от априорных значений.
Имплементация
Что касается реализации, вы можете использовать такие библиотеки, как PyMC3 или TensorFlow Probability для Bayesian Logistic Regression. В них есть инструменты для работы с априорными распределениями и MAP метода, что значительно упростит вашу задачу. Вы можете написать свою целевую функцию и использовать оптимальные методы, предоставляемые этими библиотеками.
Пример с PyMC3:
import pymc3 as pm
with pm.Model() as model:
# Определение априорных распределений для весов
w1 = pm.Normal('w1', mu=0, sigma=1)
w2 = pm.Normal('w2', mu=0, sigma=1)
...
# Определение соотношений
ratio1 = pm.Normal('ratio1', mu=0.7, sigma=sigma_ratio1, observed=w1/w2)
ratio2 = pm.Normal('ratio2', mu=2.4, sigma=sigma_ratio2, observed=w2/w5)
# Логистическая регрессия
y_obs = pm.Bernoulli('y_obs', logit_p=w1 * x1 + w2 * x2 + ..., observed=y)
# Мап-подход
trace = pm.sample(1000, tune=1000)
Гессианова матрица
Что касается гессиановой матрицы, если вы предполагаете независимость признаков и единичную дисперсию, можно предполагать, что она будет близка к единичной матрице. Однако реальная оценка зависит от данных и модели. Если ваши данные действительно имеют распределение единичной дисперсии, тогда можно использовать это в своих расчетах.
Заключение
Ваш подход, базирующийся на априорных знаниях и кастомной регуляризации, имеет основание с точки зрения теории. Использование библиотек, таких как PyMC3, значительно упростит вашу задачу, позволяя сосредоточиться на интерпретации и использовании результата. Удачи вам в вашем проекте!