Модель машинного обучения

ВСТУПЛЕНИЕ

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

E(Y | X) = f(X, β)

СТАТИСТИКА ЗА АНАЛИЗОМ

Это легко понять с помощью графика (источник: Википедия)

Y = f(X) = 𝛽0 + 𝛽1 * X

𝛽0 - точка пересечения прямой

𝛽1 - наклон прямой

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

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

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

MSE (среднеквадратичная ошибка) является мерой качества для оценщика путем деления RSS на общее количество наблюдаемых точек данных. Это всегда неотрицательное число. Значения, близкие к нулю, представляют меньшую ошибку. RMSE (среднеквадратичная ошибка) - это квадратный корень из MSE. RMSE - это мера среднего отклонения оценок от наблюдаемых значений. Это легче наблюдать по сравнению с MSE, которых может быть много.

RMSE (квадратный корень из MSE) = √ (MSE)

Дополнительное количество переменных добавит модели больше измерений.

Y = f(X) = 𝛽0 + 𝛽1 * X1 + 𝛽1 * X2 + 𝛽1 * X3

ИСПОЛЬЗУЕМЫЕ ИНСТРУМЕНТЫ

  1. Python
  2. Graphlab
  3. S-фрейм (похож на фрейм данных Pandas)

ЗАГРУЗКА ДАННЫХ

Использованы данные о домах Сиэтла, штат Вашингтон. Он содержит следующие столбцы и около 21 000 строк.

Id: дата: цена: спальни: ванные: sqft_living sqft_lot: этажи: набережная: вид: состояние: уровень: sqft_above: sqft_basement: yr_built: yr_renovated: zipcode: lat: long: sqft_living: sqft_lot

> homesales = graphlab.SFrame(‘home_data.gl’)
> homesales

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

> homesales.show(view=”Scatter Plot”, x=”sqft_living”, y=”price”)

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

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

> homesales.show(view=’BoxWhisker Plot’, x=’zipcode’, y=’price’)

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

> my_features = [‘bedrooms’, ‘bathrooms’, ‘sqft_living’, ‘sqft_lot’, ‘floors’, ‘zipcode’]

ПРОГНОЗНАЯ АНАЛИТИКА

Первый шаг - получить набор данных для обучения и набор данных для тестирования. Давайте используем 80% в качестве обучающих данных, а оставшиеся 20% - для тестирования.

> train_data, test_data = homesales.random_split(0.8, seed=0)

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

> sqft_model = graphlab.linear_regression.create(train_data, target=’price’, features=[‘sqft_living’], validation_set=None)

Мы можем построить значения модели вместе с фактическими значениями, используя matplotlib.

> plt.plot(test_data[‘sqft_living’],test_data[‘price’],’.’, test_data[‘sqft_living’],sqft_model.predict(test_data),’-’)

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

ПОЛУЧЕННЫЕ РЕЗУЛЬТАТЫ

Давайте выберем дом и спрогнозируем его стоимость с помощью sqft_model.

> house2 = homesales[homesales[‘id’]==’5309101200']
> house2

Теперь давайте спрогнозируем стоимость дома с помощью sqft_model.

> print sqft_model.predict(house2)

[629584.8197281545]

Его прогнозируемая стоимость составила 629 584 доллара, что очень близко к фактической стоимости в 620 000 долларов.

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

> print sqft_model.evaluate(test_data)

{‘max_error’: 4143550.8825285938, ‘rmse’: 255191.02870527358}

«Max_error» возникает из-за выброса. Он отображается в верхнем правом углу визуализации матплата. Модель имеет значение ошибки, основанное на RMSE, равное 255 191 доллару США.