ComenzarEmpieza gratis

Juntándolo todo

Además del pipeline de detección de anomalías basado en distancias que creaste en el ejercicio anterior, también quieres admitir uno basado en características con un SVM de una clase. Decides extraer dos características: primero, la longitud de la cadena y, segundo, una codificación numérica de la primera letra de la cadena, obtenida con la función LabelEncoder() descrita en el Capítulo 1. Para asegurar una comparación justa, introducirás las puntuaciones de atípicos en un cálculo de AUC. Ya se han importado: LabelEncoder(), roc_auc_score() como auc() y OneClassSVM. Los datos están disponibles como un pandas data frame llamado proteins con dos columnas, label y seq, y dos clases, IMMUNE SYSTEM y VIRUS. Hay un detector LoF ajustado disponible como lof_detector.

Este ejercicio forma parte del curso

Diseño de flujos de trabajo de Machine Learning en Python

Ver curso

Instrucciones del ejercicio

  • Para una cadena s, len(s) devuelve su longitud. Aplícalo a la columna seq para obtener una nueva columna len.
  • Para una cadena s, list(s) devuelve una lista de sus caracteres. Úsalo para extraer la primera letra de cada secuencia y codifícala con LabelEncoder().
  • Las puntuaciones de LoF están en el atributo negative_outlier_factor_. Calcula su AUC.
  • Ajusta un SVM de 1 clase a un data frame con solo las columnas len y first. Extrae las puntuaciones y evalúa tanto las puntuaciones de LoF como las del SVM usando AUC.

Ejercicio interactivo práctico

Prueba este ejercicio y completa el código de muestra.

# 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 y ejecutar código