
Pengarang: Saurabh Saxena
Awalnya diterbitkan di Towards AI the World’s Leading AI and Technology News and Media Company. Jika Anda sedang membangun produk atau layanan terkait AI, kami mengundang Anda untuk mempertimbangkan untuk menjadi sponsor AI. Di Towards AI, kami membantu menskalakan AI dan startup teknologi. Biarkan kami membantu Anda melepaskan teknologi Anda kepada massa.
Evaluasi Model
Laporan Presisi, Recall, F1, Mikro, Makro, Tertimbang, dan Klasifikasi
Gambar oleh Penulis
Jika Anda akrab dengan Matriks Kebingungan, Anda mungkin tahu bahwa ini terutama dijelaskan untuk klasifikasi biner, yang hanya memiliki dua keluaran. TP, TN, FP, FN, dan metrik turunan lainnya seperti presisi dan penarikan mudah dipahami. Namun, tidak demikian halnya ketika kita memiliki lebih dari dua kelas target.
Dalam blog ini, Fokus akan pada masalah dengan lebih dari dua kelas atau, dengan kata lain, klasifikasi Multi-kelas. Tidak seperti klasifikasi biner, tidak ada kelas negatif. Ini adalah persepsi bahwa TP, TN, dan metrik lainnya sulit untuk diturunkan dari matriks kebingungan untuk multi-kelas tetapi sebenarnya, itu cukup mudah.
Dalam klasifikasi multi-kelas, semua metrik baik itu TP, presisi, atau metrik lainnya, dihitung sama seperti dalam biner, kecuali perlu dihitung untuk setiap kelas. Kita dapat memperoleh hampir semua metrik untuk suatu kelas jika kita menghitung TP, TN, FP, dan FN untuk masing-masing kelas.
Matriks Kebingungan Multi-kelas | Gambar oleh Penulis
TP, FP, dan FN dapat dideduksi dari matriks jika kita mencari kelas tertentu dari kedua dimensi, dan sisanya akan berkontribusi pada TN. Metrik lain juga dapat diturunkan dengan cara yang sama. Silakan kunjungi Pengantar Matriks Kebingungan dan Selami Matriks Kebingungan untuk membaca tentang Apa itu Matriks Kebingungan dan bagaimana presisi, ingatan, dan banyak metrik lainnya diturunkan darinya.
Mari kita memahami cara menghitung metrik untuk multi-kelas; untuk kesederhanaan, kami akan mempertimbangkan masalah dengan 3 kelas (pesawat, mobil, kereta api).
Matriks Kebingungan | Gambar oleh Penulis ## Perhitungan kelas “Pesawat”: TP = 9
FN = 1+5 = 6
FP = 6+3 = 9
TN = 7+4+2+8 = 21
Presisi = TP/(TP+FP) = 9/(9+9) = 0,5
Ingat = TP/(TP+FN) = 9/(9+6) = 0,6
F1 = 2*(0.5*0.6)/(0.5+0.6) = 5.55
Demikian pula, kita dapat menghitung untuk kelas lain. Namun kali ini kita akan menggunakan sklearn metrics API untuk menghasilkan presisi, recall, dan skor f1.
dari sklearn.metrics mengimpor kebingungan_matrix
dari sklearn.metrics impor precision_score
y_benar = [0]*15 + [1]*17 + [2]*13
y_pred = [0]*9 + [1]*1 + [2]*5 + [0]*6 + [1]*7 + [2]*4 + [0]*3 + [1]*2 + [2]*8 confusion_matrix(y_true, y_pred, labels=[0,1,2]) Keluaran:
Himpunan([[9, 1, 5],
[6, 7, 4],
[3, 2, 8]])
Contoh di atas adalah untuk menghitung matriks konfusi, yang mengembalikan ndarray, dan jika label tidak dikodekan secara panas, kita harus menyediakan satu set label terhadap argumen ‘label’.
Presisi: Ini mengacu pada proporsi prediksi yang benar di antara semua prediksi untuk kelas tertentu.
dari sklearn.metrics impor precision_score
presisi_score(y_true, y_pred, labels=[0,1,2]rata-rata=Tidak ada) Keluaran:
Himpunan([0.5 , 0.7 , 0.47058824])
Recall: Ini mengacu pada proporsi contoh kelas tertentu yang telah diprediksi oleh model sebagai milik kelas itu.
dari sklearn.metrics impor recall_score
recall_score(y_true, y_pred, labels=[0,1,2]rata-rata=Tidak ada) Keluaran:
Himpunan([0.6 , 0.41176471, 0.61538462])
Skor F1: Rata-rata Harmonik dari presisi dan daya ingat.
dari sklearn.metrics impor f1_score
f1_score(y_true, y_pred, labels=[0,1,2]rata-rata=Tidak ada) Keluaran:
Himpunan([0.54545455, 0.51851852, 0.53333333])
Argumen ‘rata-rata’ dalam metode evaluasi di atas harus berupa None yang mengembalikan larik metrik masing-masing ke kelas individual.
Dalam multi-kelas, kami telah mengamati bahwa presisi telah dihitung untuk masing-masing kelas, sedangkan dalam masalah kelas biner, kami memiliki satu nilai. Jika kita ingin mengevaluasi multi-kelas dengan satu metrik global, kita memiliki presisi mikro, makro, dan pembobotan. Metrik apa pun dari matriks konfusi dapat digabungkan dengan mikro, makro, dan pembobotan untuk menjadikannya metrik global.
Mikro Presisi: Ini dihitung dengan mempertimbangkan total TP, TN, FN, dan TN terlepas dari kelas untuk menghitung Presisi.
TP Global = TP(pesawat) + TP(mobil) + TP(kereta api) = 9+7+8 = 24 FP Global = FP(A) + FP(C) + FP(T) = (6+3) + ( 1+2) + (5+4) = 21 Mikro Presisi = 24/(24+21) = 0,533 dari sklearn.metrics impor precision_score
presisi_score(y_true, y_pred, labels=[0,1,2]rata-rata=’mikro’) Keluaran:
0,53333333333333333
Ketepatan Makro: Ini disebut sebagai rata-rata tak tertimbang dari ukuran untuk setiap kelas.
Laporan Klasifikasi | Gambar oleh Penulis Macro Precision = (0,50 + 0,70 + 0,47)/3 = 0,556 dari sklearn.metrics impor precision_score
presisi_score(y_true, y_pred, labels=[0,1,2]rata-rata=’makro’) Keluaran:
0,5568627450980391
Presisi Tertimbang: Tidak seperti makro, ini adalah rata-rata tertimbang dari ukuran. Bobot adalah jumlah total sampel per kelas. Dalam contoh kami, kami memiliki 15 pesawat terbang, 17 mobil, dan 13 kereta api yang dijumlahkan menjadi 45 secara total.
Presisi Tertimbang = (15*0,50 + 17*0,70 + 13*0,47)/45 = 0,566 dari sklearn.metrics mengimpor precision_score
presisi_score(y_true, y_pred, labels=[0,1,2]rata-rata=’tertimbang’) Keluaran:
0,5670588235294117
Apa itu Laporan Klasifikasi?
Ini adalah metode python di bawah sklearn metrics API, berguna saat kita membutuhkan metrik kelas bersama dengan metrik global. Ini memberikan presisi, daya ingat, dan skor F1 di tingkat individu dan global. Di sini dukungan adalah jumlah sampel. Laporan Klasifikasi di sklearn menghitung semua metrik yang diperlukan untuk evaluasi.
dari sklearn.metrics mengimpor klasifikasi_laporan
laporan = klasifikasi_laporan(y_benar, y_pred, label=[0,1,2]nama_target=[“Airplane”, “Car”, “Train”])
cetak(laporan) Keluaran:
penarikan presisi f1-score mendukung Pesawat 0,50 0,60 0,55 15
Mobil 0,70 0,41 0,52 17
Latih 0,47 0,62 0,53 13 akurasi 0,53 45
makro rata-rata 0,56 0,54 0,53 45
rata-rata tertimbang 0,57 0,53 0,53 45
Di bawah ini adalah kode untuk merencanakan Matriks kebingungan dan Laporan Klasifikasi Terperinci
https://medium.com/media/e7e4efd4e67053f5459f628e0faaca39/hrefhttps://medium.com/media/8b597fd6cedb02b224f8f1c75852fc21/href
impor numpy sebagai np
dari sklearn.datasets impor load_iris
dari sklearn.model_selection impor train_test_split
dari sklearn.linear_model impor LogisticRegression
dari . impor confusion_matrix # Muat Dataset
data = beban_iris()
X = data.data
y = data.target
labels = list(data.target_names) # Menambahkan Kebisingan
random_state = np.random.RandomState(0)
n_sampel, n_fitur = X.bentuk
X = np.concatenate([X,
random_state.randn(n_samples, 200* n_features)],
sumbu=1)
X_train, X_test, y_train, y_test = train_test_split(
X[y < 3]kamu[y < 3]test_size=0.5, random_state=random_state) lr = LogisticRegression()
lr.fit(X_train, y_train)
y_pred = lr.predict(X_test)
y_pred_prob = lr.predict_proba(X_test) confusion_matrix(y_test, y_pred, label)
Jika Anda bertanya-tanya tentang “dari . import confusion_matrix”, silakan merujuk ke Pengantar Matriks Kebingungan untuk metode Python.
Matriks Kebingungan | Gambar oleh Penulis multi_classification_report(y_test, y_pred, labels=labels, encoded_labels=True, as_frame=True)
Laporan Klasifikasi Terperinci | Gambar oleh Penulis diringkas_classification_report(y_test, y_pred, as_frame=True)
Laporan Klasifikasi Ringkas | Gambar oleh Penulis
Saya harap blog ini dan seri lainnya (disebutkan dalam referensi) akan membantu Anda membangun pemahaman yang jelas tentang matriks kebingungan.
Saran dan pertanyaan dipersilakan, silakan bagikan di komentar.
Referensi:
[1] API metrik sklearn. https://scikit-learn.org/stable/modules/classes.html#module-sklearn.metrics
[2] Pengantar Matriks Kebingungan. https://pub.towardsai.net/introduction-to-confusion-matrix-50676f2756ee
[3] Menyelam jauh ke dalam Matriks Kebingungan. https://pub.towardsai.net/deep-dive-into-confusion-matrix-6b8111d5c3f7
Evaluasi Model Multi-kelas dengan Matriks Kebingungan dan Laporan Klasifikasi awalnya diterbitkan di Towards AI on Medium, di mana orang-orang melanjutkan percakapan dengan menyoroti dan menanggapi cerita ini.
Diterbitkan melalui Menuju AI