Линейная регрессия (Linear Regression)

Рейтинг лучших бинарных брокеров за 2020 год:
  • FinMax
    FinMax

    Бонусы для новых трейдеров до 30 000$!

  • BINARIUM
    BINARIUM

    Огромный раздел по обучению. Бесплатные прогнозы и стратегии!

Линейные модели: простая регрессия

В прошлый раз мы подробно рассмотрели многообразие линейных моделей. Теперь перейдем от теории к практике и построим самую простую, но все же полезную модель, которую вы легко сможете адаптировать к своим задачам. Модель будет проиллюстрирована кодом на R и Python, причем сразу в трех ароматах: scikit-learn, statsmodels и Patsy.

Простейшая линейная регрессия

Переходя с R на Python, многие начинают со statsmodels, потому что в ней есть привычные R’овские формулы:

Благодаря библиотеке Patsy вы легко можете использовать R-подобные формулы в любой своей программе:

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

Изучаем данные

Итак, мы уже построили модель… Однако скорее всего мы допустили ошибку, возможно даже и не одну. Поскольку мы не изучили данные, прежде чем браться за модель, то получили модель непонятно чего. Поэтому давайте все же заглянем в данные и посмотрим что там есть.
Как вы помните, в исходной таблице было 4 столбца: x1, x2, x3 и y. И мы построили регрессионную зависимость y от всех x. Поскольку мы не можем одним взглядом сразу охватить весь 4-мерный гиперкуб, то посмотрим на отдельные графики x-y.

Сразу бросается в глаза x3 — бинарный признак — а с ними стоит быть повнимательнее. В частности, имеет смысл взглянуть на совместное распределение остальных x вместе с x3.

Теперь пришло время отобразить график, соответствующий построенной модели. И тут стоит обратить внимание, что наша линейная модель — это вовсе не линия, а гиперплоскость, поэтому на двумерном графике мы сможем отобразить только отдельный срез этой модельной гиперплоскости. Проще говоря, чтобы показать график модели в координатах x1y надо зафиксировать значения x2 и x3, а, меняя их, получим бесконечное множество графиков — и все они будут графиками модели (а точнее проекцией на плоскость x1y).
Поскольку x3 — бинарный признак — можно показать отдельную линию для каждого значения признака, а x1 и x2 зафиксировать на уровне среднего арифметического, то есть нарисуем графики y=f(x1 | x2=E(x2)) и y=f(x2 | x1=E(x1)), где E — среднее арифметическое по всем значениям x1 и x2 соответственно.

И сразу бросается в глаза, что график y

x2 выглядит как-то неправильно. Помня, что построенная модель должна предсказывать математическое ожидание y, тут мы видим, что модельная линия как раз математическому ожиданию совсем не сооветствует: например в начале графика голубые точки реальных значений находятся ниже голубой линии, а в конце — выше, причем у красной линии все наоборот, хотя обе линии должны проходить примерно посредине облака точек.
Приглядевшись внимательнее, можно догадаться, что голубая и красная линии должны быть даже непараллельны. Как же это сделать в линейной модели? Очевидно, что построив линейную модель у=f(x1,x2,x3) мы можем получить бесконечное количество линий вида y=f(x2 | x1,x3), то есть зафиксировав две из трех переменных. Так, в частности, получены красная линия у=f(x2 | x1=E(x), x3=0) и голубая у=f(x2 | x1=E(x), x3=1) на правом графике. Однако, все подобные линии будут параллельны.

Непараллельная линейная модель

x2 имела один и тот же наклон, задаваемый коэффициентом b2. Теперь же в зависимости от значения x3 линия будет иметь наклон b2 (для x3=0) или b2+b4 (для x3=1).

Линейная регрессия в машинном обучении

Линейная регрессия ( Linear regression ) — модель зависимости переменной x от одной или нескольких других переменных (факторов, регрессоров, независимых переменных) с линейной функцией зависимости.

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

Это очень важно:  Индикатор EMA (Экспоненциальная скользящая средняя)

Применение линейной регрессии

Предположим, нам задан набор из 7 точек (таблица ниже).

Цель линейной регрессии — поиск линии, которая наилучшим образом соответствует этим точкам. Напомним, что общее уравнение для прямой есть f (x) = m⋅x + b, где m — наклон линии, а b — его y-сдвиг. Таким образом, решение линейной регрессии определяет значения для m и b, так что f (x) приближается как можно ближе к y. Попробуем несколько случайных кандидатов:

Народный рейтинг русских брокеров:
  • FinMax
    FinMax

    Бонусы для новых трейдеров до 30 000$!

  • BINARIUM
    BINARIUM

    Огромный раздел по обучению. Бесплатные прогнозы и стратегии!

