Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Petua Lengkung ROC dalam Python

Petua Lengkung ROC dalam Python

WBOY
WBOYasal
2023-06-11 12:12:272017semak imbas

Dalam beberapa tahun kebelakangan ini, perkembangan sains data dan pembelajaran mesin telah menjadikan bahasa pengaturcaraan Python sebagai salah satu bahasa kegemaran saintis data dan jurutera pembelajaran mesin. Python menyediakan sejumlah besar perpustakaan dan rangka kerja, seperti NumPy, Pandas, Scikit-learn, dll., menjadikannya lebih mudah untuk membina model pembelajaran mesin berkualiti tinggi.

Keluk ROC (Keluk Ciri Pengendalian Penerima) ialah alat penting dalam pembelajaran mesin Ia digunakan untuk menilai prestasi algoritma pengelasan dan membantu kami memahami keupayaan pengelasan dan keteguhan algoritma. Dalam Python, kita boleh merancang lengkung ROC dalam pelbagai cara untuk membantu menilai algoritma pengelasan. Artikel ini akan memperkenalkan teknik lukisan lengkung ROC dalam Python dan menunjukkan cara menggunakan perpustakaan Scikit-learn dan perpustakaan Matplotlib untuk mencipta lengkung ROC yang cantik.

Bagaimana keluk ROC berfungsi?

Keluk ROC ialah salah satu alat yang paling biasa digunakan dalam penilaian prestasi pengelas binari. Keluk ini menggambarkan prestasi pengelas dengan memplot hubungan antara Kadar Positif Palsu dan Kadar Positif Benar. Kadar positif palsu ialah perkadaran kelas positif palsu kepada semua kelas negatif, dan kadar positif benar ialah nisbah kelas benar kepada semua kelas positif. Paksi X lengkung ROC ialah kadar positif palsu, manakala paksi Y ialah kadar positif sebenar.

Biasanya, masalah pengelasan melibatkan masalah penghakiman binari, di mana contoh positif dan negatif dipanggil "1" dan "0" masing-masing Pengelas boleh mengklasifikasikan contoh sebagai contoh positif mengikut ambang tertentu. Atau contoh negatif. Jika ambang pengelas terlalu tinggi, sebilangan besar kejadian akan tersilap diklasifikasikan sebagai contoh negatif. Ini meningkatkan Kadar Negatif Palsu dan mungkin menyebabkan pengelas terlepas kejadian. Sebaliknya, jika ambang pengelas terlalu rendah, ia akan menyebabkan sebilangan besar kejadian diklasifikasikan sebagai contoh positif, meningkatkan kadar positif palsu dan boleh menyebabkan salah penilaian. Untuk melaksanakan pengelas optimum, kita perlu menimbang kedua-dua jenis ralat ini.

Keluk ROC yang ideal bermula dari titik di mana kadar positif sebenar adalah bersamaan dengan 1 dan kadar positif palsu adalah sama dengan 0. Pada ketika ini, ambang ditetapkan kepada nilai maksimum. Apabila kita meningkatkan ambang, kadar positif sebenar kekal sama, tetapi kadar positif palsu meningkat. Oleh itu, pada mana-mana titik pada keluk ROC, kadar positif benar yang lebih tinggi dan kadar positif palsu yang rendah dianggap prestasi yang lebih baik daripada kadar positif palsu yang lebih tinggi.

Teknik untuk lengkung ROC

Terdapat beberapa teknik untuk melukis lengkung ROC dalam Python. Berikut ialah beberapa petua biasa:

  1. Menggunakan perpustakaan Scikit-learn

Scikit-learn menyediakan fungsi yang mudah untuk mengira output positif benar dan palsu di bawah ambang yang berbeza, dan Mengembalikan palsu kadar positif dan hasil kadar positif sebenar. Sebaik sahaja kita mempunyai output ini, kita boleh menggambarkannya sebagai lengkung ROC. Berikut ialah contoh mengira dan memplot lengkung ROC menggunakan perpustakaan Scikit-learn:

