Линейная регрессия — это алгоритм для начинающих, позволяющий начать машинное обучение. Давайте углубимся в математику, стоящую за этим алгоритмом.

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

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

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

Где мы используем этот алгоритм?

  1. Количество часов, потраченных на учебу, по сравнению с оценками, набранными учащимися
  2. Количество осадков против урожайности сельскохозяйственных культур
  3. Использование электроэнергии против счета за электроэнергию
  4. Уровень самоубийств против количества стрессовых людей
  5. Годы опыта против зарплаты
  6. Спрос против цены продукта
  7. Возраст против красоты
  8. Возраст против проблем со здоровьем
  9. Количество степеней против зарплаты
  10. Количество ученых степеней и расходы на образование

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

Типы методов регрессии

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

Введение

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

Простая регрессия

В простой линейной регрессии используется традиционная форма пересечения наклона, где m и b — переменные. Алгоритм попытается «обучиться», чтобы производить наиболее правильные прогнозы, где x представляет наши входные данные, а y представляет наш прогноз.

y = mx + b ; m: slope, b: intercept

Многопараметрическая регрессия

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

f(x,y,z) = w1x + w2y + w3z;
x, y, z are three input parameters & w represents weight

Переменные x, y, z представляют атрибуты или отдельные фрагменты информации, которые у нас есть о каждом наблюдении. Для прогнозов продаж эти атрибуты могут включать расходы компании на рекламу на радио, телевидении и в газетах.

Sales = w1Radio + w2TV + w3News

Простая регрессия

Допустим, у нас есть набор данных со следующими столбцами (признаками): сколько компания ежегодно тратит на рекламу на радио, по сравнению с годовым объемом продаж проданных единиц. Мы пытаемся разработать уравнение, которое позволит нам прогнозировать количество проданных единиц на основе того, сколько компания тратит на радиорекламу. Строки (наблюдения) представляют компании.

Прогнозирование

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

Sales = Weight⋅Radio + Bias

Вес: коэффициент для независимой переменной Radio. В машинном обучении мы называем коэффициенты весами.

Радио: независимая переменная. В машинном обучении мы называем эти переменные features.

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

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

Функция стоимости

Основная установка для обновления веса и смещения заключается в определении функции стоимости (также известной как функция потерь), которая измеряет, насколько хорошо модель предсказывает результаты на тестовом наборе. Цель состоит в том, чтобы затем найти набор весов и смещений, который уменьшает значение функции стоимости. Одним из часто используемых методов является среднеквадратическая ошибка (MSE). для измерения разницы между фактическим значением y и оценочным значением y (прогнозируемое значение). Уравнение приведенной выше линии регрессии:

hθ(x) = θ0 + θ1x (resembles y = mx + c)

У него всего два параметра: вес (θ1) и смещение (θ0). Это уравнение используется для составления уравнения функции стоимости, как показано на изображении выше. Далее функция стоимости вычисляется несколько раз до тех пор, пока ее значение не уменьшится (до некоторой степени) и мы не получим приемлемые результаты. Чтобы сравнить реальное значение с прогнозируемым значением, мы используем MSE или дисперсию.

Учитывая наше простое линейное уравнение y=mx + b, мы можем рассчитать MSE как:

MSE = (1/N) ∑(i=1 to n)(yi − (mxi + b))^2
N is the total number of observations (data points)
(1/N) ∑(i=1 to n) is the mean
yi is the actual value of an observation and mxi+b is our prediction

Дисперсия и MSE — это одно и то же?

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

Градиентный спуск

Чтобы уменьшить MSE, мы используем градиентный спуск и вычисляем градиент нашей функции стоимости. Градиентный спуск выполняется итеративно, чтобы найти оптимальные значения параметров, соответствующие уменьшающемуся значению заданной функции стоимости, с помощью исчисления. Математически метод «производной ' чрезвычайно важен для уменьшения функции стоимости, потому что помогает получить минимальный балл. Производная - это понятие из исчисления и относится к наклону функции в данной точке. Нам нужно знать наклон, чтобы мы знали направление (знак) для перемещения значений коэффициента, чтобы получить более низкую стоимость на следующей итерации.

Математика

В нашей функции стоимости есть два параметра (коэффициента), которыми мы можем управлять: вес m и смещение b. Поскольку нам нужно учитывать влияние каждого из них на окончательный прогноз, мы используем частные производные. Чтобы найти частные производные, мы используем цепное правило. Нам нужно цепное правило, потому что (y−(mx+b))² — это две вложенные функции: внутренняя функция (y−(mx+b)) и внешняя функция x².

Возвращаясь к нашей функции стоимости:

Во-первых, мы рассмотрим цепное правило:

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

На данный момент вы должны думать о том, как кодировать эти функции. Расслабляться!!

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

#First splitting data for training data(85%) and testing data(15%)
#test_size can be changed 
#random_state Controls the shuffling applied to the data before applying the split 1==True
#Here x_data = df['Radio ($)'] & y_data = df['Sales']
from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(x_data, y_data, test_size=0.15, random_state=1)
#Creating linear regression model
from sklearn.linear_model import LinearRegression
#Create the linear regression object
lm = LinearRegression()
lm.fit(x_train, y_train)
test_y_hat = lm.predict(x_test)
print("Mean absolute error: %.2f" % np.mean(np.absolute(test_y_hat - y_test)))
print("Residual sum of squares (MSE): %.2f" % np.mean((test_y_hat - y_test) ** 2))
print("Accuracy of train dataset is : ",lm.score(x_train,y_train))
print("Accuracy of test dataset is : ",lm.score(x_test,y_test))

Многомерная регрессия

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

Нормализация

По мере роста числа признаков расчет градиента занимает больше времени. Мы можем ускорить это, «нормализовав» наши входные данные, чтобы убедиться, что все значения находятся в одном диапазоне. Это особенно важно для наборов данных с высокими стандартными отклонениями или различиями в диапазонах атрибутов. Наша цель теперь будет заключаться в том, чтобы нормализовать наши функции, чтобы все они находились в диапазоне от -1 до 1.

Прогнозирование

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

Продажи = w1TV + w2Radio + w3Newspaper

Функция стоимости

Теперь нам нужна функция стоимости, чтобы проверить, как работает наша модель. Математика та же, за исключением того, что мы меняем выражение mx+b на w1x1+w2x2+w3x3. Мы также разделим выражение на два, чтобы упростить вычисление производной.

MSE = (1/2N) (∑i=1n(yi−(W1x1+W2x2+W3x3))^2)

Градиентный спуск

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

f′(W1)=−x1(y−(W1x1+W2x2+W3x3))
f′(W2)=−x2(y−(W1x1+W2x2+W3x3))
f′(W3)=−x3(y−(W1x1+W2x2+W3x3))

Упрощение матрицы

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

Мы используем ту же формулу, что и выше, но вместо того, чтобы работать с одной функцией за раз, мы используем умножение матриц для одновременной работы со всеми функциями и весами. Мы заменяем члены xi одной матрицей признаков X.

gradient= −X(targets−predictions)

Вот как работает математика в многомерной регрессии. Понимания этого более чем достаточно, потому что мы никогда не используем это напрямую в нашем коде. Мы используем алгоритм напрямую, используя библиотеку sci-kit learning.

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