Contamination, di nuovo
Noti che la one-class SVM non ha un parametro contamination. Ma ormai sai bene che hai bisogno di un modo per controllare la proporzione di esempi etichettati come novità, così da gestire il tuo tasso di falsi positivi. Decidi quindi di sperimentare impostando una soglia sui punteggi. Il rilevatore è stato importato come onesvm; hai inoltre a disposizione i dati come X_train, X_test, y_train, y_test, numpy come np e confusion_matrix().
Questo esercizio fa parte del corso
Progettare workflow di Machine Learning in Python
Istruzioni dell'esercizio
- Allena la 1-class SVM e calcola i punteggi sui dati di test.
- Calcola la proporzione osservata di outlier nei dati di test.
- Usa
np.quantile()per trovare la soglia dei punteggi che ottiene quella proporzione. - Usa quella soglia per etichettare i dati di test. Stampa la matrice di confusione.
Esercizio pratico interattivo
Prova a risolvere questo esercizio completando il codice di esempio.
# Fit a one-class SVM detector and score the test data
nov_det = ____(X_train)
scores = ____(X_test)
# Find the observed proportion of outliers in the test data
prop = np.____(y_test==____)
# Compute the appropriate threshold
threshold = np.____(____, ____)
# Print the confusion matrix for the thresholded scores
print(confusion_matrix(y_test, ____ > ____))