Apa cara yang benar untuk menentukan fitur mana yang paling berkontribusi terhadap prediksi vektor input yang diberikan?


9

Saya menggunakan regresi logistik untuk klasifikasi biner. Saya memiliki satu set data besar (kebetulan sangat tidak seimbang: 19: 1). Jadi saya menggunakan scikit-learn's LogisticRegression()untuk melatih 80% dari data berlabel saya dan kemudian saya memvalidasi dengan 20% lainnya (saya melihat area di bawah ROC serta presisi-recall karena datanya sangat tidak seimbang; saya juga menggunakan model dengan class_weight='auto').

Pertanyaan utama saya adalah sebagai berikut: begitu saya mulai membuat prediksi vektor input tidak berlabel (menggunakan predict_proba()), bagaimana saya bisa tahu fitur mana yang paling berkontribusi terhadap prediksi input tertentu itu ? Saya membayangkan bahwa ini mungkin berbeda dari "fitur yang paling penting" sebagaimana ditentukan secara umum untuk model berdasarkan pada data pelatihan yang diberi label (mis., Besarnya koefisien).

Saya punya ide yang sangat mendasar:

  1. Ambil produk dari komponen nilai input saya dengan nilai absolut dari koefisien fitur saya. Fitur yang paling berkontribusi adalah yang sesuai dengan entri dengan nilai terbesar.

  2. Lakukan (1) tetapi gunakan skor-z untuk semuanya (fitur pelatihan dan input). Saya pikir ini akan menjadi penting karena saya khawatir bahwa beberapa rentang fitur mungkin sangat berbeda dari yang lain dan hanya mengambil produk mungkin tidak menangkap ini; tapi saya rasa koefisien harus mencerminkan rentang jadi mungkin ini tidak masalah.

Pikiran apa pun akan sangat dihargai karena saya baru dalam hal ini. Hal-hal khusus untuk regresi logistik (yaitu, sigmoid bukan hanya fungsi linier) dan referensi apa pun tentang bagaimana menerapkan tindakan spesifik (misalnya, transformasi) dalam scikit-learning akan sangat dihargai karena saya benar-benar melakukan proyek dengan data nyata.


Bukankah regresi logistik lebih merupakan model prediksi daripada jenis penjelasan?
tagoma

@ Tagoma keduanya, kan?
Firebug

Jawaban:


2

Hanya ada satu cara menggunakan koefisien regresi saja, Anda dapat memahami fitur mana yang paling berkontribusi terhadap prediksi vektor input yang diberikan.

Namun Anda harus melakukan standarisasi dan skala masing-masing variabel terlebih dahulu (mis. Kurangi mean dan bagi dengan deviasi standar). Kemudian memperbaiki model Anda dengan data terstandarisasi & diskalakan, fitur dengan koefisien regresi terbesar akan menjadi fitur yang berkontribusi paling besar untuk prediksi di masa mendatang.

Koefisien regresi dapat dibandingkan setelah penskalaan karena kami telah membuat unit fitur tidak relevan, sehingga peningkatan satu unit pada fitur sesuai dengan melonjak 1 standar deviasi fitur yang tidak .X1


Alejandro, terima kasih atas jawaban Anda. Ada satu masalah dengan pelatihan tentang data yang dinormalisasi. Saya mendapatkan kinerja model yang jauh lebih buruk. Area saya di bawah kurva ROC sekitar 10% lebih sedikit dan area saya di bawah kurva presisi-recall juga lebih buruk. Dengan demikian, saya ragu untuk mengganti model yang cocok dengan data yang dinormalisasi. Apakah ini biaya untuk mendapatkan fitur individual yang penting yang saya cari? Apakah ada cara lain? Bukankah besarnya koefisien mencerminkan kepentingannya?
kilgoretrout

Hmm itu sangat aneh. Saya tidak akan mengharapkan normalisasi data untuk mempengaruhi perkiraan Anda karena normalisasi tidak mempengaruhi hubungan mendasar antara variabel. Saya tidak yakin dengan cara lain untuk membandingkan nilai prediktif fitur individu
Alejandro Ochoa

2
Jika Anda melihat kinerja yang lebih buruk dalam regresi linier setelah menormalkan fitur, maka Anda memiliki bug. Model pada prediktor normal dan normal harus memberikan prediksi yang persis sama. Istilah regularisasi dapat mempengaruhi hal ini, tetapi model yang teratur harus selalu menggunakan prediktor yang dinormalisasi.
Matthew Drury

2

Salah satu metode yang saya suka gunakan untuk melihat fitur mana yang berkontribusi pada prediksi spesifik adalah mengatur ulang semua fitur menjadi rata-rata satu per satu dan kemudian melihat bagaimana prediksi berubah. Saya mengambil metode ini dari halaman ini . Tetapi saya akan menjelaskan dengan contoh saya sendiri juga.

Misalnya, kita memiliki model yang memperkirakan jika sehari adalah hari yang baik untuk mengenakan celana pendek berdasarkan beberapa informasi cuaca, misalkan suhu, angin dan hujan. dan katakanlah kita menggunakan metode yang memberi kita probabilitas kelas.

Sekarang kita memiliki hari di mana model memprediksi 50/50 untuk hari tertentu, tetapi kita tidak tahu apa penyebabnya. Jadi kita akan melihat setiap fitur, mengatur ulang ke nilai rata-rata (atau 0) dan melihat apa yang diprediksi model sekarang.

  • Katakan untuk suhu kita memiliki 20 ° C, tetapi suhu rata-rata adalah 10 ° C. Jika kita meramalkan ulang model dengan suhu untuk hari ini yang ditetapkan ke rata-rata 10 ° C, tetapi menjaga hujan dan angin pada nilai yang sama, prediksi berakhir menjadi 80% tanpa celana pendek. Jelas suhu memiliki efek yang besar! Sekarang kita dapat melakukan hal yang sama untuk variabel lainnya.

  • Kecepatan angin sedikit di atas rata-rata, dan dengan mengatur ulang angin ke rata-rata dan menjaga yang lain sama, prediksi hanya berubah sedikit menjadi 55% untuk celana pendek. Sepertinya suhu adalah masalah yang lebih besar.

  • Sekarang hujan agak aneh, karena hujan sudah rata-rata. jadi mengatur ulang ke mean jelas tidak akan berpengaruh. Tapi kami masih ingin tahu apakah hujan mempengaruhi prediksi, jadi yang bisa kami lakukan adalah mengatur hujan menjadi 0. Dan lihatlah, begitu kita menetapkan hujan ke 0, model memprediksi 75% untuk celana pendek. Lagi-lagi efeknya lumayan besar.

Dengan menelusuri setiap fitur dan mengaturnya ke nilai rata-rata atau 0, kami dapat mengidentifikasi pada tingkat prediksi fitur mana yang penting. Angin dan suhu keduanya memiliki efek besar di kedua arah, sementara angin memiliki efek yang jauh lebih kecil.

Sekarang mengapa kita mengatur ulang hujan ke 0? Melakukan ini untuk suhu atau angin akan aneh, karena untuk 0 ini adalah nilai yang hampir tidak pernah terjadi dan hanya memiliki sedikit signifikansi, tetapi untuk hujan 0 relatif sering dan itu berarti sesuatu yang spesifik, hari yang kering. Artinya masuk akal untuk mengatur ulang ke 0. Jadi Anda benar-benar harus melihat fitur berdasarkan fitur apa yang masuk akal.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.