Детали данных
«Сред. Area House Age’: Средний возраст домов в одном городе
«Сред. Площадь Количество комнат: среднее количество комнат в домах в одном городе
«Сред. Площадь Количество спален: среднее количество спален в домах в одном городе
«Население области»: Население городского дома находится в
«Цена»: цена, по которой дом был продан.
«Адрес»: Адрес дома
Ознакомьтесь с библиотеками данных и импорта
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
Проверить данные
USAhousing = pd.read_csv('USA_Housing.csv')
USAhousing.head()
USAhousing.info()
<class 'pandas.core.frame.DataFrame'> RangeIndex: 5000 entries, 0 to 4999 Data columns (total 7 columns): Avg. Area Income 5000 non-null float64 Avg. Area House Age 5000 non-null float64 Avg. Area Number of Rooms 5000 non-null float64 Avg. Area Number of Bedrooms 5000 non-null float64 Area Population 5000 non-null float64 Price 5000 non-null float64 Address 5000 non-null object dtypes: float64(6), object(1) memory usage: 273.5+ KB
USAhousing.describe()
USAhousing.columns
Index(['Avg. Area Income', 'Avg. Area House Age', 'Avg. Area Number of Rooms', 'Avg. Area Number of Bedrooms', 'Area Population', 'Price', 'Address'], dtype='object')
Исследовательский анализ данных
sns.pairplot(USAhousing)
<seaborn.axisgrid.PairGrid at 0x211a5415400>
sns.distplot(USAhousing['Price'])
<matplotlib.axes._subplots.AxesSubplot at 0x211a76deba8>
sns.heatmap(USAhousing.corr())
<matplotlib.axes._subplots.AxesSubplot at 0x21197c204a8>
Обучение модели линейной регрессии
Массивы X и Y
X = USAhousing[['Avg. Area Income', 'Avg. Area House Age', 'Avg. Area Number of Rooms',
'Avg. Area Number of Bedrooms', 'Area Population']]
y = USAhousing['Price']
Тренировочный тестовый сплит
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.4, random_state=101)
Создание и обучение модели Постоянная ссылка
from sklearn.linear_model import LinearRegression
lm = LinearRegression()
lm.fit(X_train,y_train)
LinearRegression(copy_X=True, fit_intercept=True, n_jobs=None, normalize=False)
Оценка модели
# print the intercept print(lm.intercept_)
-2640159.7968526958
coeff_df = pd.DataFrame(lm.coef_,X.columns,columns=['Coefficient']) coeff_df
Интерпретация коэффициентов:
- При фиксированных всех других функциях среднее значение увеличивается на 1 единицу. Районный доход связан с **увеличением на 21,52 доллара США**.
- При фиксированных всех других функциях среднее значение увеличивается на 1 единицу. Возраст дома в районе связан с **увеличением на 164883,28 доллара США**.
- При фиксированных всех других функциях среднее значение увеличивается на 1 единицу. Площадь Количество комнат связано с **увеличением на 122 368,67 долларов США**.
- При фиксированных всех других функциях среднее значение увеличивается на 1 единицу. Площадь Количество спален связано с **увеличением на 2233,80 долларов США**.
- При фиксированных всех других функциях увеличение населения области на 1 единицу связано с **увеличением на 15,15 долл. США**.
Прогнозы нашей модели
predictions = lm.predict(X_test)
plt.scatter(y_test,predictions)
<matplotlib.collections.PathCollection at 0x211a851e2e8>
Гистограмма остатка
sns.distplot((y_test-predictions),bins=50);
Метрики оценки регрессии
Вот три общих показателя оценки для задач регрессии:
Средняя абсолютная ошибка (MAE) – это среднее значение абсолютного значения ошибок:
1n∑i=1n∣yi−y^i∣\frac 1n\sum_{i=1}^n|y_i-\hat{y}_i|n1i=1∑n∣yi−y^i ∣
Среднеквадратическая ошибка (MSE) — это среднее значение квадратов ошибок:
1n∑i=1n(yi−y^i)2\frac 1n\sum_{i=1}^n(y_i-\hat{y}_i)²n1i=1∑n(yi−y^ я) 2
Среднеквадратическая ошибка (RMSE) – это квадратный корень из среднего квадрата ошибок:
1n∑i=1n(yi−y^i)2\sqrt{\frac 1n\sum_{i=1}^n(y_i-\hat{y}_i)²}n1i=1∑n(yi −y^i)2
Сравнивая эти показатели:
- MAE проще всего понять, поскольку это средняя ошибка.
- MSE более популярен, чем MAE, потому что MSE «наказывает» за большие ошибки, что, как правило, полезно в реальном мире.
- RMSE даже более популярен, чем MSE, потому что RMSE интерпретируется в единицах «y».
Все это функции потерь, потому что мы хотим минимизировать их.
from sklearn import metrics
print('MAE:', metrics.mean_absolute_error(y_test, predictions)) print('MSE:', metrics.mean_squared_error(y_test, predictions)) print('RMSE:', np.sqrt(metrics.mean_squared_error(y_test, predictions)))
MAE: 82288.22251914945 MSE: 10460958907.208984 RMSE: 102278.829222909