Введение:

В первой части этой серии статей мы использовали градиентный спуск. Во второй части серии статей мы реализуем линейную регрессию, используя оценку максимального правдоподобия и максимум апостериорно.

Я рекомендую вам посмотреть это видео «MLE» перед чтением, чтобы лучше понять, о чем пойдет речь в этой статье.

План статьи:

  • Настройка данных
  • Оценщик максимального правдоподобия
  • Максимум апостериорно
  • Краткое содержание
  • Что дальше

Настройка данных:

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

В машинном обучении принято разбивать наши данные на 20% тестирования и 80% обучения. Можете посетить эту статью для получения дополнительной информации об этом.

Оценщик максимального правдоподобия:

Оценщик максимального правдоподобия (MLE) — это подход к поиску наилучшего распределения, соответствующего некоторым данным. В линейной регрессии мы также используем его, чтобы получить лучшие параметры = {m,b} для нашей линии y=mx+b.

Рассмотрим наши данные x сами по себе:

import matplotlib.pyplot as plt
samples = X.shape[0]
zero_axis = np.zeros(samples)
plt.scatter(X,zero_axis)
plt.xlabel('House(ft^2')
plt.show()

Наши данные x можно представить в виде нормального распределения — кривой в форме колокола,состоящей из двух частей: среднего (мю) и стандартного отклонения (сигма).

import scipy.stats as stats
import math
mean = np.mean(X)
variance = np.std(X)
std = math.sqrt(variance) # standard deviation formula
samples=X.shape[0]
# generating samples of X up to 3 std
data = np.linspace(mean - 3*std, mean + 3*std, samples) 
plt.plot(x, stats.norm.pdf(data, mean, std))
plt.xlabel('House area(ft^2)')
plt.title("X distribution")
plt.show()

Вероятность подгонки среднего значения и стандартного отклонения к выборочным данным может быть представлена ​​Гауссовой функцией плотности вероятности (pdf).

Предположим, мы хотим найти вероятность того, что некоторое распределение со случайным средним и стандартным значением соответствует одной точке данных в нашем наборе данных:

Вероятность того, что это распределение соответствует нашей единственной точке данных x, составляет 0,0024%. Чтобы найти вероятность того, что это распределение соответствует всем нашим данным, мы умножаем результаты, поскольку все события или вероятности являются независимыми.

Это также эквивалентно приведенному ниже выражению:

Если бы мы попробовали все возможные средние значения для одного и того же std в нашем гауссовском PDF, мы бы получили график ниже:

Наша цель — найти наилучшее среднее значение. Наилучшее среднее значение — это когда наклон равен 0, как показано ниже.

Чтобы найти лучшие параметры для нашей модели машинного обучения для прогнозирования новых данных, нам нужно будет внести несколько переменных изменений в нашу гауссову PDF:

Нас интересует нахождение наилучшего распределения не для наших функций (независимые переменные x), а для нашей метки (зависимая переменная y).

Наше среднее теперь представлено как mx+b. Мы делаем это так, чтобы, как только мы нашли наши параметры = {m, b}, представленные тета, для любого входа x мы могли предсказать выход y или создать распределение, которое соответствует y.

Мы заинтересованы в поиске наилучших параметров, где наклон нашего среднего значения равен 0. Математически это можно выразить следующим уравнением:

Чтобы найти, где наклон равен 0, нам нужно продифференцировать это уравнение. Однако работать с логами гораздо проще, поэтому лог возьмем вот такой:

Максимум правдоподобия или гауссовой PDF по-прежнему находится в том же месте, что и его логарифм, хотя значения могут быть другими. Это называется монотонное преобразование.

Обычно используется версия с отрицательным логарифмическим правдоподобием, как показано ниже:

Максимум логарифмической вероятности находится в том же месте, что и минимум отрицательной логарифмической вероятности. Подобно x² и -x² из средней школы.

Совет: Всегда используйте журнал для вероятностей, так как с ним легче работать.

Примечание. Не стесняйтесь пропустить часть математического вывода, если математика покажется вам слишком сложной, и сразу переходите к реализации кода.

Математический вывод MLE:

Наше уравнение правдоподобия для минимизации:

Давайте сначала упростим это выражение, используя правило умножения журнала. Это изменяет log(x1 * x2…*xn) на ряд суммирования (logx1+logx2…+logxn).

Внимание! Много математических вычислений (матриц и производных) для поиска наилучших параметров.

