与えられた入力ベクトルの予測に最も貢献した特徴を決定する正しい方法は何ですか?


9

バイナリ分類にロジスティック回帰を使用しています。私は大きなデータセットを持っています(非常に不均衡になる傾向があります:19:1)。したがって、scikit-learnを使用してLogisticRegression()、ラベル付けされたデータの80%をトレーニングしてから、残りの20%で検証しました(データが非常にアンバランスだったため、ROCの下の領域と精度の再現率を調べました。また、class_weight='auto')。

主な質問は次のとおりです:(を使用してpredict_proba())ラベルのない入力ベクトルの予測を生成し始めたら、どの機能がその特定の入力の予測最も貢献したかをどのようにして知ることができますか?これは、ラベル付けされたトレーニングデータ(たとえば、係数の大きさ)に基づいてモデルに対して一般的に決定される「最も重要な機能」とは異なる可能性があると思います。

私は非常に基本的な考えを持っていました:

  1. 入力フィーチャ値とコンポーネント係数の絶対値のコンポーネントごとの積をとります。最も貢献する機能は、最大値を持つエントリに対応する機能です。

  2. (1)を実行しますが、すべてにZスコアを使用します(トレーニングおよび入力機能)。一部の機能範囲が他の機能範囲と大きく異なる可能性があり、製品を購入しただけではこれをキャプチャできない可能性があることを心配したため、これは重要だと思いました。しかし、係数は範囲を反映するはずなので、おそらくこれは問題ではありません。

私はこれが初めてなので、どんな考えでも大歓迎です。ロジスティック回帰に固有の事柄(つまり、線形関数ではなくシグモイド)と、scikit-learnで特定のアクション(たとえば、変換)を実装する方法への参照は、実際に実際のデータでプロジェクトを行っているので非常にありがたいです。


ロジスティック回帰は、説明的なタイプというよりも、予測モデルの多くではありませんか?
タゴマ2017

@tagoma両方ですよね?
Firebug 2017年

回答:


2

回帰係数のみを使用する方法があります。特定の入力ベクトルの予測に最も寄与する特徴を理解できます。

ただし、最初に各変数を標準化およびスケーリングする必要があります(つまり、平均を差し引き、標準偏差で割ります)。次に、標準化およびスケーリングされたデータでモデルを再フィットすると、最大の回帰係数を持つ特徴が、将来の予測に最も貢献する特徴になります。

特徴の単位を無関係にしたので、回帰係数はスケーリング後に比較可能です。したがって、特徴 1単位の増加は、スケーリングされていない特徴の1標準偏差のジャンプに対応します。X1


アレハンドロ、回答ありがとうございます。正規化されたデータのトレーニングには1つの問題があります。モデルのパフォーマンスがはるかに悪くなります。ROC曲線の下の領域は約10%小さくなり、精度-再現率曲線の下の領域も悪くなります。したがって、モデルのフィッティングを正規化データに切り替えるのをためらっています。これは、私が探している個々の機能の重要性を取得するためのコストですか?別の方法はありますか?係数の大きさはそれらの重要性を反映していませんか?
kilgoretrout 2015年

うーん、非常に奇妙です。正規化は変数間の基本的な関係に影響を与えないため、データの正規化が推定に影響を与えるとは思いません。個々の機能の予測値を比較する他の方法がわからない
Alejandro Ochoa

2
機能を正規化した後、線形回帰でパフォーマンスが低下する場合は、バグがあります。正規化された予測子と正規化された予測子のモデルは、まったく同じ予測を与えるはずです。正則化の項はこれに影響を与える可能性がありますが、正則化されたモデルは常に正規化された予測子を使用する必要があります。
Matthew Drury

2

特定の予測に寄与する機能を確認するために使用する方法の1つは、すべての機能を1つずつ平均値にリセットし、予測がどのように変化するかを確認することです。この方法をこのページからピックアップしました。しかし、私も自分の例で説明します。

たとえば、気温、風、雨などの気象情報に基づいて、ショートパンツを着るのに適した日であるかどうかを予測するモデルがあるとします。クラスの確率を与えるメソッドを使用しているとしましょう。

これで、モデルが特定の日に50/50を予測している日がありますが、これが何が原因であるかを知りたくありません。したがって、各特徴を調べ、それらを平均値(または0)にリセットし、モデルが現在予測するものを確認します。

  • 温度が20°Cであるとしますが、平均温度は10°Cです。この日の気温を平均10°Cに設定してモデルを再予測した場合、雨と風を同じ値に維持すると、予測は最終的に80%となります。明らかに温度は大きな影響を与えます!これで、他の変数についても同じことができます。

  • 風速は平均をわずかに上回っています。風を平均にリセットし、他の風を同じに保つことにより、ショートの予測はわずか55%に変化します。温度はもっと大きな問題のようです。

  • 雨はすでに平均を上回っているので、今や雨は少し奇妙なものです。そのため、平均値にリセットしても効果はありません。しかし、雨が予測に影響を与えているかどうかを知りたいので、代わりに雨を0に設定します。また、雨を0に設定すると、モデルはショートの75%を予測します。再びかなり大きな効果。

各機能を調べ、それらを平均値または0に設定することにより、予測レベルでどの機能が重要であるかを特定できました。風と気温はどちらの方向にも大きな影響を与えましたが、風ははるかに小さな影響しか与えませんでした。

では、なぜ雨を0にリセットしたのでしょうか。これらの0はめったに発生しない値であり、意味がほとんどないため、これを温度または風に対して行うのは奇妙だったでしょう。つまり、0にリセットするのが賢明だということです。つまり、意味のある機能ごとに機能を確認する必要があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.