Fonctions de perte, 2e partie

Concevoir des flux de travail Machine Learning en Python

Dr. Chris Anagnostopoulos

Honorary Associate Professor

Scores de probabilité

clf = GaussianNB().fit(X_train, y_train)
scores = clf.predict_proba(X_test)
array([[3.74717371e-07, 9.99999625e-01],
       [9.99943716e-01, 5.62841678e-05],
       ...,
       [9.99937502e-01, 6.24977552e-05]])
[s[1] > 0.5 for s in scores] == clf.predict(X_test)
Concevoir des flux de travail Machine Learning en Python

Scores de probabilité

Seuil Faux positifs Faux négatifs
0.0 178 0
0.25 66 17
0.5 35 37
0.75 13 57
1.0 0 72
Concevoir des flux de travail Machine Learning en Python

Courbes ROC

Un tracé du FPR selon le TPR montre une courbe près du coin supérieur gauche et de la bordure du haut. Une ligne diagonale est aussi affichée.

fpr, tpr, thres = roc_curve(
    ground_truth, 
    [s[1] for s in scores])
plt.plot(fpr, tpr)
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
Concevoir des flux de travail Machine Learning en Python

Comme plus tôt, un tracé du FPR selon le TPR montre une courbe près du coin supérieur gauche et de la bordure du haut. Une ligne diagonale est aussi affichée.

Concevoir des flux de travail Machine Learning en Python

Une autre courbe est illustrée pour GaussianNB, inférieure à AdaBoost sur toute la plage de FPR.

Concevoir des flux de travail Machine Learning en Python

Encore une courbe, celle d'une forêt aléatoire : plus basse que GaussianNB pour de petits FPR, mais plus haute pour des FPR plus grands.

Concevoir des flux de travail Machine Learning en Python

AUC

clf = AdaBoostClassifier().fit(X_train, y_train)
scores_ab = clf.predict_proba(X_test)
roc_auc_score(ground_truth, [s[1] for s in scores_ab])
0.9999
Concevoir des flux de travail Machine Learning en Python

Minimisation des coûts

def my_scorer(y_test, y_est, cost_fp=10.0, cost_fn=1.0):
    tn, fp, fn, tp = confusion_matrix(y_test, y_est).ravel()
    return cost_fp*fp + cost_fn*fn
t_range = [0.0, 0.25, 0.5, 0.75, 1.0]
costs = [
   my_scorer(y_test, [s[1] > thres for s in scores]) for thres in t_range
]
[94740.0, 626.0, 587.0, 507.0, 2855.0]
Concevoir des flux de travail Machine Learning en Python

Chaque cas d'utilisation est différent !

Concevoir des flux de travail Machine Learning en Python

Preparing Video For Download...