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

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

Введение:

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

Что такое линейная регрессия?

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

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

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

Как мы прогнозируем, используя линейную регрессию?

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

из школьной математики, если вы помните, наше уравнение прямой линии выглядит так y=mx+cздесь вы можете думать о x как о независимой переменной и y в качестве целевой переменной, c – точка пересечения, а  – коэффициент или значение наклона, которое нам нужно найти, и для хорошегоmзначение,наша ошибка (фактическая-прогнозируемая) будет низкой, и мы можем вычислить эту ошибку с помощью RSS (остаточная сумма квадратов).

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

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



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

Линейная регрессия в Python:

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

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

шаги, которые мы собираемся выполнить:

а. Чтение и понимание данных

б. выполнение некоторых шагов предварительной обработки (кодирование, масштабирование)

в. обучение модели (используя statsmodels) и создание прогнозов.

  1. сначала импортируем все необходимые библиотеки

2. Прочитайте данные

наш набор данных состоит из 545 строк и 13 столбцов, таких как цена, спальня, истории и т. д..

3. проверить нулевые значения

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

4. Давайте также построим график, чтобы узнать взаимосвязь между переменными.

здесь я использовал простую функцию морского парного графика sns.pairplot(housing) для построения графика.

из приведенного выше графика видно, что цена и площадь коррелируют друг с другом.

5. Подготовка данных для моделирования

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

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

здесь в первой строке (index1) у нас есть значения (0,0), что означает, что этот конкретный дом меблирован, а в третьей строке у нас есть (1,0), что означает, что этот конкретный дом частично меблирован, и мы, наконец, объединяем его с исходным фреймом данных и удалить исходную переменную меблировки.

6. Обучайте, тестируйте расщепление и масштабирование

мы разделяем данные на обучение и тестирование, и мы используем данные обучения для обучения модели и данные тестирования для проверки модели. здесь мы использовали 70% данных для обучения и 30% данных для тестирования.

после разделения обучения и тестирования важно масштабировать все наши точки данных, чтобы привести все переменные к одному масштабу. здесь мы использовали min max_scaler.

из df_train мы получили наш X_trian и соответствующую метку y_train

7. Обучение модели

наконец, после предварительной обработки мы приходим к обучению модели, здесь мы используем библиотеку statsmodels, и она дает нам подробную статистику, такую ​​​​как значение p, F-статистика и т. д., но statsmodel не дает константы, нам нужно добавить нашу константу.

Проверка гипотез:

после обучения нашей модели важно удалить избыточные переменные, и если вы знаете проверку гипотез и значение p, ваша работа будет здесь намного проще. на самом деле наша нулевая гипотеза здесь состоит в том, что независимые переменные не оказывают существенного влияния на нашу зависимую переменную, а наша альтернативная гипотеза состоит в том, что наши независимые переменные оказывают значительное влияние на нашу зависимую переменную. поэтому, если наше значение p ‹0,05, мы отвергаем нулевую гипотезу, а если значение p›0,05, мы не можем отвергнуть нашу нулевую гипотезу. поэтому наша цель здесь — сохранить только значимые переменные, и нам нужно удалить избыточные переменные.

но ждать! наша работа еще не завершена проверкой значения p, нам нужно также изучить значение vif, так что же это за vif?

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

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

поэтому, проверяя значения p и vif, нам нужно удалить избыточные переменные.

Эмпирическое правило заключается в том, что если у вас есть значение p > 0,05, удалите эту конкретную переменную, а если у нас есть значение vif > 5, удалите эту конкретную переменную.

7. проверить ВИФ

здесь мы видим, что полумеблированная переменная имеет высокое значение p (0,93), и, следовательно, нам нужно удалить эту переменную и снова обучить нашу модель.

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

после удаления спален нам нужно снова обучить нашу модель и посмотреть на значения p и значения vif.

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

давайте сначала сделаем прогнозы по набору поездов.

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

8. Прогноз теста и оценка R_2

мы следуем тому же подходу, что и для тренировочного набора.

наконец, мы получили показатель R_2 67%, что не очень хорошо, и мы можем улучшить его, обучив другие модели, такие как гребень и лассо. но наша цель в этой статье — понять реализацию линейной регрессии в python. поэтому я остановлюсь здесь.

Я надеюсь, что эта статья помогла вам понять линейную регрессию и ее реализацию в python. Большое спасибо за то, что вы потратили свое время на изучение чего-то нового.

Если вам понравилась эта статья, пожалуйста, продемонстрируйте свою поддержку, аплодируя этой статье ниже, и это действительно мотивирует меня писать больше интересных статей, и если у вас есть какие-либо вопросы, оставьте комментарий ниже, и я буду рад услышать от вас.

Обо мне:

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

вы также можете найти меня в www.linkedin.com/in/manoj-gadde