Как использовать вывод 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()
, Вы используете исходные данные.