Bagaimana cara mengatur jaringan saraf untuk menghasilkan data ordinal?

20

Saya memiliki jaringan saraf yang diatur untuk memprediksi sesuatu di mana variabel output adalah ordinal. Saya akan jelaskan di bawah ini dengan menggunakan tiga kemungkinan keluaran A <B <C.

Cukup jelas bagaimana menggunakan jaringan saraf untuk menampilkan data kategori: output hanyalah sebuah softmax dari lapisan terakhir (biasanya sepenuhnya terhubung), satu per kategori, dan kategori yang diprediksi adalah yang dengan nilai output terbesar (ini adalah default di banyak model populer). Saya telah menggunakan pengaturan yang sama untuk nilai ordinal. Namun, dalam hal ini output sering tidak masuk akal, misalnya output jaringan untuk A dan C tinggi tetapi B rendah: ini tidak masuk akal untuk nilai-nilai ordinal.

Saya punya satu ide untuk ini, yaitu menghitung kerugian berdasarkan membandingkan output dengan 1 0 0 untuk A, 1 1 0 untuk B, dan 1 1 1 untuk C. Ambang batas yang tepat dapat disetel nanti menggunakan pengelompokan lain (misalnya Bayesian ) tetapi ini tampaknya menangkap ide penting dari pemesanan input, tanpa menentukan skala interval tertentu.

Apa cara standar untuk memecahkan masalah ini? Apakah ada penelitian atau referensi yang menggambarkan pro dan kontra dari pendekatan yang berbeda?

Alex I
sumber
1
Saya mendapat banyak hits menarik di Google untuk "regresi logistik ordinal" misalnya makalah ini
shadowtalker
@ssdecontrol: Menarik. Saya mencobanya; hasilnya lebih baik daripada memilih satu output dengan nilai tertinggi tetapi sedikit lebih buruk daripada metode lainnya (Bayesian naif, dll). Ini berguna, tetapi tidak membantu melatih jaringan, hanya meningkatkan hasil sedikit setelah fakta ... atau setidaknya saya tidak melihat bagaimana membuatnya membantu melatih jaringan.
Alex I
"itu" yang mana yang kamu coba? Satu-satunya poin saya adalah bahwa mesin pencari bisa lebih membantu daripada yang Anda harapkan
shadowtalker
Juga saya tidak yakin saya mengerti apa yang Anda maksud dengan "misalnya output jaringan untuk A dan C tinggi tetapi B rendah: ini tidak masuk akal". Maksud Anda, Anda memprediksi banyak As dan C tetapi hanya beberapa B? Saya tidak mengerti mengapa itu tidak masuk akal kecuali Anda memiliki alasan substantif atau spesifik domain untuk berpikiran demikian
shadowtalker
Saya juga tidak tahu bagaimana Anda bisa mendapatkan output seperti "1 1 0". Saya pikir ada beberapa kebingungan tentang terminologi di sini. Apakah Anda menggambarkan hasil ordinal kumulatif ? Seperti dalam model logit kumulatif?
shadowtalker

Jawaban:

15

KK

Tetapi beberapa orang telah berhasil menciptakan encoding yang cerdas untuk kelas ordinal Anda (lihat jawaban stackoverflow ini ). Ini semacam pengkodean satu-panas,

  • kelas 1 direpresentasikan sebagai [0 0 0 0 ...]

  • kelas 2 direpresentasikan sebagai [1 ​​0 0 0 ...]

  • kelas 3 direpresentasikan sebagai [1 ​​1 0 0 ...]

P(y^<k)np.sum

Strategi ini menyerupai ansambel dari Frank dan Hall , dan saya pikir ini adalah publikasi pertama .

Ricardo Cruz
sumber
Pendekatan ini tampaknya jauh lebih menarik. Penting untuk disadari bahwa menggunakan mode prediksi untuk mengubahnya menjadi masalah klasifikasi bukanlah ide yang baik. Probabilitas kumulatif yang diprediksi dapat diubah menjadi probabilitas individu yang diprediksi, sehingga fungsi utilitas untuk membuat keputusan akhir dapat disisipkan jauh di kemudian hari ketika utilitas diketahui. Lihat fharrell.com/post/classification .
Frank Harrell
1
@ RicardoCruz - Hmm, itu terdengar sangat seperti apa yang saya sarankan: "1 0 0 untuk A, 1 1 0 untuk B, dan 1 1 1 untuk C". Senang mengetahui bahwa itu berhasil! Juga wow itu adalah makalah dari tahun 2007, ide ini telah ada sejak lama
Alex I
Ya, saya sendiri terkejut ketika menemukan kertas itu!
Ricardo Cruz
Catatan: Seperti yang dinyatakan dalam "Pendekatan Jaringan Neurel ke Regresi Ordinal": "... menggunakan fungsi sigmoid independen untuk node output tidak menjamin hubungan monoton (o1> = o2> = ....> = oK), yang merupakan tidak perlu tetapi, diinginkan untuk membuat prediksi. " Oleh karena itu, hanya melakukan "np.sum" pada waktu prediksi bukanlah metode terbaik.
sccrthlt
1
Edit komentar saya di atas: Melakukan "np.sum" pada output dari jaringan saraf menyesatkan. Situasi berikut mungkin muncul di mana vektor output adalah [0 1 0 1 0]. Melakukan penjumlahan pada vektor ini akan menghasilkan prediksi kelas 2, padahal sebenarnya jaringan sarafnya tidak pasti.
sccrthlt