ComeçarComece de graça

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

Ver curso

Instruções do exercício

  • Para uma string s, len(s) retorna seu tamanho. Aplique isso à coluna seq para obter uma nova coluna len.
  • 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 usando LabelEncoder().
  • 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 len e first. 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))
Editar e executar o código