1. ホーム
  2. 機械学習

TypeError: fit_transform() が2つの位置引数を取るが、3つ与えられていた場合の解決法

2022-02-23 08:27:12
<パス


本日、ColumnTransformerメソッドを使用して数値変数と非数値変数の変換を合成する際、palmはカテゴリフィーチャーの1つにLabelEncoder()メソッドを選択し、上記のようにエラーが報告されました ?.しかし、OneHotEncoder(ユニークホットエンコーディング)に切り替えると正常に実行されます。

だから困惑 なぜこのようなことが起こるのでしょうか? 検索するとStackoverflowで同じ質問をしている友人が見つかり、回答者の2人と合わせて回答しました。

LabelEncoder()が適切でない2つの主な理由を発見。

  • なぜなら LabelEncoder()のトランスフォーマーがターゲット変数(y)のエンコードに使用されています。 (参照 公式ドキュメント ) ( この方法を間違って使っている人がかなりいるような気がします。私も含めて
    つまりLabelEncoder()は実際には は一次元の値 (y) に対して作用する とすると、多次元特徴列(>=2)を入力するとエラーが報告されます!

  • 第二に LabelEncoder() は fit_transform(self, y) 関数を呼び出し、そこで2つのパラメータを定義しています。 :

    そして パイプラインでColumnTransformer()メソッドを使ってfit_transformを行った場合 メソッドをパイプラインで呼び出すと、デフォルトで fit_transform(self, X, y=None) 関数
    ここで3つの定義パラメータが来るのですが...。すると、質問のように豪華なエラーが報告されます❌。

<マーク 要約文は LabelEncoder() は、Pipeline の多次元カテゴリ特徴量/変数変換のための変換器 ColumnTransformer メソッドには適用されません。

次に 解決策は2つあります。

  • OrdinalEncoder()の使用法 ;である。
  • OneHotEncoder()の使用法 以上、カテゴリ変数/フィーチャの変換方法について2つの方法を紹介しました。

どうりで、たまにヤシが公式ドキュメントに目を通したときに sklearn の多くの公式例では、ColumnTransformer メソッドを使って複数の特徴カラムを変換する場合、一般に OneHotEncoder() を使って複数のカラムに対してカテゴリ特徴を処理します。

参考
sklearn.compose.ColumnTransformer: fit_transform() は2つの位置引数を取りますが、3つが与えられました。
LabelEncoder 公式ドキュメントとソースコード
ColumnTransformer に関する公式ドキュメントとソースコード