web-dev-qa-db-ja.com

sklearnでOneHotEncoderからの出力を使用するにはどうすればよいですか?

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'))。

8
Bert Carremans

すでにパンダを使用しているようですが、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を使用できます。

13
Guiem Bosch

Scikit-learnのこの例を見てください: http://scikit-learn.org/stable/auto_examples/ensemble/plot_feature_transformation.html#example-ensemble-plot-feature-transformation-py

問題は、xx.fit()にスパース行列を使用していないことです。元のデータを使用しています。

1
Merlin