Довольно очевидно, что первые две линии не соответствуют нашим данным. Третья, похоже, лучше, чем две другие. Но как мы можем это проверить? Формально нам нужно выразить, насколько хорошо подходит линия, и мы можем это сделать, определив функцию потерь.

Функция потерь — метод наименьших квадратов

Функция потерь — это мера количества ошибок, которые наша линейная регрессия делает на наборе данных. Хотя есть разные функции потерь, все они вычисляют расстояние между предсказанным значением y( х) и его фактическим значением. Например, взяв строку из среднего примера выше, f(x)=−0.11⋅x+2.5, мы выделяем дистанцию ошибки между фактическими и прогнозируемыми значениями красными пунктирными линиями.

Одна очень распространенная функция потерь называется средней квадратичной ошибкой (MSE). Чтобы вычислить MSE, мы просто берем все значения ошибок, считаем их квадраты длин и усредняем.

Вычислим MSE для каждой из трех функций выше: первая функция дает MSE 0,17, вторая — 0,08, а третья — 0,02. Неудивительно, что третья функция имеет самую низкую MSE, подтверждая нашу догадку, что это линия наилучшего соответствия.

Рассмотрим приведенный ниже рисунок, который использует две визуализации средней квадратичной ошибки в диапазоне, где наклон m находится между -2 и 4, а b между -6 и 8.

Слева: диаграмма, изображающая среднеквадратичную ошибку для -2≤m≤4, -6≤p≤8 Справа: тот же рисунок, но визуализирован как контурный график, где контурные линии являются логарифмически распределенными поперечными сечениями высоты.

Глядя на два графика, мы видим, что наш MSE имеет форму удлиненной чаши, которая, по-видимому, сглаживается в овале, грубо центрированном по окрестности (m, p) ≈ (0.5, 1.0). Есл и мы построим MSE линейной регрессии для другого датасета, то получим аналогичную форму. Поскольку мы пытаемся минимизировать MSE, наша цель — выяснить, где находится самая низкая точка в чаше.

Больше размерностей

Вышеприведенный пример очень простой, он имеет только одну независимую переменную x и два параметра m и b. Что происходит, когда имеется больше переменных? В общем случае, если есть n переменных, их линейная функция может быть записана как:

Один трюк, который применяют, чтобы упростить это — думать о нашем смещении «b», как о еще одном весе, который всегда умножается на «фиктивное» входное значение 1. Другими словами:

Добавление измерений, на первый взгляд, ужасное усложнение проблемы, но оказывается, постановка задачи остается в точности одинаковой в 2, 3 или в любом количестве измерений. Существует функция потерь, которая выглядит как чаша — гипер-чаша! И, как и прежде, наша цель — найти самую нижнюю часть этой чаши, объективно наименьшее значение, которое функция потерь может иметь в отношении выбора параметров и набора данных.

Итак, как мы вычисляем, где именно эта точка на дне? Распространенный подход — обычный метод наименьших квадратов, который решает его аналитически. Когда есть только один или два параметра для решения, это может быть сделано вручную, и его обычно преподают во вводном курсе по статистике или линейной алгебре.

Проклятие нелинейности

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

Различие между линейными уравнениями, которые мы составили, и нейронной сетью — функция активации (например, сигмоида, tanh, ReLU или других).

Эта нелинейность означает, что параметры не действуют независимо друг от друга, влияя на форму функции потерь. Вместо того, чтобы иметь форму чаши, функция потерь нейронной сети более сложна. Она ухабиста и полна холмов и впадин. Свойство быть «чашеобразной» называется выпуклостью, и это ценное свойство в многопараметрической оптимизации. Выпуклая функция потерь гарантирует, что у нас есть глобальный минимум (нижняя часть чаши), и что все дороги под гору ведут к нему.

Но, вводя нелинейность, мы теряем это удобство ради того, чтобы дать нейронным сетям гораздо большую «гибкость» при моделировании произвольных функций. Цена, которую мы платим, заключается в том, что больше нет простого способа найти минимум за один шаг аналитически. В этом случае мы вынуждены использовать многошаговый численный метод, чтобы прийти к решению. Хотя существует несколько альтернативных подходов, градиентный спуск остается самым популярным методом.

Это очень важно:  Сигналы на бинарные опционы 60 секунд

Линейная регрессия (реализация Python)

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

Линейная регрессия — это статистический подход для моделирования отношений между зависимой переменной с заданным набором независимых переменных.

Примечание: в этой статье мы называем зависимые переменные как ответ, а независимые переменные — как функции для простоты.

Чтобы обеспечить базовое понимание линейной регрессии, мы начнем с самого основного варианта линейной регрессии, то есть простой линейной регрессии .

