Sätt ihop allt
Utöver den avståndsbaserade anomalidetektionspipeline du skapade i den förra övningen vill du också stödja en funktionsbaserad variant med en enklassig SVM. Du väljer att extrahera två särdrag: dels strängens längd, dels en numerisk kodning av strängens första bokstav med hjälp av funktionen LabelEncoder() som beskrevs i kapitel 1. För en rättvis jämförelse matar du in avvikelsescorerna i en AUC-beräkning. Följande har importerats: LabelEncoder(), roc_auc_score() som auc() och OneClassSVM. Data finns tillgänglig som en pandas-dataram med namnet proteins, med två kolumner – label och seq – samt två klasser: IMMUNE SYSTEM och VIRUS. En anpassad LoF-detektor finns tillgänglig som lof_detector.
Den här övningen är en del av kursen
Att designa maskininlärningsflöden i Python
Övningsinstruktioner
- För en sträng
sreturnerarlen(s)dess längd. Tillämpa detta på kolumnenseqför att skapa en ny kolumnlen. - För en sträng
sreturnerarlist(s)en lista med dess tecken. Använd detta för att extrahera den första bokstaven i varje sekvens och koda den medLabelEncoder(). - LoF-scorerna finns i attributet
negative_outlier_factor_. Beräkna deras AUC. - Anpassa en enklassig SVM till en dataram med enbart
lenochfirstsom kolumner. Extrahera scorerna och utvärdera både LoF-scorerna och SVM-scorerna med hjälp av AUC.
Interaktiv övning med praktiskt arbete
Testa den här övningen genom att slutföra den här exempelkoden.
# 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))