from sklearn.metrics import roc_curve
from sklearn.metrics import auc

fpr, tpr, thresholds = roc_curve(y_test, y_pred_prob)
roc_auc = auc(fpr, tpr)

plt.figure()
plt.plot(fpr, tpr, color='darkorange', lw=2, label='ROC curve (area = %0.2f)' % roc_auc)
plt.plot([0, 1], [0, 1], color='navy', lw=2, linestyle='--')
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.05])
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('Receiver Operating Characteristic (ROC) Curve')
plt.legend(loc="lower right")
plt.show()

Dalam contoh ini, kami mengandaikan bahawa kami telah memasang pengelas binari dan mengira kebarangkalian menggunakan set ujian. y_test ialah label pengelasan data ujian, dan y_pred_prob ialah kebarangkalian yang diramalkan oleh pengelas. Contoh ini mengira fpr dan tpr, dan menggunakan fungsi auc dalam Scikit-belajar untuk mengira kawasan di bawah lengkung ROC Kita boleh menggunakan Matplotlib untuk melukis lengkung ROC. Graf memplotkan kadar positif sebenar pada paksi-Y dan kadar positif palsu pada paksi-X.

  1. Plot tersuai menggunakan perpustakaan Matplotlib

Jika anda ingin menyesuaikan penampilan lengkung ROC dengan lebih banyak lagi, maka anda boleh menggunakan Matplotlib untuk mencipta carta anda sendiri. Berikut ialah contoh yang menunjukkan cara menggunakan Matplotlib untuk memplot lengkung ROC:

import numpy as np
import matplotlib.pyplot as plt

# Generate some data
N      = 50
x_true = np.random.randn(N)
x_false= np.random.randn(N)

# Add some noise
x_true = x_true + np.random.randn(N) * 0.3
x_false= x_false + np.random.randn(N) * 0.3

# Create labels and predictions
y_true = np.ones(N)
y_false= np.zeros(N)
y_pred = np.concatenate([x_true, x_false])
y_true = np.concatenate([y_true, y_false])

# Determine threshold for each point
thresholds = np.sort(y_pred)
tpr_all    = []
fpr_all    = []
for threshold in thresholds:
    y_pred_bin = (y_pred >= threshold).astype(int)
    tn, fp, fn, tp = confusion_matrix(y_true, y_pred_bin).ravel()
    tpr = tp / (tp + fn)
    fpr = fp / (fp + tn)
    tpr_all.append(tpr)
    fpr_all.append(fpr)    

plt.figure()
plt.plot(fpr_all, tpr_all)
plt.plot([0, 1], [0, 1], '--', color='grey')
plt.xlabel("False Positive Rate")
plt.ylabel("True Positive Rate")
plt.title("ROC Curve")
plt.show()

Dalam contoh ini, kami mula-mula menjana beberapa data simulasi dan kemudian menjadikannya lebih realistik dengan menambahkan sedikit bunyi. Seterusnya, kami mencipta label dan ramalan pada data gabungan dan mengira kadar dan ambang positif benar dan palsu untuk setiap titik. Kami akhirnya menggunakan Matplotlib untuk melukis lengkung ROC. Contoh ini menggambarkan cara melukis lengkung ROC menggunakan pengaturcaraan Python, dan juga menunjukkan cara melukis carta tersuai.

Kesimpulan

Keluk ROC ialah alat penting untuk menilai prestasi pengelas. Dalam Python, lengkung ROC boleh dilukis menggunakan kedua-dua perpustakaan Scikit-learn dan Matplotlib. Scikit-learn menyediakan fungsi yang mudah untuk mengira lengkung ROC, manakala Matplotlib menyediakan alat lukisan yang sangat disesuaikan. Contoh yang digariskan menggambarkan dua teknik untuk memplot keluk ROC Tidak kira sama ada anda merancang untuk menggunakan fungsi perpustakaan atau plot tersuai, teknik ini boleh membantu dalam menilai prestasi pengelas pada data sebenar.

Atas ialah kandungan terperinci Petua Lengkung ROC dalam Python. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn