Scikit-learnでのワンホットエンコーディングとダミーエンコーディング


50

カテゴリー変数をエンコードするには、2つの異なる方法があります。たとえば、1つのカテゴリ変数にn個の値があります。ワンホットエンコーディングに変換してN個の変数ながらダミーコードへと変換し、N-1の変数。カテゴリ変数がk個あり、それぞれにn個の値がある場合。1つのホットエンコーディングはkn変数で終わり、ダミーエンコーディングはkn-k変数で終わります。

ワンホットエンコーディングの場合、インターセプトにより共線性の問題が発生し、モデルが正常に機能しないことがあります。誰かがそれを「ダミー変数トラップ」と呼びます

私の質問:

  1. Scikit-learnの線形回帰モデルにより、ユーザーはインターセプトを無効にできます。ワンホットエンコーディングの場合、常にfit_intercept = Falseを設定する必要がありますか?ダミーエンコーディングの場合、fit_interceptは常にTrueに設定する必要がありますか?ウェブサイトに「警告」は表示されません。

  2. ワンホットエンコーディングではより多くの変数が生成されるため、ダミーエンコーディングよりも自由度が高くなりますか?

回答:


35

Scikit-learnの線形回帰モデルにより、ユーザーはインターセプトを無効にできます。ワンホットエンコーディングの場合、常にfit_intercept = Falseを設定する必要がありますか?ダミーエンコーディングの場合、fit_interceptは常にTrueに設定する必要がありますか?ウェブサイトに「警告」は表示されません。

ワンホットエンコーディングを使用した非正規化線形モデルの場合、はい、インターセプトをfalseに設定するか、完全な共線性が必要です。 sklearnまた、隆線の収縮ペナルティも考慮されます。その場合、それは必要ではありません。実際には、切片とすべてのレベルの両方を含める必要があります。ダミーエンコーディングの場合、すべての変数を標準化していない限り、インターセプトを含める必要があります。その場合、インターセプトはゼロです。

ワンホットエンコーディングではより多くの変数が生成されるため、ダミーエンコーディングよりも自由度が高くなりますか?

インターセプトは追加の自由度であるため、明確に指定されたモデルではすべてが等しくなります。

2番目の場合、k個のカテゴリ変数がある場合はどうなりますか?k変数はダミーエンコーディングで削除されます。自由度はまだ同じですか?

インターセプトの有無にかかわらず、両方のカテゴリ変数のすべてのレベルを使用したモデルに適合できませんでした。というのは、モデルの1つの変数のすべてのレベルをワンホットエンコードすると、たとえばバイナリ変数を使用すると、定数ベクトルに等しい予測子の線形結合が得られるからです。x1,x2,,xn

x1+x2++xn=1

その後、別のカテゴリすべてのレベルをモデルに入力しようとすると、定数ベクトルに等しい明確な線形結合になりますx

x1+x2++xk=1

そして、あなたは線形依存関係を作成しました

x1+x2+xnx1x2xk=0

したがって、2番目の変数のレベルを除外する必要があり、すべてが適切に整列します。

たとえば、3つのカテゴリ変数があり、それぞれに4つのレベルがあります。ダミーエンコーディングでは、3 * 4-3 = 9変数が1つのインターセプトで構築されます。ワンホットエンコーディングでは、3 * 4 = 12変数がインターセプトなしで構築されます。私は正しいですか?

2番目のものは実際には機能しません。作成した列の計画行列は単数形になります。デザインの非特異性を回復するには、3つの異なるカテゴリエンコーディングのそれぞれから1つずつ、3つの列を削除する必要があります。3×4=12


ありがとう。2番目の場合、k個のカテゴリ変数がある場合はどうなりますか?k変数はダミーエンコーディングで削除されます。自由度はまだ同じですか?
ミュンヘン

@ChongWang私はあなたのコメントへの回答を私の回答に編集しました。
マシュードゥルーリー

申し訳ありませんが、ここで少し迷子になります。たとえば、3つのカテゴリ変数があり、それぞれに4つのレベルがあります。ダミーエンコーディングでは、3 * 4-3 = 9変数が1つのインターセプトで構築されます。ワンホットエンコーディングでは、3 * 4 = 12変数がインターセプトなしで構築されます。私は正しいですか?ここで、ダミーエンコーディングのDFは9-1ですが、ワンホットエンコーディングのDFは12です。
ミュンヘン

@ChongWang再び編集されました。
マシュードゥルーリー

@MatthewDrury sklearnのlinear_modelでも同じ問題があります。ダミーエンコーディングの後、デシジョンツリーとKNNは正常に機能しますが、線形回帰は特異性に該当します。あなたの答えから、「2番目の変数のレベル」を削除する必要があることを理解していますが、それが実際に何を意味するのかわかりませんか?たとえば、3つの数値フィーチャと3つのカテゴリ(メーカー、モデル、および燃料タイプ)があります。あるメーカーはn個のモデルを持つことができるため、モデルは当然メーカーに依存します。では、線形回帰を使用する場合、この種の一般的なシナリオをどのように進めるのですか?
ハーベイ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.