Saya telah mengikuti contoh ini di sini dan saya ingin tahu bagaimana tepatnya fungsi akurasi ini bekerja:

def compute_accuracy(y_true, y_pred):
'''Compute classification accuracy with a fixed threshold on distances.
'''
    pred = y_pred.ravel() < 0.5
    return np.mean(pred == y_true)

Sejauh yang saya tahu output dari jaringan dalam hal ini adalah jarak antara dua pasang. Jadi bagaimana kita bisa menghitung akurasi dalam kasus ini? Apa yang dimaksud dengan ambang batas "0,5"? Juga, bagaimana saya bisa menghitung tingkat kesalahan?

0
Atheer Abdullatif 11 April 2020, 22:44

1 menjawab

Jawaban Terbaik

Tampaknya ada beberapa celah dalam pemahaman contoh itu yang perlu diisi terlebih dahulu:

Jika Anda mempelajari langkah persiapan data (yaitu metode create_pairs), Anda akan menyadari bahwa pasangan positif (yaitu pasangan sampel milik kelas yang sama) diberi label 1 (yaitu positif/benar) dan negatif pasangan (yaitu pasangan sampel milik kelas yang berbeda) diberi label 0 (yaitu negatif/salah).

Selanjutnya, jaringan Siam dalam contoh dirancang sedemikian rupa sehingga jika diberikan sepasang sampel sebagai input, ia akan memprediksi jarak mereka sebagai output. Dengan menggunakan kerugian kontrastif sebagai fungsi kerugian model, model dilatih sedemikian rupa sehingga diberikan pasangan positif sebagai input nilai jarak yang kecil diprediksi (karena mereka termasuk dalam kelas yang sama dan oleh karena itu jaraknya harus rendah, yaitu untuk menyampaikan kesamaan) dan diberi pasangan negatif sebagai input, nilai jarak yang besar diprediksi (karena mereka termasuk dalam kelas yang berbeda dan oleh karena itu jaraknya harus tinggi, yaitu untuk menyampaikan ketidakmiripan). Sebagai latihan, coba konfirmasikan poin-poin ini dengan mempertimbangkannya secara numerik (yaitu ketika y_true adalah 1 dan ketika y_true adalah 0) menggunakan definisi kerugian kontrastif dalam kode.

Jadi, fungsi akurasi dalam contoh diimplementasikan sedemikian rupa sehingga ambang arbitrary tetap, yaitu 0,5, diterapkan pada nilai jarak yang diprediksi, yaitu y_pred (ini berarti penulis contoh ini telah memutuskan bahwa nilai jarak kurang dari 0,5 menunjukkan pasangan positif; Anda dapat memutuskan untuk menggunakan nilai ambang lain, tetapi itu harus menjadi pilihan yang masuk akal berdasarkan eksperimen/pengalaman). Kemudian hasilnya akan dibandingkan dengan nilai label yang sebenarnya, yaitu y_true:

  • Ketika y_pred lebih rendah dari 0,5 (y_pred < 0.5 akan sama dengan True): jika y_true adalah 1 (yaitu positif) maka ini berarti prediksi jaringan konsisten dengan label yang benar (yaitu True == 1 sama dengan True) dan oleh karena itu prediksi untuk sampel ini dihitung terhadap prediksi yang benar (yaitu akurasi). Namun, jika y_true adalah 0 (yaitu negatif) maka prediksi untuk sampel ini tidak benar (yaitu True == 0 sama dengan False) dan oleh karena itu hal ini tidak akan berkontribusi pada prediksi yang benar.

  • Ketika y_pred sama atau lebih besar dari 0,5 (y_pred < 0.5 akan sama dengan False): Alasan yang sama seperti di atas berlaku (dibiarkan sebagai latihan!).

(Catatan: jangan lupa bahwa model dilatih pada kumpulan sampel. Oleh karena itu, y_pred atau y_true bukan nilai tunggal; melainkan array nilai , dan semua perhitungan/perbandingan yang disebutkan di atas diterapkan berdasarkan elemen).

Mari kita lihat contoh numerik (imajiner) pada kumpulan input yang terdiri dari 5 pasangan sampel dan bagaimana akurasi dihitung untuk prediksi model pada kumpulan ini:

>>> y_pred = np.array([1.5, 0.7, 0.1, 0.3, 3.2])
>>> y_true = np.array([1, 0, 0, 1, 0])

>>> pred = y_pred < 0.5
>>> pred
array([False, False,  True,  True, False])

>>> result = pred == y_true
>>> result
array([False,  True, False,  True,  True])

>>> accuracy = np.mean(result)
>>> accuracy
0.6
1
today 12 April 2020, 23:50