Łącząc wszystko razem
Oprócz potoku wykrywania anomalii opartego na uczeniu przez podobieństwo, który utworzyłeś w poprzednim ćwiczeniu, chcesz dodać obsługę podejścia opartego na cechach – z użyciem jednoklasowej SVM. Postanawiasz wyekstrahować dwie cechy: długość ciągu znaków oraz numeryczne kodowanie pierwszej litery ciągu, uzyskane za pomocą funkcji LabelEncoder() opisanej w rozdziale 1. Aby zapewnić uczciwe porównanie, wyniki oceny anomalii przekażesz do obliczenia AUC. Zaimportowano już: LabelEncoder(), roc_auc_score() jako auc() oraz OneClassSVM. Dane są dostępne jako ramka danych pandas o nazwie proteins, zawierająca dwie kolumny – label i seq – oraz dwie klasy: IMMUNE SYSTEM i VIRUS. Dopasowany detektor LoF jest dostępny jako lof_detector.
To ćwiczenie jest częścią kursu
Projektowanie przepływów pracy uczenia maszynowego w Pythonie
Instrukcje do ćwiczenia
- Dla ciągu znaków
s,len(s)zwraca jego długość. Zastosuj tę funkcję do kolumnyseq, aby utworzyć nową kolumnęlen. - Dla ciągu znaków
s,list(s)zwraca listę jego znaków. Skorzystaj z tego, aby wyodrębnić pierwszą literę każdej sekwencji, a następnie zakoduj ją za pomocąLabelEncoder(). - Wyniki LoF znajdują się w atrybucie
negative_outlier_factor_. Oblicz ich AUC. - Dopasuj jednoklasową SVM do ramki danych zawierającej tylko kolumny
lenifirst. Wyodrębnij wyniki i oceń zarówno wyniki LoF, jak i wyniki SVM za pomocą AUC.
Interaktywne ćwiczenie praktyczne
Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.
# Create a feature that contains the length of the string
proteins['len'] = proteins['seq'].apply(____)
# Create a feature encoding the first letter of the string
proteins['first'] = ____.____(
proteins['seq'].apply(____))
# Extract scores from the fitted LoF object, compute its AUC
scores_lof = lof_detector.____
print(____(proteins['label']==____, scores_lof))
# Fit a 1-class SVM, extract its scores, and compute its AUC
svm = ____.____(proteins[['len', 'first']])
scores_svm = svm.____(proteins[['len', 'first']])
print(____(proteins['label']==____, scores_svm))