0

私は機械学習に全く新しいです。私はscikit-learnを使って、1つの入力変数(X)とバイナリ結果(Y)を持つ単純なロジスティック回帰モデルを作成しようとしています。私のデータは325サンプルで構成され、39回の成功と286回の失敗があります。データをトレーニングとテスト(30%)のセットに分割しました。sklearnロジスティック回帰から予測される確率が正確かどうかを判断する方法は?

私の目標は、実際には、自分のデータに基づいて任意のXについて成功の予測確率を得ることであり、分類予測そのものではありません。つまり、私が構築している別のモデルで使用する予測確率を取って、ロジスティック回帰を分類器としてまったく使用しません。予測された確率が実際にデータに適合することが重要です。

しかし、自分のモデルがデータに適しているかどうか、または計算された確率が実際に正確かどうかを理解することには問題があります。

私は次のメトリックを取得しています:

  • 分類精度:metrics.accuracy_scoreを = 0.92(Y_testは、予測しました)。 このメトリックを理解することは、モデルが正しい予測をする可能性が高いことです。モデルが適切であるように見えます。

  • ログ損失:cross_val_score(ロジスティック回帰()、X、Y、得点= 'neg_log_loss'、CV = 10) = -0.26 これはおそらく私にとって最も混乱メトリック、およびなど明らかに最も重要ですそれは予測された確率の正確さです。私はゼロに近いほどスコアが良いことを知っています - しかし、どれくらい近いですか?

  • AUC:metrics.roc_auc_score(Y_test、probs [:, 1]) = 0.9。ここでも、ROCスコアが1に近づくほど良好であるため、これは良好に見えます。

  • 混乱マトリックス:ここmetrics.confusion_matrix(Y_test、予測) =

     [ 88, 0] 
          [8, 2] 
    

    私の理解では、対角線はので、これはOKに見えるトレーニングセットに正しい予測の数字を与えることです。

  • レポート:それは良いフィット感ですのでmetrics.classification_report(Y_testは、予測) =

      precision recall f1-score support 
    
    0.0  0.92  1.00  0.96  88 
    1.0  1.00  0.20  0.33  10 
    
    avg/total  0.93  0.92  0.89  98 
    

    この分類の報告書によると、モデルが良い精度を持ちます。 私はリコールの解釈方法がわかりません。また、このレポートが私のモデルにとって悪いニュースである場合、Sklearnの文書では、リコールはすべてのポジティブサンプルを見つけるモデル機能であると述べています。それは時間の20%のポジティブしか見つけられないのですか?それは実際にはデータに悪影響を与えるように思えます。

誰かが、私はこれらの指標正しい方法をinterpetingだということを明確にすることができれば、私は本当に感謝したい - と、おそらく私のモデルが良いか偽であるかどうかにいくつかの光を当てます。また、計算された確率が正確かどうかを判断するために他のテストがある場合は、私に知らせてください。

これは良い評価基準ではない場合は、改善の点で次に進むべき方向性について本当に感謝しています。

ありがとうございます!

答えて

4

データが不均衡になっているのは、成功よりもはるかに障害が多いためです。常に失敗を推測するクラシファイアは86%になるので、92%の精度はそれほど印象的ではありません。

次に、何が起こっているのかを混同行列で示します。 88回は失敗を正しく予測し、8回は失敗を間違って予測します。実際に成功を正しく予測するのは2回だけです。

精度は正しいと推測されます。つまり、(88 + 2)/ 98 =全体で0.92%です。成功のためのリコールは、(8 + 2)の合計成功(または20%)のうち2回だけです。

だからモデルはあまりフィットしません。例の重み付けや予測の前に適用するような不均衡なデータセットに対処する方法はたくさんあります。混乱マトリックスは、実際に何が起こっているかを見るのに良い方法です。

2

データにはクラスの不均衡の問題があります。あなたはあなたのクラシファイアを訓練する間にそれに対処する方法を指定していません。しかし、確度が高いにもかかわらず、失敗サンプルの数が非常に多いため、テストセットにもサンプルが設定されている可能性があります。

これに対処するには、Stratified split in sklearnを使用して、クラスの不均衡の問題を考慮してデータをシャッフルして分割することができます。

また、GridSearchなどの分類子を改善するための他の方法も試してみることもできます。モデル評価here in this linkについて詳しく読むことができます。モデル固有のクロスバリデーションテクニックについてはthis section in sklearn.をチェックしてください。

さらにもう1つのことは、分類子をトレーニングするための指標として精度を使用する代わりに、リコールと精度(またはあなたのケースでは真陽性率)に焦点を当てることができるということです。 make_scorer in sklearnを使用する必要があります。例はherehereです。また、F1スコアまたはF_ベータスコアをチェックアウトすることもできます。

また、sklearnのクラスの不均衡の問題に取り組むために、this Github repositoryにさまざまなサンプリング手法をチェックアウトすることもできます。

また、this answerをチェックアウトすることもできます。

関連する問題