Saya memiliki model regresi logistik terlatih yang saya terapkan pada set data pengujian. Variabel dependen adalah biner (boolean). Untuk setiap sampel dalam set data pengujian, saya menerapkan model regresi logistik untuk menghasilkan probabilitas% bahwa variabel dependen akan benar. Lalu saya mencatat apakah nilai acutal itu benar atau salah. Saya mencoba menghitung angka atau Adjusted seperti dalam model regresi linier.
Ini memberi saya catatan untuk setiap sampel dalam set pengujian seperti:
prob_value_is_true acutal_value
.34 0
.45 1
.11 0
.84 0
.... ....
Saya bertanya-tanya bagaimana cara menguji keakuratan model. Upaya pertama saya adalah menggunakan tabel kontingensi dan mengatakan "jika prob_value_is_true
> 0,80, tebak bahwa nilai sebenarnya adalah benar" dan kemudian mengukur rasio klasifikasi benar ke salah. Tapi saya tidak suka itu, karena rasanya lebih seperti saya hanya mengevaluasi 0,80 sebagai batas, bukan keakuratan model secara keseluruhan dan pada semua prob_value_is_true
nilai.
Kemudian saya mencoba untuk hanya melihat setiap nilai diskrit prob_value_is_true, sebagai contoh, melihat semua sampel di mana prob_value_is_true
= 0,34 dan mengukur% dari sampel di mana nilai acutal benar (dalam hal ini, akurasi sempurna akan menjadi jika% sampel sampel itu benar = 34%). Saya mungkin membuat skor akurasi model dengan menjumlahkan perbedaan pada setiap nilai diskrit prob_value_is_true
. Tetapi ukuran sampel menjadi perhatian besar di sini, terutama untuk ekstrem (mendekati 0% atau 100%), sehingga rata-rata nilai acutal tidak akurat, sehingga menggunakannya untuk mengukur akurasi model tampaknya tidak tepat.
Saya bahkan mencoba membuat rentang besar untuk memastikan ukuran sampel yang cukup (0-.25, .25-.50, .50-.75, .75-1.0), tetapi bagaimana mengukur "kebaikan" dari% nilai aktual itu membuat saya bingung . Katakan semua sampel yang prob_value_is_true
berada di antara 0,25 dan 0,50 memiliki rata-rata acutal_value
0,45. Apakah itu bagus karena berada dalam jangkauan? Buruk karena tidak dekat 37,5% (pusat kisaran)?
Jadi saya terjebak pada apa yang tampaknya menjadi pertanyaan yang mudah, dan berharap seseorang dapat mengarahkan saya ke sumber daya atau metode untuk menghitung akurasi yang stabil untuk model regresi logistik.
sumber
Jawaban:
Ukuran yang sering digunakan untuk memvalidasi regresi logistik, adalah AUC dari kurva ROC (plot sensitivitas terhadap 1-spesifisitas - hanya google untuk istilah jika diperlukan). Ini, pada dasarnya, mengevaluasi seluruh rentang nilai ambang batas.
Pada sisi negatifnya: mengevaluasi seluruh rentang nilai ambang batas mungkin bukan yang Anda kejar, karena ini (biasanya) mencakup ambang batas yang menghasilkan sangat banyak negatif palsu atau positif palsu. Ada versi AUC yang menjelaskan hal ini (AUC parsial), jadi jika itu merupakan masalah bagi Anda, Anda dapat memeriksanya.
sumber
lowess
val.prob
rms
rms
akan melakukan hal yang sama untuk validasi internal, menggunakan resampling untuk menghilangkan efek overfitting.sumber
mean(y[x==10]==1)
mean(y[x==20]==1)
Secara umum, tugas yang Anda berikan sendiri di sini sulit. Itu karena, dengan regresi logistik, Anda berurusan dengan dua hal yang berbeda. Prediksi model adalah variabel laten, sedangkan variabel respons yang Anda amati (walaupun mungkin dihasilkan oleh variabel laten) tidak. Tentu saja, orang akan sering ingin tahu apa tanggapan yang diprediksi, dan itu benar-benar masuk akal; ini hanyalah salah satu kasus di mana kehidupan tidak adil.
sumber
Saya pikir Anda bisa menetapkan ambang (katakanlah 0,5), jadi ketika probabilitas Anda sama dengan atau lebih besar dari ambang itu, kelas prediksi Anda akan menjadi 1, dan 0 sebaliknya. Kemudian, Anda bisa mendapatkan ukuran akurasi Anda dengan cara ini:
Mengingat bahwa probabilitas Anda adalah probabilitas untuk memberikan data Anda (x) dan menggunakan model Anda nilai kelas Anda (y) sama dengan 1, saya tidak mengerti mengapa Anda selalu mendapatkan nilai probabilitas lebih rendah dari 0,5. Berapa frekuensi kelas Anda yang sebenarnya (actual_value)?
sumber
Anda mungkin ingin melihat paket saya
softclassval
(di softclassval.r-forge.r-project.org Anda juga menemukan dua presentasi lisan yang saya berikan tentang ide-ide di balik paket tersebut).Saya menulisnya untuk masalah yang sedikit berbeda, yaitu jika referensi (misalnya patolog) "menolak" untuk memberikan kelas yang jelas. Namun, Anda dapat menggunakannya dengan kelas keras "normal" dan itu menghindari definisi ambang batas untuk pengerasan prediksi kontinu awalnya - jadi Anda tidak mengevaluasi 0,8.
Namun, saya merekomendasikan untuk menggunakannya bersamaan dengan, katakanlah, ROC atau diagram spesifisitas-sensitivitas: hasilnya akan sering terlihat sangat buruk karena metode "saya" akan menghukum penyimpangan yang sudah sedikit (misalnya 0,9 bukannya 1 memberikan 0,1 perbedaan untuk tindakan saya. , tetapi semua ambang di bawah 0,9 akan mengabaikan ini). Sebenarnya saya pikir ini lebih menguntungkan: kurangnya penyimpangan kecil terhadap sensitivitas ini adalah salah satu poin utama dari kritik dengan langkah-langkah "keras" seperti akurasi, sensitivitas, daya ingat, dll.
Selain itu, dengan membandingkan mean absolute error (MAE) dan root mean squared error RMSE, Anda dapat mengetahui apakah Anda memiliki banyak penyimpangan kecil atau lebih sedikit sampel yang salah penilaian.
sumber
Kemudian, jalankan simulasi ini, katakanlah, 100 kali. Anda akan memiliki matriks dengan n baris (n adalah jumlah subjek) dan kolom k (dalam hal ini, k = 100, jumlah simulasi). Dalam kode r:
Sekarang Anda menghitung perbedaan antara prediksi dalam setiap simulasi dan yang diamati. Setelah menghitung perbedaan ini, hitung saja nilai rata-rata true-positive dan false-positive untuk setiap baris (setiap subjek) dan plot histogram. Atau hitung keduanya untuk setiap kolom (simulasi) dan plot histogram (saya lebih suka ini).
Semoga ini bisa membantu ...
sumber
Ada banyak cara untuk memperkirakan keakuratan prediksi tersebut dan pilihan optimal sangat tergantung pada apa yang akan diestimasikan.
Misalnya, jika Anda berencana untuk memilih beberapa hit skor tinggi untuk studi tindak lanjut yang mahal, Anda mungkin ingin memaksimalkan presisi pada skor tinggi. Di sisi lain, jika studi tindak lanjut murah, Anda mungkin ingin memaksimalkan daya ingat (sensitivitas) pada skor yang lebih rendah. ROC AUC mungkin cocok jika Anda membandingkan metode yang berbeda, dll.
Pada sisi praktis,
R
'sROCR
paket berisi 2 fungsi yang bergunaBersama-sama, fungsi-fungsi ini dapat menghitung berbagai ukuran akurasi, termasuk nilai skalar global (seperti "auc" ) dan vektor yang bergantung pada skor untuk memplot Kurva presisi-ingat dan ROC ( "prec" , "rec" , "tpr" dan "fpr" , dll.)
sumber
Anda perlu mendefinisikan apa yang Anda maksud dengan "akurasi". Apa yang ingin Anda ketahui, maafkan saya karena memasukkan kata-kata ke mulut Anda, adalah seberapa baik model Anda sesuai dengan data pelatihan, dan yang lebih penting, seberapa baik model ini "menggeneralisasi" untuk sampel yang tidak ada dalam data pelatihan Anda. Meskipun kurva ROC dapat berguna dalam menganalisis tradeoff antara presisi dan recall untuk berbagai nilai ambang, saya sarankan menambahkan mean-squared-error, atau skor Brier ke kotak peralatan Anda. Sangat mudah untuk dihitung, dan Anda dapat segera merasakan apakah perubahan fitur mempengaruhi kesesuaian model, ketika diterapkan pada data pelatihan. Karena pakaian dalam dimungkinkan dalam hal ini, pekerjaan Anda tidak selesai di sini. Untuk mengevaluasi kinerja generalisasi, atau seberapa baik Anda lakukan pada data yang belum Anda lihat, itu bukan t cukup untuk melihat kinerja Anda pada sampel pelatihan. Tentu saja model Anda bagus dalam hal itu, karena mereka nilai-nilai yang Anda gunakan untuk menentukan koefisien untuk logistik Anda. Anda perlu menyisihkan beberapa sampel untuk data uji. Kinerja MSE Anda pada set ini harus menetapkan ekspektasi generalisasi Anda sesuai dengan ketimpangan Hoeffding. Kesalahan generalisasi maksimum Anda akan tergantung pada jumlah fitur dalam model Anda serta jumlah sampel yang digunakan untuk menghitung statistik pengujian. Ingatlah bahwa Anda perlu mencuri beberapa sampel pelatihan untuk sampel uji. Saya merekomendasikan 10 kali lipat validasi silang, di mana Anda mengocok, pilih 90% untuk pelatihan, 10% untuk pengujian, lalu ukur, ulangi, lalu rata-rata semua pengukuran. karena mereka nilai yang Anda gunakan untuk menentukan koefisien untuk logistik Anda. Anda perlu menyisihkan beberapa sampel untuk data uji. Kinerja MSE Anda pada set ini harus menetapkan ekspektasi generalisasi Anda sesuai dengan ketimpangan Hoeffding. Kesalahan generalisasi maksimum Anda akan tergantung pada jumlah fitur dalam model Anda serta jumlah sampel yang digunakan untuk menghitung statistik pengujian. Ingatlah bahwa Anda perlu mencuri beberapa sampel pelatihan untuk sampel uji. Saya merekomendasikan 10 kali lipat validasi silang, di mana Anda mengocok, pilih 90% untuk pelatihan, 10% untuk pengujian, lalu ukur, ulangi, lalu rata-rata semua pengukuran. karena mereka nilai yang Anda gunakan untuk menentukan koefisien untuk logistik Anda. Anda perlu menyisihkan beberapa sampel untuk data uji. Kinerja MSE Anda pada set ini harus menetapkan ekspektasi generalisasi Anda sesuai dengan ketimpangan Hoeffding. Kesalahan generalisasi maksimum Anda akan tergantung pada jumlah fitur dalam model Anda serta jumlah sampel yang digunakan untuk menghitung statistik pengujian. Ingatlah bahwa Anda perlu mencuri beberapa sampel pelatihan untuk sampel uji. Saya merekomendasikan 10 kali lipat validasi silang, di mana Anda mengocok, pilih 90% untuk pelatihan, 10% untuk pengujian, lalu ukur, ulangi, lalu rata-rata semua pengukuran. Kinerja MSE Anda pada set ini harus menetapkan ekspektasi generalisasi Anda sesuai dengan ketimpangan Hoeffding. Kesalahan generalisasi maksimum Anda akan tergantung pada jumlah fitur dalam model Anda serta jumlah sampel yang digunakan untuk menghitung statistik pengujian. Ingatlah bahwa Anda perlu mencuri beberapa sampel pelatihan untuk sampel uji. Saya merekomendasikan 10 kali lipat validasi silang, di mana Anda mengocok, pilih 90% untuk pelatihan, 10% untuk pengujian, lalu ukur, ulangi, lalu rata-rata semua pengukuran. Kinerja MSE Anda pada set ini harus menetapkan ekspektasi generalisasi Anda sesuai dengan ketimpangan Hoeffding. Kesalahan generalisasi maksimum Anda akan tergantung pada jumlah fitur dalam model Anda serta jumlah sampel yang digunakan untuk menghitung statistik pengujian. Ingatlah bahwa Anda perlu mencuri beberapa sampel pelatihan untuk sampel uji. Saya merekomendasikan 10 kali lipat validasi silang, di mana Anda mengocok, pilih 90% untuk pelatihan, 10% untuk pengujian, lalu ukur, ulangi, lalu rata-rata semua pengukuran.
sumber
Ini tidak menderita dari ambang batas yang sewenang-wenang. Semakin kecil ukuran semakin baik.
sumber