Как использовать вывод OneHotEncoder в sklearn?

У меня есть Pandas Dataframe с 2 категориальными переменными, а также переменная ID и целевая переменная (для классификации). Мне удалось преобразовать категориальные значения с OneHotEncoder, Это приводит к разреженной матрице.

ohe = OneHotEncoder()
# First I remapped the string values in the categorical variables to integers as OneHotEncoder needs integers as input
... remapping code ...

ohe.fit(df[['col_a', 'col_b']])
ohe.transform(df[['col_a', 'col_b']])

Но я понятия не имею, как я могу использовать эту разреженную матрицу в DecisionTreeClassifier? Особенно, когда я хочу добавить некоторые другие не категориальные переменные в моем фрейме данных позже. Спасибо!

РЕДАКТИРОВАТЬ В ответ на комментарий miraculixx: я также попробовал DataFrameMapper в sklearn-pandas

mapper = DataFrameMapper([
    ('id_col', None),
    ('target_col', None),
    (['col_a'], OneHotEncoder()),
    (['col_b'], OneHotEncoder())
])

t = mapper.fit_transform(df)

Но тогда я получаю эту ошибку:

Ошибка типа: не поддерживается преобразование для типов: (dtype('O'), dtype('int64'), dtype('float64'), dtype('float64')).

2 ответа

Решение

Я вижу, вы уже используете панды, так почему бы не использовать его get_dummies функционировать?

import pandas as pd
df = pd.DataFrame([['rick','young'],['phil','old'],['john','teenager']],columns=['name','age-group'])

результат

   name age-group
0  rick     young
1  phil       old
2  john  teenager

теперь вы кодируете с помощью get_dummies

pd.get_dummies(df)

результат

name_john  name_phil  name_rick  age-group_old  age-group_teenager  \
0          0          0          1              0                   0   
1          0          1          0              1                   0   
2          1          0          0              0                   1   

   age-group_young  
0                1  
1                0  
2                0

И вы действительно можете использовать новый DataFrame Pandas в DecisionTreeClassifier вашего Sklearn.

Посмотрите на этот пример из scikit-learn: http://scikit-learn.org/stable/auto_examples/ensemble/plot_feature_transformation.html

Проблема в том, что вы не используете разреженные матрицы для xx.fit(), Вы используете исходные данные.

Другие вопросы по тегам