Модель машинного обучения
ВСТУПЛЕНИЕ
Регрессионный анализ - это основной метод статистического анализа данных. Это статистический метод, который позволяет оценить взаимосвязь между переменными. Необходимо определить зависимую переменную, которая будет варьироваться в зависимости от значения независимой переменной. Например, стоимость дома (зависимая переменная) варьируется в зависимости от квадратных футов дома (независимая переменная). Регрессионный анализ - очень полезный инструмент в прогнозной аналитике.
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
ИСПОЛЬЗУЕМЫЕ ИНСТРУМЕНТЫ
- Python
- Graphlab
- 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 доллару США.