ロジスティック回帰ベースのモデルの精度を測定する


26

トレーニング済みのロジスティック回帰モデルをテストデータセットに適用しています。従属変数はバイナリ(ブール)です。テストデータセットの各サンプルに対して、ロジスティック回帰モデルを適用して、従属変数が真になる確率を生成します。次に、実際の値が真か偽かを記録します。線形回帰モデルのように、または調整済み数値を計算しようとしています。R 2R2R2

これにより、テストセット内の各サンプルの記録が得られます。

prob_value_is_true         acutal_value
   .34                          0
   .45                          1
   .11                          0
   .84                          0
    ....                        ....          

モデルの精度をテストする方法を疑問に思っています。私の最初の試みは、分割表を使用して「prob_value_is_true> 0.80の場合、実際の値が真であると推測する」と言い、正しい分類と誤った分類の比率を測定することでした。しかし、私はそれが好きではありません。なぜなら、モデル全体およびすべてのprob_value_is_true値の精度ではなく、0.80を境界として評価しているように感じるからです。

次に、例として、prob_value_is_trueの各離散値を見てみました。prob_value_is_true= 0.34のすべてのサンプルを見て、実際の値が真であるサンプルの%を測定しました(この場合、サンプルの%それは本当でした= 34%)。の各離散値での差を合計することにより、モデル精度スコアを作成できますprob_value_is_true。しかし、サンプルサイズは、特に極値(0%または100%に近づいている)にとって大きな懸念事項であり、実際の値の平均は正確ではないため、モデルの精度を測定するためにそれらを使用することは適切ではないようです。

十分なサンプルサイズ(0-.25、.25-.50、.50-.75、.75-1.0)を確保するために巨大な範囲を作成しようとしましたが、実際の値のその%の「良さ」を測定する方法は私を困らせます。prob_value_is_true0.25から0.50の間にあるすべてのサンプルの平均acutal_valueが0.45であるとします。範囲内にあるので良いですか?37.5%(範囲の中心)に近くないので悪いですか?

だから私は簡単な質問に思えるかもしれませんが、誰かがロジスティック回帰モデルの統計的確度を計算するためのリソースや方法を教えてくれることを望んでいます。


範囲の例:(0-.25、.25-.50、.50-.75、.75-1.0)は理にかなっています。範囲を狭めると役に立ちますか?例:0-.03、.03-.06、.06-.09、.....、つまり.03ごと。これは、多くのデータポイントがある地域で役立つ場合があります。
MAC

回答:


18

ロジスティック回帰を検証するためによく使用される尺度は、ROC曲線の AUC (1特異性に対する感度のプロット-必要に応じて用語を検索するだけです)です。これは、本質的に、しきい値の全範囲を評価します。

マイナス面:これは(通常)非常に多くの偽陰性または偽陽性をもたらす閾値を含むため、閾値の全範囲を評価することあなたが望んでいることではないかもしれませ。これを説明するAUCのバージョン(部分AUC)があるため、それが問題である場合は、それを調べることができます。


1
AUCをしばらく置いておきますが、ROC曲線の作成はこのようなものだと仮定するのは正しいですか prob_value_is_trueの各離散値について、離散値をしきい値として使用して1つの分割表を作成します。次に、各分割表の真陽性率と偽陽性率を記録します。散布図のすべての分割表のレートをプロットすると、ROC曲線が表示されますか?それは正しいですか?
ジョンリード

これを行うためにいくつかのコードをまとめ、確率と実際の値としてランダムな値を供給するだけで、それは直線でした。私は、AUCが「曲線」または「線」またはランダム性に対する適合モデルからの偏差を測定していると思いますか?
ジョンリード

