Практический подход к линейной регрессии в машинном обучении

Практическое руководство по линейной регрессии для новичков

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

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

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

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

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

где y - зависимая переменная, x - независимая переменная, m - наклон линии, а c - коэффициент (или точка пересечения по оси Y). Здесь y рассматривается как зависимая переменная, поскольку ее значение зависит от значений независимой переменной и других параметров.

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

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

В вышеупомянутом выражении hθ (x) - наша гипотеза, θ0 - это точка пересечения, а θ1 - это коэффициент модели.

Основные сведения о функциях затрат

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

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

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

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

Здесь я буду использовать Google Colab для построения этой модели. Вы также можете использовать другие IDE, такие как записные книжки Jupyter, для экспериментов с моделью.

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

ШАГ 1. ИМПОРТ БИБЛИОТЕК И ЗАГРУЗКА ДАННЫХ

Наш первый шаг - импортировать библиотеки, которые могут потребоваться для построения нашей модели. Нет необходимости импортировать все библиотеки в одном месте. Для начала мы импортируем Pandas, Numpy, Matplotlib и т. Д.

#Import Required Libraries
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
#Read the Dataset
df=pd.read_csv('kc_house_data.csv')

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

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

Для таких целей чаще всего используются файлы CSV, хотя также можно использовать Excel Sheet. Единственное отличие состоит в том, что вместо read_csv () нам придется использовать read_excel () при использовании таблицы Excel в качестве набора данных.

ШАГ 2. ВИЗУАЛИЗАЦИЯ ДАННЫХ

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

#Visualising the data using heatmap
plt.figure()
sns.heatmap(df.corr(),cmap='coolwarm')
plt.show()

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

ШАГ 3. РАЗРАБОТКА ФУНКЦИЙ

Визуализируя наши данные, мы обнаружили сильную корреляцию между двумя параметрами: sqft_living и price. Таким образом, мы будем использовать эти параметры для построения нашей модели.

#Selecting the required parameters
area = df[‘sqft_living’]
price = df['price']
x = np.array(area).reshape(-1,1)
y = np.array(price)

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

ШАГ 4. УСТАНОВКА МОДЕЛИ ЛИНЕЙНОЙ РЕГРЕССИИ

После выбора необходимых параметров следующим шагом будет импорт метода train_test_split из библиотеки sklearn. Это используется для разделения наших данных на данные для обучения и тестирования. Обычно 70–80% данных берутся в качестве набора данных для обучения, а остальные данные составляют набор данных для тестирования.

#Import LinearRegression and split the data into training and testing dataset
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(x,y,test_size=0.2,random_state = 0)
y_train = y_train.reshape(-1,1)
y_test = y_test.reshape(-1,1)
#Fit the model over the training dataset
from sklearn.linear_model import LinearRegression
model = LinearRegression()
model.fit(X_train,y_train)

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

#Calculate intercept and coefficient
print(model.intercept_)
print(model.coef_)
pred=model.predict(X_test)
predictions = pred.reshape(-1,1)
#Calculate root mean squared error to evaluate model performance
from sklearn.metrics import mean_squared_error
print('MSE : ', mean_squared_error(y_test,predictions)
print('RMSE : ', np.sqrt(mean_squared_error(y_test,predictions)))

Эффективность модели можно оценить, найдя среднеквадратичную ошибку модели. Меньше RMSE, лучше модель.

Линейная регрессия с использованием градиентного спуска

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

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

#Initializing the variables
m = 0
c = 0
L = 0.001
epochs = 100
n = float(len(x))

Подход градиентного спуска применяется шаг за шагом к нашим m и c. Сначала пусть m = 0 и c = 0. Пусть L - наша скорость обучения. Это контролирует, насколько значение m изменяется с каждым шагом.

for i in range(epochs):
    Y_pred=m*x+c
    Dm = (-2/n)*sum(x*(y-Y_pred))
    Dc = (-2/n)*sum(y-Y_pred)
    m = m-L*Dm
    c = c-L*Dc
print(m,c)
#Predicting the values
y_pred = df['sqft_living'].apply(lambda a:c+m*a)
y_pred.head()

Предпочтительно L присваивается небольшое значение, чтобы повысить точность. Наш следующий шаг - вычислить частную производную функции потерь по m и c. Как только это будет сделано, мы обновляем значения c и m и повторяем процесс до тех пор, пока наша функция потерь не станет очень маленькой.

На этом мы подошли к концу статьи. Я надеюсь, что эта статья помогла вам разобраться в идее алгоритмов линейной регрессии. Если у вас есть вопросы или вы считаете, что я допустил ошибку, свяжитесь со мной! Вы можете связаться со мной через: Электронная почта или LinkedIn.