как передать смешанные (категориальные и числовые) функции регрессору дерева решений в sklearn?

Как я могу передать категориальные и числовые функции в DecisionTreeRegressor в sklearn?

В приведенном ниже коде показано, как использовать DecisionTreeRegressor для числовых функций:

from sklearn import tree
make_tree = tree.DecisionTreeRegressor()
fit_tree = make_tree.fit(X_train, y_train)

person sasan    schedule 05.05.2018    source источник
comment
DecisionTreeRegressor поддерживает как числовые, так и категориальные переменные. Вы получаете сообщение об ошибке?   -  person Bert Kellerman    schedule 05.05.2018
comment
Я не знаю, как функция подгонки может реализовать категориальную функцию из числовой? Есть ли в этой функции какой-либо параметр для введения категориальных функций? Алгоритм дерева должен знать, какая функция является категориальной, а какая числовой. когда, например, x_train равен [[1,4,2],[2,1,3],[0,2,3]], как алгоритм дерева интерпретирует функции?   -  person sasan    schedule 05.05.2018
comment
Если вы опубликуете свой полный код и ошибку, которую вы получаете, вам будет легче помочь.   -  person Bert Kellerman    schedule 05.05.2018
comment
Нет, деревья решений scikit-learn не могут отличить категориальные признаки от числовых признаков, и это не имеет большого значения. Вы должны сразу закодировать категориальные признаки, чтобы преобразовать их в числовые.   -  person Vivek Kumar    schedule 07.05.2018
comment
Если вам нужно использовать категориальное как есть, вы можете попробовать CatBoost или LightGBM, которые поддерживают это (указав в параметрах, какая функция является категориальной), а не scikit-learn.   -  person Vivek Kumar    schedule 07.05.2018


Ответы (1)


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

В качестве примера:

from sklearn.feature_extraction import FeatureHasher

# n_feature: number of unique values in the feature(s)
# input_type should be passed as 'string' to be compatible to pandas DataFrames
feature_hasher = FeatureHasher(n_features=5000, input_type='string')
df['COLUMN_NAME'] = feature_hasher.transform(df['COLUMN_NAME'])

Затем вы можете передать свои функции регрессору.

person Shayan Amani    schedule 06.08.2019