Zacznij terazZacznij za darmo

Łą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

Zobacz kurs

Instrukcje do ćwiczenia

  • Dla ciągu znaków s, len(s) zwraca jego długość. Zastosuj tę funkcję do kolumny seq, 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 len i first. 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))
Edytuj i uruchom kod