2017-02-13 51 views
4

私はPandasデータフレームのカテゴリ変数にoneHotEncodeを割り当てようとしています。これには、カテゴリ変数と継続変数の両方が含まれます。これはpandas .get_dummies()関数で簡単に行うことができますが、後でPMMLファイルを生成できるようにパイプラインを使用する必要があります。SklearnパイプラインでOnehotencodingを行う方法

これは、マッパーを作成するためのコードです。私がエンコードしたいカテゴリー変数は、「ダミー」というリストに格納されています。

from sklearn_pandas import DataFrameMapper 
from sklearn.preprocessing import OneHotEncoder 
from sklearn.preprocessing import LabelEncoder 

mapper = DataFrameMapper(
    [(d, LabelEncoder()) for d in dummies] + 
    [(d, OneHotEncoder()) for d in dummies] 
) 

これは、マッパーと線形回帰を含むパイプラインを作成するためのコードです。

from sklearn2pmml import PMMLPipeline 
from sklearn.linear_model import LinearRegression 

lm = PMMLPipeline([("mapper", mapper), 
        ("regressor", LinearRegression())]) 

私は今(「機能」のデータフレームであることと、そして「ターゲット」シリーズ)に合うようにしようとすると、それはエラーを与えるには、「float型に文字列を変換できませんでした」。

lm.fit(features, targets) 

誰かが私を助けることができますか?私はデータの前処理を含むパイプラインの作業には絶望的です...事前に感謝!

答えて

6

OneHotEncoderは文字列フィーチャーをサポートしておらず、[(d, OneHotEncoder()) for d in dummies]ではすべてのダミー列にそれを適用しています。代わりにLabelBinarizerを使用してください:

mapper = DataFrameMapper(
    [(d, LabelBinarizer()) for d in dummies] 
) 

代替は、第二OneHotEncoder段階でLabelEncoderを使用することです。

mapper = DataFrameMapper(
    [(d, LabelEncoder()) for d in dummies] 
) 

lm = PMMLPipeline([("mapper", mapper), 
        ("onehot" OnehotEncoder()), 
        ("regressor", LinearRegression())]) 
+0

大変ありがとうございます。labelbinarizerは私にはうってつけです。私は今、私は単眼でエンコードされたカテゴリー的な特徴だけを保存していると思います。オリジナルの連続機能も含める方法はありますか? –

+0

はい、それらを 'DataFrameMapper'に' None'をトランスフォーマとして列挙してください。 – dukebody

関連する問題