Теперь давайте подставим наши переменные в уравнение гауссовой PDF и упростим, где нашим средним значением является линия mx+b.

Давайте найдем наилучшее значение для нашего смещения, дифференцируя и изолируя его.

Мы выражаем наше смещение в терминах y, нашего веса и данных x, чтобы, когда мы вычисляем наши веса, мы могли позже найти наше смещение. Мы подставим это обратно в наше уравнение правдоподобия и упростим.

Бинго! Теперь мы нашли формулу, которая дает нам лучшие параметры ={m,b} с точки зрения нашего веса.

Реализация кода MLE:

Мы будем использовать следующие два уравнения, полученные ранее, для реализации MLE для наших весов и смещения:

Давайте теперь предскажем наш набор тестовых данных и посмотрим на график.

model =LinearRegressionMLE(X_train,y_train)
parameters = model.train()
weights = parameters[0:-1,:]
bias = parameters[-1,:]
prediction =  model.predict(X_test)
plt.title('House area vs Price')
plt.xlabel('House area(ft^2)')
plt.ylabel('Price($)')
linear_equation = "y={:0.2f}x+{:0.2f}".format(weights[0][0],bias[0])
plt.plot(X_test,prediction,color='k',label=linear_equation)
plt.scatter(X_test,y_test,label='Correct output')
plt.legend()
plt.show()

Наши параметры, как показано линией, хорошо подходят как для наших обучающих, так и для тестовых данных. Если вы помните из прошлой статьи, это означает, что у нас низкое смещение (низкая ошибка обучения) и низкая дисперсия (низкая ошибка тестирования).

Максимум апостериорно:

Максимальная апостериорная (MAP) похожа на MAE, но с априорной, то есть гипотезой о наших данных. Он использует Байесовский вывод для оценки наилучшего распределения, соответствующего данным. Узнайте значение терминов ниже здесь.

Поскольку нас интересует только вероятность параметров, мы можем удалить знаменатель, так как он на него не влияет.

Апостериорное значение пропорционально вероятности и априорному.

Чтобы получить наилучшие параметры, соответствующие распределению нашей метки или предсказать его, нам нужно минимизировать следующее:

Уравнение правдоподобия, которое мы будем использовать для байесовского вывода, представляет собой ту же гауссовскую PDF.

Математический вывод MAP:

Бинго! Теперь мы нашли формулу, которая дает нам наилучшие параметры ={m,b} с точки зрения нашего веса и смещения. Смещение остается той же формулой, что и в MLE.

Реализация кода карты:

Мы будем реализовывать следующие два уравнения, полученные ранее:

Давайте теперь предскажем наш набор тестовых данных и посмотрим на график.

prior = 10
model = LinearRegressionMAP(X_train,y_train,prior)
params = model.train()
weights = params[0:-1,:]
bias = params[-1,:]
prediction = model.predict(X_test)
linear_equation = "y={:0.2f}x + {:0.2f}".format(weights[0][0],bias[0])
plt.plot(X_test,prediction,color='k',label=linear_equation)
plt.scatter(X_test,y_test,label='True output')
plt.xlabel('House area(ft^2)')
plt.ylabel('Price($)')
plt.title('House area vs Price')
plt.legend()

Наша модель машинного обучения работает хорошо с параметрами, аналогичными параметрам MLE.

Вы можете задаться вопросом, как мы выбираем априор? Рассмотрим, из чего состоит приор:

Если числитель равен 0, это означает, что у нас нет дисперсии — наш истинный результат равен прогнозу. Если знаменатель станет очень большим, у нас будет бесполезный априор. Оба они могут сделать наш априор равным 0.

Если бы мы знали какое-либо из этих значений, мы бы использовали их. Однако на практике мы обычно ничего не знаем об этих вещах или знаем только одно из двух. Поэтому мы просто выбираем любое произвольное значение и экспериментируем с ним.

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

Краткое содержание:

Градиентный спуск: итеративный алгоритм оптимизации для минимизации наших потерь и получения наилучших параметров. Это чаще всего используется в машинном обучении, когда набор данных имеет небольшой или средний размер.

Оценщик максимального правдоподобия: метод оценки параметров путем максимизации правдоподобия. Используется в глубоком обучении и чаще всего используется, когда мы хотим построить статистическую модель.

Максимум апостериорного: частный случай MLE с априорным. Используется, когда мы знаем об априорной или гребневой регрессии с использованием регуляризации для предотвращения переобучения. В противном случае мы используем MLE или градиентный спуск.

Что дальше:

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