Алгоритм регрессора машинного обучения с высокой ошибкой в ​​Python - XGBOOST Regressor - PullRequest
1 голос
/ 11 апреля 2020

У меня есть фрейм данных с данными о реальном состоянии из Флориды, он включает в себя данные по отдельным квартирам и зданиям:

enter image description here

'TRUE_SITE_CITY': The city where the building is. variable: Miami, Aventura...;
'CONDO_FLAG': If it is a condominium or not, variable: yes/no;
'BEDROOM_COUNT': Number of total bethrooms, variable: integuer,
'BUILDING_actual_AREA': The area of the entire building, or apartment in the case that there are only one apartment or house. variable: integuer;
'FLOOR_COUNT': Number of the floors that the building has;
'DOR_CODE_CUR': the type of the building. Variable: categorical;
'UNIT_COUNT': Number of apartments or houses in the building. Variable: integuer;
'YEAR_BUILT': Year that the building or house or apartment was build: Variable: categorical;
'public_transport_min_distance': I have calculated the nearest stations of the public transport;
'Price': The variable that I want to predict.

Я сделал исследовательский анализ данных, и я отбросил некоторые данные, которые имеют нулевые значения, а некоторые данные были неверными. Также я опустил значения с выбросами.

Базовая c статистика столбца цены (целевой столбец):

enter image description here

Я проверил категориальные признаки, и они в каждой из них достаточно переменных, чтобы сохранить их в модели.

Я создал конвейер для создания одного горячего датчика для категориальных значений и стандартной стандартизации для числовых значений. В него я включил регрессию XGBOOST:

from xgboost import XGBRegressor
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import cross_validate
from sklearn import metrics
from sklearn import preprocessing, feature_extraction
from sklearn.pipeline import Pipeline
from sklearn import preprocessing, feature_extraction
from sklearn.pipeline import make_pipeline, make_union
from mlxtend.feature_selection import ColumnSelector
from sklearn.preprocessing import StandardScaler
from category_encoders import OneHotEncoder

x_numeric = df_x[['BEDROOM_COUNT','BATHROOM_COUNT',
       'HALF_BATHROOM_COUNT', 'FLOOR_COUNT','UNIT_COUNT','public_transport_min_distance','BUILDING_actual_AREA']]

x_categorical = df_x[['TRUE_SITE_CITY','CONDO_FLAG','YEAR_BUILT']]

categorical_col = x_categorical.columns

numeric_col = x_numeric.columns

estimator_pipeline = Pipeline([
    ('procesador', procesing_pipeline),
    ('estimador', estimator)
])

score2 = cross_validate(estimator_pipeline, X= df_x, y= df_y, scoring=scoring,return_train_score=False, cv=5,n_jobs=2)

Но я получаю высокую ошибку. Среднее значение цены составляет почти 200 000, а полученная ошибка:

enter image description here

Я сделал выбор функции с помощью RFE, но получил высокий ошибка тоже.

Также я запустил его, выполнив RandomizedSearchCV

from sklearn.model_selection import RandomizedSearchCV

params = {"estimator__learning_rate"    : [0.05, 0.10, 0.15, 0.20, 0.25, 0.30 ] ,
 "estimator__max_depth"        : [ 3, 4, 5, 6, 8, 10, 12, 15],
 "estimator__min_child_weight" : [ 1, 3, 5, 7 ],
 "estimator__gamma"            : [ 0.0, 0.1, 0.2 , 0.3, 0.4 ],
 "estimator__colsample_bytree" : [ 0.3, 0.4, 0.5 , 0.7 ] }

random_search = RandomizedSearchCV(
    estimator=estimator_pipeline, 
    param_distributions=params, cv=5, refit=True,
    scoring="neg_mean_squared_error", n_jobs= 3,
    return_train_score=True,
    n_iter=50)

Но я получаю аналогичное значение ошибки.

Что я мог сделать?

1 Ответ

2 голосов
/ 11 апреля 2020

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

  1. не используйте переменную YEAR_BUILT в качестве категориальной, а скорее используйте ее как числовую переменную, вы также можете преобразовать эту переменную в новую, описывающую возраст здания / квартиры, а затем Вы можете попробовать различные преобразования,
  2. Вы можете попытаться увеличить количество независимых переменных, добавив различные переменные, являющиеся преобразованиями текущих, например, используя квадратные значения
  3. в общем, принимая во внимание Учитывая, что у вас есть только 9 независимых переменных и большой набор данных, я сосредоточусь на создании новых потенциальных переменных
  4. с использованием алгоритмов, которые каким-то образом основаны на подходе деревьев решений, вам не нужно выполнять стандартизацию для числовой переменной
  5. используя разные алгоритмы повышения, вы должны сосредоточиться на базовых оценщиках (мелкие деревья решений)
  6. попробовать разные алгоритмы (например, простое дерево решений или случайный лес) для сравнения результатов
...