Простая линейная регрессия

Простая линейная регрессия — это подход для прогнозирования ответа с использованием одной функции .

Предполагается, что две переменные линейно связаны. Следовательно, мы пытаемся найти линейную функцию, которая предсказывает значение отклика (y) настолько точно, насколько это возможно, как функцию признака или независимой переменной (x).

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

Для общности определим:

x как вектор признаков , то есть x = [x_1, x_2,…., x_n],

y как вектор ответа , то есть y = [y_1, y_2,…., y_n]

для n наблюдений (в приведенном выше примере n = 10).

Диаграмма рассеяния указанного набора данных выглядит следующим образом:

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

Эта линия называется линией регрессии .

Уравнение линии регрессии представляется в виде:

  • h (x_i) представляет прогнозируемое значение ответа для i-го наблюдения.
  • b_0 и b_1 — коэффициенты регрессии и представляют y- пересечение и наклон линии регрессии соответственно.

Чтобы создать нашу модель, мы должны «выучить» или оценить значения коэффициентов регрессии b_0 и b_1. И после того, как мы оценили эти коэффициенты, мы можем использовать модель для прогнозирования ответов!

В этой статье мы собираемся использовать технику наименьших квадратов .

Здесь e_i — это остаточная ошибка в i-м наблюдении.
Итак, наша цель — минимизировать общую остаточную ошибку.

Мы определяем квадрат ошибки или функции стоимости, J как:

и наша задача — найти значения b_0 и b_1, для которых J (b_0, b_1) минимально!

Не вдаваясь в математические детали, представим здесь результат:

где SS_xy — сумма перекрестных отклонений y и x:

и SS_xx — сумма квадратов отклонений x:

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

Ниже приведена реализация вышеописанной техники на нашем маленьком наборе данных на python:

import numpy as np

import matplotlib.pyplot as plt

def estimate_coef(x, y):

# количество наблюдений / баллов

# среднее значение вектора x и y

m_x, m_y = np.mean(x), np.mean(y)

# вычисление перекрестного отклонения и отклонения о х

SS_xy = np. sum (y * x) — n * m_y * m_x

SS_xx = np. sum (x * x) — n * m_x * m_x

# вычисление коэффициентов регрессии

b_1 = SS_xy / SS_xx

b_0 = m_y — b_1 * m_x

def plot_regression_line(x, y, b):

# построение фактических точек в виде точечной диаграммы

plt.scatter(x, y, color = «m» ,

marker = «o» , s = 30 )

# предсказанный вектор ответа

y_pred = b[ 0 ] + b[ 1 ] * x

# построение линии регрессии

plt.plot(x, y_pred, color = «g» )

# функция показа сюжета

x = np.array([ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 ])

y = np.array([ 1 , 3 , 2 , 5 , 7 , 8 , 8 , 9 , 10 , 12 ])

b = estimate_coef(x, y)

print («Estimated coefficients:\nb_0 = <> \

\nb_1 = <>«. format (b[ 0 ], b[ 1 ]))

# построение линии регрессии

plot_regression_line(x, y, b)

if __name__ = = «__main__» :

Вывод вышеупомянутого куска кода:

И полученный график выглядит так:

Множественная линейная регрессия

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

Ясно, что это не что иное, как расширение простой линейной регрессии.

Рассмотрим набор данных с p функциями (или независимыми переменными) и одним ответом (или зависимой переменной).
Кроме того, набор данных содержит n строк / наблюдений.

X ( матрица признаков ) = матрица размера n X p, где x_ обозначает значения j-го признака для i-го наблюдения.

y ( вектор ответа ) = вектор размера n, где y_ обозначает значение ответа для i-го наблюдения.

Линия регрессии для р объектов представлена в виде:

где h (x_i) — прогнозируемое значение отклика для i-го наблюдения, а b_0, b_1,…, b_p — коэффициенты регрессии .

Также мы можем написать:

где e_i представляет остаточную ошибку в i-м наблюдении.

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

Итак, теперь линейная модель может быть выражена в виде матриц как:

Теперь определим оценку b , т.е. b ‘, используя метод наименьших квадратов .

Это очень важно:  Скользящий Боллинджер

Как уже объяснено, метод наименьших квадратов имеет тенденцию определять b ‘, для которого общая остаточная ошибка минимизирована.

Мы представляем результат прямо здесь:

где ‘представляет транспонирование матрицы, а -1 представляет обратную матрицу.

Зная оценки наименьших квадратов, b ‘, модель множественной линейной регрессии теперь можно оценить как:

где у ‘- предполагаемый вектор ответа .

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

Ниже приводится реализация метода множественной линейной регрессии в наборе данных о ценах на жилье в Бостоне с использованием Scikit-learn.

