F1 to F-beta – Towards AI

F1 to F-beta – Towards AI

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

Gambar oleh Penulis

Skor F1

Skor F-1 adalah metrik klasifikasi biner populer yang mewakili keseimbangan antara presisi dan ingatan. Ini adalah rata-rata Harmonic presisi dan recall. Persamaan berikut dapat mewakili skor F-1.

Gambar oleh Penulis

di mana Precision dapat didefinisikan sebagai probabilitas prediksi positif yang merupakan anggota aktual dari kelas positif.

Gambar oleh Penulis

Penarikan kembali didefinisikan sebagai probabilitas prediksi positif di antara positif aktual.

Gambar oleh Penulis

dimana TP adalah True Positive, FP adalah False Positive, dan FN adalah False Negative.

Mari kita telusuri skor F1 untuk masalah klasifikasi biner dengan dataset dummy di sklearn.

dari sklearn.datasets impor make_classification
dari sklearn.model_selection impor train_test_split
dari sklearn.linear_model impor LogisticRegression
dari sklearn.metrics impor f1_score X, y = make_classification(n_samples=1000, n_classes=2,
random_state=1)
X_train, X_test, y_train, y_test = train_test_split(X, y,
ukuran_tes=.2,
random_state=2)
lr = LogistikRegresi()
lr.fit(X_train, y_train)
y_pred = lr.predict(X_test)
y_pred_prob = lr.predict_proba(X_test)
y_pred_prob = y_pred_prob[:,1]
f1_score(y_test, y_pred) Keluaran:
0.8585858585858585

Sementara banyak praktisi Machine Learning dan Deep Learning sering menggunakan skor F1 untuk evaluasi model, hanya sedikit yang akrab dengan ukuran-F, yang merupakan bentuk umum Skor F1.

Skor F-beta

Perhitungan skor F-beta mengikuti bentuk yang sama dengan skor F1. Berbeda dengan Skor F1, yang merupakan rata-rata harmonik, ini adalah rata-rata harmonik tertimbang dari presisi dan recall, mencapai nilai optimalnya pada 1 dan nilai terburuk pada 0.

Gambar oleh Penulis

Parameter beta menentukan bobot recall dalam skor gabungan. beta <1 memberikan bobot lebih pada presisi sementara beta> 1 mendukung penarikan.

Mari kita lihat skor F-beta dan bagaimana nilainya berfluktuasi dengan beta.

dari sklearn.metrics impor fbeta_score print(fbeta_score(y_test, y_pred, beta=0.5))
cetak(fbeta_score(y_test, y_pred, beta=1))
print(fbeta_score(y_test, y_pred, beta=2)) Output:
0.853413654618474
0.8585858585858585
0.8638211382113821

Di sini, kami telah memperhatikan bahwa F-beta berubah dengan gerakan beta, dan sekarang mari kita lihat relatif sama terhadap kurva presisi dan recall di berbagai ambang batas.

impor matplotlib.pyplot sebagai plt
dari sklearn.metrics impor recall_score
dari sklearn.metrics impor precision_score
dari sklearn.metrics impor precision_recall_curve _, _, threshold = precision_recall_curve(y_test, y_pred_prob) f1score = list()
f05skor = daftar()
f2skor = daftar()
presisi = daftar()
ingat = daftar()
untuk th di ambang batas:
y_test_pred = daftar()
untuk masalah di y_pred_prob:
jika prob > t :
y_test_pred.append(1)
kalau tidak:
y_test_pred.append(0)

f1score.append(f1_score(y_test, y_test_pred))
presisi.append(precision_score(y_test, y_test_pred))
recall.append(recall_score(y_test, y_test_pred))
f05score.append(fbeta_score(y_test, y_test_pred, beta=0.5))
f2score.append(fbeta_score(y_test, y_test_pred, beta=2))

_, kapak = plt.subplots(figsize=(8, 6))
ax.set_xlabel(‘Ambang Batas’)
plt.plot(ambang, presisi, label=’presisi’)
plt.plot(ambang, ingat, label=’ingat’)
plt.plot(ambang, f05score, label=’F0.5′)
plt.plot(ambang, f1score, label=’F1′)
plt.plot(ambang, f2score, label=’F2′)
plt.legend(loc=’kiri bawah’)
Presisi, Recall, F1 vs Ambang Batas | Gambar oleh Penulis

Terbukti pada grafik di atas bahwa ketika kita meningkatkan nilai beta kita dari 0, kurva mulai bergerak menuju kurva recall, yang berarti dengan peningkatan nilai beta memberikan lebih penting untuk mengingat, dan kode di bawah ini untuk memplot F- mengukur pada berbagai nilai beta dan ambang batas.

beta = [0.1, 0.3, 0.5, 0.7, 1, 2, 5]
_, kapak = plt.subplots(figsize=(8, 6))
ax.set_xlabel(‘Ambang Batas’)
ax.set_ylabel(‘Fbeta’)
untuk beta dalam beta:
fbetascore = daftar()
untuk i, th di enumerate(ambang):
y_test_pred = daftar()
untuk masalah di y_pred_prob:
jika prob > t :
y_test_pred.append(1)
kalau tidak:
y_test_pred.append(0)
fbetascore.append(fbeta_score(y_test, y_test_pred,
beta = beta))
plt.plot(ambang batas, fbetascore, label=f’F{beta}’)
plt.legend(loc=’kiri bawah’)
Fbeta vs Ambang Batas | Gambar oleh Penulis

Referensi:

[1] Skor F1. https://scikit-learn.org/stable/modules/generated/sklearn.metrics.f1_score.html#sklearn.metrics.f1_score

[2] Skor Fbeta. https://scikit-learn.org/stable/modules/generated/sklearn.metrics.fbeta_score.html

F1 hingga F-beta awalnya diterbitkan di Towards AI on Medium, di mana orang-orang melanjutkan percakapan dengan menyoroti dan menanggapi cerita ini.

Diterbitkan melalui Menuju AI

Author: Jonathan Kelly