Главная
Блог разработчиков phpBB
 
+ 17 предустановленных модов
+ SEO-оптимизация форума
+ авторизация через соц. сети
+ защита от спама

Пример решения задачи множественной регрессии с поддержкой Python

Anna | 15.06.2014 | нет комментариев

Вступление

Добросердечный день, уважаемые читатели.
В прошлых статьях, на фактических примерах, мною были показаны методы решения задач систематизации (задача кредитного скоринга) и основ обзора текстовой информации (задача о паспортах). Сегодня же мне бы хотелось коснуться иного класса задач, а именно поправления регрессии. Задачи данного класса, как правило, применяются при прогнозировании.
Для примера решения задачи прогнозирования, я взял комплект данных Energy efficiency из крупнейшего репозитория UCI. В качестве инструментов по обычии будем применять Python c аналитическими пакетамиpandas и scikit-learn.

Изложение комплекта данных и постановка задачи

Дан комплект данных, котором описаны следующие признаки помещения:

Поле Изложение Тип
X1 Относительная компактность FLOAT
X2 Площадь FLOAT
X3 Площадь стены FLOAT
X4 Площадь потолка FLOAT
X5 Всеобщая высота FLOAT
X6 Ориентация INT
X7 Площадь остекления FLOAT
X8 Распределенная площадь остекления INT
y1 Нагрузка при обогреве FLOAT
y2 Нагрузка при охлаждении FLOAT

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

Заблаговременный обзор данных

Для начала загрузим наши данные и посмотрим на них:

from pandas import read_csv, DataFrame
from sklearn.neighbors import KNeighborsRegressor
from sklearn.linear_model import LinearRegression, LogisticRegression
from sklearn.svm import SVR
from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import r2_score
from sklearn.cross_validation import train_test_split

dataset = read_csv('EnergyEfficiency/ENB2012_data.csv',';')
dataset.head()
X1 X2 X3 X4 X5 X6 X7 X8 Y1 Y2
0 0.98 514.5 294.0 110.25 7 2 0 0 15.55 21.33
1 0.98 514.5 294.0 110.25 7 3 0 0 15.55 21.33
2 0.98 514.5 294.0 110.25 7 4 0 0 15.55 21.33
3 0.98 514.5 294.0 110.25 7 5 0 0 15.55 21.33
4 0.90 563.5 318.5 122.50 7 2 0 0 20.84 28.28

Сейчас давайте посмотрим не связаны ли между собой какие-либо признаки. Сделать это дозволено рассчитав показатели корреляции для всех столбцов. Как это сделать было описано в предыдущей статье:

dataset.corr()
X1 X2 X3 X4 X5 X6 X7 X8 Y1 Y2
X1 1.000000e 00 -9.919015e-01 -2.037817e-01 -8.688234e-01 8.277473e-01 0.000000 1.283986e-17 1.764620e-17 0.622272 0.634339
X2 -9.919015e-01 1.000000e 00 1.955016e-01 8.807195e-01 -8.581477e-01 0.000000 1.318356e-16 -3.558613e-16 -0.658120 -0.672999
X3 -2.037817e-01 1.955016e-01 1.000000e 00 -2.923165e-01 2.809757e-01 0.000000 -7.969726e-19 0.000000e 00 0.455671 0.427117
X4 -8.688234e-01 8.807195e-01 -2.923165e-01 1.000000e 00 -9.725122e-01 0.000000 -1.381805e-16 -1.079129e-16 -0.861828 -0.862547
X5 8.277473e-01 -8.581477e-01 2.809757e-01 -9.725122e-01 1.000000e 00 0.000000 1.861418e-18 0.000000e 00 0.889431 0.895785
X6 0.000000e 00 0.000000e 00 0.000000e 00 0.000000e 00 0.000000e 00 1.000000 0.000000e 00 0.000000e 00 -0.002587 0.014290
X7 1.283986e-17 1.318356e-16 -7.969726e-19 -1.381805e-16 1.861418e-18 0.000000 1.000000e 00 2.129642e-01 0.269841 0.207505
X8 1.764620e-17 -3.558613e-16 0.000000e 00 -1.079129e-16 0.000000e 00 0.000000 2.129642e-01 1.000000e 00 0.087368 0.050525
Y1 6.222722e-01 -6.581202e-01 4.556712e-01 -8.618283e-01 8.894307e-01 -0.002587 2.698410e-01 8.736759e-02 1.000000 0.975862
Y2 6.343391e-01 -6.729989e-01 4.271170e-01 -8.625466e-01 8.957852e-01 0.014290 2.075050e-01 5.052512e-02 0.975862 1.000000

Как дозволено подметить из нашей матрицы, коррелируют между собой следующие столбы (Значение показателя корреляции огромнее 95%):

  • y1 –> y2
  • x1 –> x2
  • x4 –> x5

Сейчас давайте предпочтем, какие столбцы их наших пар мы можем убрать из нашей выборки. Для этого, в всякой паре, предпочтем столбцы, которые в большей степени оказывают воздействие на прогнозные значения Y1 и Y2 и оставим их, а остальные удалим.
Как дозволено подметить и матрицы с показателями корреляции на y1,y2 огромнее значения оказывают X2 иX5, нежели X1 и X4, таким образом мы можем последние столбцы мы можем удалить.

dataset = dataset.drop(['X1','X4'], axis=1)
dataset.head()

Помимо этого, дозволено подметить, что поля Y1 и Y2 дюже узко коррелируют между собой. Но, т. к. нам нужно спрогнозировать оба значения мы их оставляем «как есть».

Выбор модели

Отделим от нашей выборки прогнозные значения:

trg = dataset[['Y1','Y2']]
trn = dataset.drop(['Y1','Y2'], axis=1)

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

Источник: programmingmaster.ru

 

 

Оставить комментарий
Форум phpBB, русская поддержка форума phpBB
Рейтинг@Mail.ru 2008 - 2017 © BB3x.ru - русская поддержка форума phpBB