import matplotlib.pyplot as plt

import numpy as np

from sklearn import datasets, linear_model, metrics

# загрузить бостонский набор данных

boston = datasets.load_boston(return_X_y = False )

# определение матрицы признаков (X) и вектора ответа (y)

# разбиение X и Y на обучающие и тестовые наборы

from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.4 ,

# создать объект линейной регрессии

# обучаем модель с использованием тренировочных наборов
reg.fit(X_train, y_train)

print ( ‘Coefficients: \n’ , reg.coef_)

# дисперсионный балл: 1 означает идеальный прогноз

print ( ‘Variance score: <>‘ . format (reg.score(X_test, y_test)))

# график остаточной ошибки

## настройка стиля сюжета

## построение остаточных ошибок в обучающих данных

plt.scatter(reg.predict(X_train), reg.predict(X_train) — y_train,

color = «green» , s = 10 , label = ‘Train data’ )

## построение остаточных ошибок в тестовых данных

plt.scatter(reg.predict(X_test), reg.predict(X_test) — y_test,

color = «blue» , s = 10 , label = ‘Test data’ )

## построение линии для нулевой остаточной ошибки

plt.hlines(y = 0 , xmin = 0 , xmax = 50 , linewidth = 2 )

plt.legend(loc = ‘upper right’ )

plt.title( «Residual errors» )

## функция показа сюжета
plt.show()

Вывод вышеуказанной программы выглядит следующим образом:

и График остаточной ошибки выглядит так:

В приведенном выше примере мы определяем показатель точности, используя объясненный показатель отклонения .
Мы определяем:
объяснено_вариант_score = 1 — Var / Var
где y ‘- расчетный целевой результат, y — соответствующий (правильный) целевой выход, а Var — дисперсия, квадрат стандартного отклонения.
Наилучшая возможная оценка — 1,0, более низкие значения — хуже.

Предположения

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

  • Линейная связь : связь между откликом и характеристическими переменными должна быть линейной. Предположение о линейности можно проверить с помощью диаграмм рассеяния. Как показано ниже, 1-я фигура представляет линейно связанные переменные, где переменные на 2-й и 3-й фигуре, скорее всего, являются нелинейными. Итак, первая цифра даст лучшие прогнозы с использованием линейной регрессии.
  • Небольшая мультиколлинеарность или ее отсутствие. Предполагается, что мультиколлинеарность данных практически отсутствует. Мультиколлинеарность возникает, когда объекты (или независимые переменные) не являются независимыми друг от друга.
  • Мало или нет автокорреляции: Другое предположение, что существует мало или нет автокорреляции в данных. Автокорреляция происходит, когда остаточные ошибки не зависят друг от друга. Вы можете обратиться сюда для более глубокого понимания этой темы.
  • Гомоскедастичность . Гомоскедастичность описывает ситуацию, в которой термин ошибки (то есть «шум» или случайное нарушение в отношениях между независимыми переменными и зависимой переменной) одинаков для всех значений независимых переменных. Как показано ниже, фигура 1 имеет гомоскедастичность, тогда как фигура 2 имеет гетероскедастичность.

Когда мы дойдем до конца этой статьи, мы обсудим некоторые применения линейной регрессии ниже.

Приложения:

1. Линии тренда. Линия тренда представляет собой изменение некоторых количественных данных с течением времени (например, ВВП, цены на нефть и т. Д.). Эти тенденции обычно следуют линейным отношениям. Следовательно, линейная регрессия может применяться для прогнозирования будущих значений. Однако этот метод страдает от недостатка научной обоснованности в тех случаях, когда другие потенциальные изменения могут повлиять на данные.

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

3. Финансы. В модели активов на основе цены капитала используется линейная регрессия для анализа и количественной оценки систематических рисков инвестиций.

4. Биология. Линейная регрессия используется для моделирования причинно-следственных связей между параметрами в биологических системах.

Ссылки:

Этот блог предоставлен Нихилом Кумаром . Если вам нравится GeeksforGeeks и вы хотели бы внести свой вклад, вы также можете написать статью, используя contrib.geeksforgeeks.org, или отправить свою статью на электронный адрес contrib@geeksforgeeks.org. Смотрите свою статью, появляющуюся на главной странице GeeksforGeeks, и помогите другим вундеркиндам.

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

Открыть счет и забрать бонусы:
  • FinMax
    FinMax

    Бонусы для новых трейдеров до 30 000$!

  • BINARIUM
    BINARIUM

    Огромный раздел по обучению. Бесплатные прогнозы и стратегии!

Понравилась статья? Поделиться с друзьями:
Бинарные опционы для начинающих от А до Я
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: