Juntando tudo
Além do pipeline de detecção de anomalias baseado em distância que você criou no exercício anterior, você também quer dar suporte a uma abordagem baseada em atributos usando one-class SVM. Você decide extrair dois atributos: primeiro, o tamanho da string e, segundo, uma codificação numérica da primeira letra da string, obtida com a função LabelEncoder() descrita no Capítulo 1. Para garantir uma comparação justa, você vai usar os escores de outlier em um cálculo de AUC. Já foram importados: LabelEncoder(), roc_auc_score() como auc() e OneClassSVM. Os dados estão disponíveis como um data frame do pandas chamado proteins com duas colunas, label e seq, e duas classes, IMMUNE SYSTEM e VIRUS. Um detector LoF ajustado está disponível como lof_detector.
Este exercício faz parte do curso
Projetando Workflows de Machine Learning em Python
Instruções do exercício
- Para uma string
s,len(s)retorna seu tamanho. Aplique isso à colunaseqpara obter uma nova colunalen. - Para uma string
s,list(s)retorna uma lista de seus caracteres. Use isso para extrair a primeira letra de cada sequência e codificá-la usandoLabelEncoder(). - Os escores do LoF estão no atributo
negative_outlier_factor_. Calcule a AUC deles. - Ajuste um SVM de 1 classe a um data frame contendo apenas as colunas
lenefirst. Extraia os escores e avalie tanto os escores do LoF quanto os do SVM usando AUC.
Exercício interativo prático
Experimente este exercício completando este código de exemplo.
# 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))