Pandas 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でこのスパース行列をどのように使用できるかわかりません。特に、後でデータフレームに他の非カテゴリ変数を追加したい場合。ありがとう!
[〜#〜] edit [〜#〜] miraculixxのコメントへの返信:sklearn-pandasでDataFrameMapperも試しました
mapper = DataFrameMapper([
('id_col', None),
('target_col', None),
(['col_a'], OneHotEncoder()),
(['col_b'], OneHotEncoder())
])
t = mapper.fit_transform(df)
しかし、次のエラーが発生します。
TypeError:タイプの変換はサポートされていません:(dtype( 'O')、dtype( 'int64')、dtype( 'float64')、dtype( 'float64'))。
すでにパンダを使用しているようですが、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
そして、実際には、SklearnのDecisionTreeClassifierで新しいPandas DataFrameを使用できます。
Scikit-learnのこの例を見てください: http://scikit-learn.org/stable/auto_examples/ensemble/plot_feature_transformation.html#example-ensemble-plot-feature-transformation-py
問題は、xx.fit()
にスパース行列を使用していないことです。元のデータを使用しています。