Pandasデータフレームのカテゴリ変数をoneHotEncodeしようとしています。これには、カテゴリ変数と継続変数の両方が含まれます。これは、pandasで簡単に実行できることがわかります。 get_dummies()関数ですが、後でPMMLファイルを生成できるようにパイプラインを使用する必要があります。
これはマッパーを作成するためのコードです。エンコードしたいカテゴリ変数は、「ダミー」というリストに格納されています。
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())])
ここでフィットしようとすると(「features」がデータフレームで、「targets」が一連の場合)、「文字列をfloatに変換できませんでした」というエラーが表示されます。
lm.fit(features, targets)
私を助けることができる人はいますか?データの前処理を含むパイプラインの作業に必死です...よろしくお願いします!
OneHotEncoder
は文字列機能をサポートしていません。また、[(d, OneHotEncoder()) for d in dummies]
を使用すると、すべてのダミー列に適用されます。代わりにLabelBinarizer
を使用してください。
mapper = DataFrameMapper(
[(d, LabelBinarizer()) for d in dummies]
)
別の方法は、2番目のLabelEncoder
ステップでOneHotEncoder
を使用することです。
mapper = DataFrameMapper(
[(d, LabelEncoder()) for d in dummies]
)
lm = PMMLPipeline([("mapper", mapper),
("onehot", OneHotEncoder()),
("regressor", LinearRegression())])