ROCについて:はい、それは正しいです。いくつかのバリエーションがあります(多かれ少なかれ平滑化されています;しきい値の選択のために予測された確率を考慮して)。(使用するソフトウェア/選択した言語に応じて)既にこれを提供する無数のツールがあることに注意してください。Wrt AUC:これは、ROC曲線の下の実際の面積とほぼ同じです。完全なランダム予測子ではなく、ROC曲線は(0,0)から(1,1)までの直線となり、AUCは0.5になります。ただし、AUCにはいくつかの優れた解釈があります(GoogleまたはWikipediaも参照してください:
Nick Sabbe

8

主に任意の境界の効果を反映しているため、正しいと分類された割合について心配するのは正しいことです。2つの手段をお勧めします。1つは、他の人が説明したように、インデックスまたはROCエリアです。これには、ROC曲線について考えるよりも簡単な解釈があり、純粋な予測差別の尺度です。第二に、データのビニングなしで連続検量線を推定します。予測が独立したデータセットで評価されている場合、外れ値の検出をオフにして、予測と実際のProb [Y = 1]の関係を推定できます。R パッケージの関数は、これらの両方を行います。のその他の機能clowessval.probrmsrms リサンプリングを使用して過剰適合の影響を除去し、内部検証でも同じことを行います。


6

データが値でグループ化されている場合、モデルの予測値とそれに関連する信頼区間を計算し、観測された割合がその範囲内に収まるかどうかを確認できます。あなたは、10回の観測であった場合、例えば、で、10台のOBSを、で10台のOBS、等、次いで、等が、予測と比較することができる割合を生じます。モデルが完全であっても、OLS回帰の場合と同様に、観察されたパーセンテージの一部は95%CIの外で跳ね返ることに注意してください。データがグループ化されていない場合、範囲に従ってデータをビニングすることにより、独自のグループを形成できます。x = 10 x = 20 x = 30 xxx=10x=20x=30mean(y[x==10]==1)mean(y[x==20]==1)xあなたが提案するように、変数。ビンの選択に依存するため、これは完全に有効ではありません。モデルを探索する方法として役立ちます。

一般に、ここで自分に与えたタスクは困難です。これは、ロジスティック回帰では、2種類のことを扱っているためです。モデルの予測は潜在変数ですが、観測された応答変数は(潜在変数によって生成される可能性があります)そうではありません。もちろん、人々は予測された反応が何であるかを知りたいと思うでしょう、そしてそれは完全に合理的です。これは、人生が公平ではない場合の1つにすぎません。

結果を予測したい場合は、最大化するものを決定する必要があります。ケースが1つだけで、予測を最も正確にしたい場合、場合、を予測する必要があります。(これはすべて非常に直感的です。)一方、総サンプル(または他のグループ)全体の全体的な精度を最大化する場合、場合、を予測する必要があります。。たとえば、のは、あなたのサンプルでは、全症例の30%が1個の場合、もしあるとしましょう、あなたがいることを予測すべきであるなりますそれはだにも関わらず、Y0.5 、Y = 1 、YP Y = 1 Y = 0.31 Y 1 < 0.5y=1y^.5y=1y^p(y=1)y^=.31y1<.5。これは直観に反し、多くの人がここでつまずきますが、このアルゴリズムは精度を最大限に高めます。

モデル内の情報量を考えるより包括的な方法は、考えられるすべてのしきい値が与えられる正確さを統合することです。これは、モデルの受信者動作特性(ROC)の曲線下面積(AUC)で、@ Nick Sabbeによって議論されています。ロジスティック回帰にはがないことに注意してください。いわゆる「疑似」がありますが、AUC(または一致、、同義語)がおそらくこの問題について考える最良の方法です。 R 2 R 2 C(0,1)R2R2c


素晴らしい答えです!したがって、すべてのケースの30%が1である例では、特定のケースの予測確率0.31は、1にどれだけ近いか(他のケースほど大きい)のこのケースの「ランク付け」に似ていますか?そして、この特定のケースが1であると予測される確率と見なすべきではありませんか?
MAC

1
@JunchiGuo、私はあなたについて行くかどうかわかりません。の手段であることの予測確率というある。ただし、&.はよりも高くランク付けされます。たとえば、y^i=.311.31.31.25
GUNG -復活モニカ

3

しきい値(0.5など)を設定できると思います。そのため、確率がそのしきい値以上の場合、予測クラスは1になり、それ以外の場合は0になります。次に、この方法で精度の尺度を取得できます。

confusion_matrix <- ftable(actual_value, predicted_value)
accuracy <- sum(diag(confusion_matrix))/number of events*100

あなたの確率は、与えられたデータ(x)の確率であり、モデルを使用すると、クラス値(y)は1に等しいため、常に0.5未満の確率値を取得する理由はわかりません。実際のクラスの頻度はどれですか(actual_value)?


2

あなたは私のパッケージを見たいと思うかもしれませんsoftclassval(softclassval.r-forge.r-project.org では、パッケージの背後にあるアイデアについて2つの口頭プレゼンテーションもあります)。

私はそれをわずかに異なる問題、すなわち参照者(例:病理学者)が明確なクラスを与えることを「拒否する」場合にそれを書いた。ただし、「通常の」ハードクラスで使用でき、元々の連続予測を強化するためのしきい値の定義を回避できるため、0.8を評価しません。

ただし、たとえばROCまたは特異度感度図と一緒に使用することをお勧めします。「私の」方法はすでにわずかな偏差にペナルティを課すため、結果はしばしば非常に悪く見えます(たとえば、1の代わりに0.9は私の測定値に0.1 、ただし、0.9未満のすべてのしきい値はこれを無視します)。実際、私はむしろ利点であると考えています。この感度に対する小さな偏差の欠如は、精度、感度、リコールなどの「強化された」尺度に関する批判の主要なポイントの1つです。

さらに、平均絶対誤差(MAE)と二乗平均平方根誤差RMSEを比較することで、多くの小さな偏差があるか、大幅に誤判定されたサンプルが少ないかを確認できます。


1

私の簡単な提案は次のとおりです。従属変数はバイナリなので、ロジスティック回帰与えられる確率で、ベルヌーイ分布に従うと仮定できます。Pri=invlogit(a+bxi)

次に、1つのシミュレーションを次のように設定します y.rep[i]Bernoulli(p[i])

次に、このシミュレーションを100回実行します。n行(nは被験者の数)とk列(この場合、k = 100、シミュレーションの数)のマトリックスがあります。rコードの場合:

for (j  in 1:100)
  mat.y.rep[,j] <- Bernoulli ( p) # p is a vector with a probability for each subject

次に、各シミュレーションで予測された値と観測された値の差を計算します。この差を計算した後、各行(各被験者)の真陽性と偽陽性の平均数を計算し、ヒストグラムをプロットします。または、各列の両方を計算し(シミュレーション)、ヒストグラムをプロットします(これが望ましいです)。

それが役に立てば幸い...


1

このような予測の精度を推定する方法は多数あり、最適な選択は実際に推定の実装目的によって異なります。

たとえば、費用のかかる追跡調査のためにいくつかの高得点ヒットを選択する予定がある場合、高得点で精度を最大化することができます。一方、追跡調査が安価な場合は、低いスコアで想起(感度)を最大化することができます。ROC AUCは、異なる方法などを比較する場合に適しています。

実用的な面では、RROCRパッケージは2つの便利な機能が含まれています

pred.obj <- prediction(predictions, labels,...)
performance(pred.obj, measure, ...)

これらの関数は、グローバルなスカラー値("auc"など)およびリコール精度とROC曲線をプロットするためのスコア依存ベクトル("prec""rec""tpr"および「fpr」など)


1

「精度」の意味を定義する必要があります。あなたが知りたいことは、あなたの口に言葉を入れることをご容赦ください、あなたのモデルがトレーニングデータにどれほどよく適合しているか、そしてさらに重要なことは、このモデルがトレーニングデータにないサンプルにどれだけ「一般化」するかです。ROC曲線は、しきい値のさまざまな値の精度と再現率のトレードオフを分析するのに役立ちますが、ツールボックスに平均二乗誤差またはブライアスコアを追加することをお勧めします。計算は簡単で、トレーニングデータに適用すると、機能の変更がモデルの適合性に影響するかどうかをすぐに把握できます。この場合、オーバーフィットが発生する可能性があるため、あなたの仕事はここでは行われません。一般化のパフォーマンス、またはあなたが見たことのないデータに対してどれだけうまくやっているかを評価するには、トレーニングサンプルのパフォーマンスを確認するには十分です。もちろん、ロジスティックの係数を決定するために使用した値であるため、モデルはそれらに適しています。テストデータのサンプルをいくつか用意しておく必要があります。このセットでのMSEパフォーマンスは、Hoeffdingの不等式に従って一般化の期待値を設定する必要があります。最大汎化誤差は、モデルの特徴の数と、検定統計量の計算に使用されるサンプルの数に依存します。テストサンプルのトレーニングサンプルの一部を盗む必要があることに注意してください。シャッフルし、トレーニングに90%、テストに10%を選択し、すべての測定値を測定、繰り返し、平均化する10倍の交差検証をお勧めします。ロジスティックの係数を決定するために使用した値だからです。テストデータのサンプルをいくつか用意しておく必要があります。このセットでのMSEパフォーマンスは、Hoeffdingの不等式に従って一般化の期待値を設定する必要があります。最大汎化誤差は、モデルの特徴の数と、検定統計量の計算に使用されるサンプルの数に依存します。テストサンプルのトレーニングサンプルの一部を盗む必要があることに注意してください。シャッフルし、トレーニングに90%、テストに10%を選択し、すべての測定値を測定、繰り返し、平均化する10倍の交差検証をお勧めします。ロジスティックの係数を決定するために使用した値だからです。テストデータのサンプルをいくつか用意しておく必要があります。このセットでのMSEパフォーマンスは、Hoeffdingの不等式に従って一般化の期待値を設定する必要があります。最大汎化誤差は、モデルの特徴の数と、検定統計量の計算に使用されるサンプルの数に依存します。テストサンプルのトレーニングサンプルの一部を盗む必要があることに注意してください。シャッフルし、トレーニングに90%、テストに10%を選択し、すべての測定値を測定、繰り返し、平均化する10倍の交差検証をお勧めします。このセットでのMSEパフォーマンスは、Hoeffdingの不等式に従って一般化の期待値を設定する必要があります。最大汎化誤差は、モデルの特徴の数と、検定統計量の計算に使用されるサンプルの数に依存します。テストサンプルのトレーニングサンプルの一部を盗む必要があることに注意してください。シャッフルし、トレーニング用に90%、テスト用に10%を選択し、すべての測定値を測定、繰り返し、平均化する10倍の交差検証をお勧めします。このセットでのMSEパフォーマンスは、Hoeffdingの不等式に従って一般化の期待値を設定する必要があります。最大汎化誤差は、モデルの特徴の数と、検定統計量の計算に使用されるサンプルの数に依存します。テストサンプルのトレーニングサンプルの一部を盗む必要があることに注意してください。シャッフルし、トレーニング用に90%、テスト用に10%を選択し、すべての測定値を測定、繰り返し、平均化する10倍の交差検証をお勧めします。


1

なぜベルヌーイ対数尤度関数を使用していないのだろうか。基本的に、実際の値ごとに、をスコア付けし。これは、モデルがどれだけ近いかを測定します。同様に、実際の値ごとに、スコア取得します。これは、モデルがどれだけ予測近いかを測定します。- ログ1 - P0 1 - ログP10log(1p^)01log(p^)1

これは、任意のしきい値の影響を受けません。測定値が小さいほど良い。

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