La presencia de valores atípicos en una clasificación o conjunto de datos de regresión puede dar lugar a un ajuste deficiente y a un menor rendimiento de los modelos de predicción.
Identificar y eliminando los valores atípicos es un desafío con métodos estadísticos simples para la mayoría de los conjuntos de datos de aprendizaje automático, dado el gran número de variables de entrada. En cambio, los métodos de detección automática de valores atípicos pueden utilizarse en el proceso de modelización y compararse, al igual que otras transformaciones de preparación de datos que pueden aplicarse al conjunto de datos.
En este tutorial, descubrirá cómo utilizar la detección y eliminación automática de valores atípicos para mejorar el rendimiento del modelado predictivo del aprendizaje de la máquina.
Después de completar este tutorial, lo sabrás:
- Los modelos de detección automática de valores atípicos ofrecen una alternativa a las técnicas estadísticas con un mayor número de variables de entrada con interrelaciones complejas y desconocidas.
- Cómo aplicar correctamente la detección y eliminación automática de valores atípicos al conjunto de datos de entrenamiento sólo para evitar la fuga de datos.
- Cómo evaluar y comparar las tuberías de modelado predictivo con los valores atípicos eliminados del conjunto de datos de entrenamiento.
Descubre la limpieza de datos, la selección de características, la transformación de datos, la reducción de la dimensionalidad y mucho más en mi nuevo libro, con 30 tutoriales paso a paso y el código fuente completo en Python.
Empecemos.
Resumen del Tutorial
Este tutorial está dividido en tres partes; son:
- Detección y eliminación de valores atípicos
- Conjunto de datos y línea de base de rendimiento
- Conjunto de datos sobre la regresión del precio de la vivienda
- Desempeño del modelo de base
- Detección automática de valores atípicos
- Bosque de aislamiento
- Determinante de covarianza mínima
- Factor atípico local
- SVM de una clase
Detección y eliminación de valores atípicos
Los valores atípicos son observaciones en un conjunto de datos que no encajan de alguna manera.
Quizás el tipo más común o familiar de atípico es el de las observaciones que están lejos del resto de las observaciones o del centro de masa de las observaciones.
Esto es fácil de entender cuando tenemos una o dos variables y podemos visualizar los datos como un histograma o un gráfico de dispersión, aunque se vuelve muy difícil cuando tenemos muchas variables de entrada que definen un espacio de características de entrada de alta dimensión.
En este caso, pueden desglosarse métodos estadísticos sencillos para identificar los valores atípicos, como los métodos que utilizan desviaciones estándar o el rango intercuartílico.
Puede ser importante identificar y eliminar los valores atípicos de los datos cuando se entrenan los algoritmos de aprendizaje de la máquina para el modelado predictivo.
Los valores atípicos pueden sesgar las medidas estadísticas y las distribuciones de datos, proporcionando una representación engañosa de los datos y relaciones subyacentes. La eliminación de los valores atípicos de los datos de capacitación antes de la modelización puede dar lugar a un mejor ajuste de los datos y, a su vez, a predicciones más hábiles.
Afortunadamente, hay una variedad de métodos automáticos basados en modelos para identificar los valores atípicos en los datos de entrada. Es importante que cada método se aproxime a la definición de un valor atípico de manera ligeramente diferente, proporcionando enfoques alternativos para preparar un conjunto de datos de capacitación que pueda ser evaluado y comparado, al igual que cualquier otro paso de preparación de datos en un proceso de modelización.
Antes de sumergirnos en los métodos de detección de atípicos automáticos, seleccionemos primero un conjunto de datos de aprendizaje de máquina estándar que podamos usar como base para nuestra investigación.
¿Quieres empezar a preparar los datos?
Toma mi curso intensivo gratuito de 7 días por correo electrónico ahora (con código de muestra).
Haga clic para inscribirse y también para obtener una versión gratuita del curso en formato PDF.
Descargue su minicurso GRATUITO
Conjunto de datos y línea de base de rendimiento
En esta sección, primero seleccionaremos un conjunto de datos estándar de aprendizaje de la máquina y estableceremos una línea de base en el rendimiento de este conjunto de datos.
Esto proporcionará el contexto para explorar el método de preparación de datos de identificación y eliminación de valores atípicos en la próxima sección.
Conjunto de datos sobre la regresión del precio de la vivienda
Usaremos el conjunto de datos de regresión del precio de la casa.
Este conjunto de datos tiene 13 variables de entrada que describen las propiedades de la casa y el suburbio y requiere la predicción del valor medio de las casas del suburbio en miles de dólares.
Puedes aprender más sobre el conjunto de datos aquí:
No hay necesidad de descargar el conjunto de datos ya que lo descargaremos automáticamente como parte de nuestros ejemplos de trabajo.
Abrir el conjunto de datos y revisar los datos en bruto. Las primeras filas de datos se enumeran a continuación.
Podemos ver que se trata de un problema de modelización predictiva de regresión con variables de entrada numérica, cada una de las cuales tiene diferentes escalas.
0.00632,18.00,2.310,0,0.5380,6.5750,65.20,4.0900,1,296.0,15.30,396.90,4.98,24.00 0.02731,0.00,7.070,0,0.4690,6.4210,78.90,4.9671,2,242.0,17.80,396.90,9.14,21.60 0.02729,0.00,7.070,0,0.4690,7.1850,61.10,4.9671,2,242.0,17.80,392.83,4.03,34.70 0.03237,0.00,2.180,0,0.4580,6.9980,45.80,6.0622,3,222.0,18.70,394.63,2.94,33.40 0.06905,0.00,2.180,0,0.4580,7.1470,54.20,6.0622,3,222.0,18.70,396.90,5.33,36.20 … |
El conjunto de datos tiene muchas variables de entrada numérica que tienen relaciones desconocidas y complejas. No sabemos si existen valores atípicos en este conjunto de datos, aunque podemos suponer que algunos valores atípicos pueden estar presentes.
El siguiente ejemplo carga el conjunto de datos y lo divide en las columnas de entrada y salida, lo divide en conjuntos de datos de trenes y pruebas, y luego resume las formas de los conjuntos de datos.
# Cargar y resumir el conjunto de datos de pandas importación read_csv de sklearn.model_selection importación prueba_de_trenes_split # Cargar el conjunto de datos url = ‘https://raw.githubusercontent.com/jbrownlee/Datasets/master/housing.csv’ df = read_csv(url, encabezado=Ninguno) # Recuperar la matriz datos = df.valores # Dividido en elementos de entrada y salida X, y = datos[[:, :–1], datos[[:, –1] # resumir la forma del conjunto de datos imprimir(X.forma, y.forma) # Dividido en tren y conjuntos de prueba X_tren, X_test, y_tren, y_test = prueba_de_trenes_split(X, y, tamaño_de_prueba=0.33, estado_aleatorio=1) # Resumir la forma del tren y los juegos de prueba imprimir(X_tren.forma, X_test.forma, y_tren.forma, y_test.forma) |
Ejecutando el ejemplo, podemos ver que el conjunto de datos se cargó correctamente y que hay 506 filas de datos con 13 variables de entrada y una sola variable objetivo.
El conjunto de datos se divide en conjuntos de entrenamiento y pruebas con 339 filas utilizadas para el entrenamiento de modelos y 167 para la evaluación de modelos.
(506, 13) (506,) (339, 13) (167, 13) (339,) (167,) |
A continuación, vamos a evaluar un modelo en este conjunto de datos y establecer una línea de base en el rendimiento.
Desempeño del modelo de base
Se trata de un problema de modelación predictiva de regresión, lo que significa que predeciremos un valor numérico. Todas las variables de entrada son también numéricas.
En este caso, ajustaremos un algoritmo de regresión lineal y evaluaremos el rendimiento del modelo entrenando el modelo en el conjunto de datos de la prueba y haciendo una predicción sobre los datos de la prueba y evaluaremos las predicciones utilizando el error medio absoluto (MAE).
El ejemplo completo de la evaluación de un modelo de regresión lineal en el conjunto de datos se enumera a continuación.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
# Evaluar el modelo en el conjunto de datos en bruto de pandas importación read_csv de sklearn.model_selection importación prueba_de_trenes_split de sklearn.modelo_lineal importación LinearRegression de sklearn.métrica importación error_absoluto_medio # Cargar el conjunto de datos url = ‘https://raw.githubusercontent.com/jbrownlee/Datasets/master/housing.csv’ df = read_csv(url, encabezado=Ninguno) # Recuperar la matriz datos = df.valores # Dividido en elementos de entrada y salida X, y = datos[[:, :–1], datos[[:, –1] # Dividido en tren y conjuntos de prueba X_tren, X_test, y_tren, y_test = prueba_de_trenes_split(X, y, tamaño_de_prueba=0.33, estado_aleatorio=1) # Encaja con el modelo modelo = LinearRegression() modelo.encajar(X_tren, y_tren) # Evaluar el modelo yhat = modelo.predecir(X_test) # Evaluar las predicciones mae = error_absoluto_medio(y_test, yhat) imprimir(MAE: %.3f % mae) |
Ejecutando el ejemplo se ajusta y evalúa el modelo, luego reporta el MAE.
Sus resultados específicos pueden diferir dada la naturaleza estocástica del algoritmo de aprendizaje, el procedimiento de evaluación, y/o las diferencias de precisión entre los sistemas. Intente ejecutar el ejemplo unas cuantas veces.
En este caso, podemos ver que el modelo alcanzó un MAE de alrededor de 3.417. Esto proporciona una línea de base en el rendimiento con la que podemos comparar diferentes procedimientos de identificación y eliminación de valores atípicos.
A continuación, podemos intentar eliminar los valores atípicos del conjunto de datos de entrenamiento.
Detección automática de valores atípicos
La biblioteca de aprendizaje de ciencias ofrece una serie de métodos automáticos incorporados para identificar valores atípicos en los datos.
En esta sección, revisaremos cuatro métodos y compararemos su rendimiento en el conjunto de datos del precio de la vivienda.
Cada método se definirá y luego se ajustará al conjunto de datos de entrenamiento. El modelo de ajuste predecirá entonces qué ejemplos del conjunto de datos de entrenamiento son atípicos y cuáles no (los llamados «inliers»). Los valores atípicos se eliminarán del conjunto de datos de capacitación, y el modelo se ajustará a los ejemplos restantes y se evaluará en todo el conjunto de datos de la prueba.
Sería inválido ajustar el método de detección de valores atípicos en todo el conjunto de datos de la formación, ya que esto daría lugar a la fuga de datos. Es decir, el modelo tendría acceso a los datos (o a la información sobre los datos) en el conjunto de pruebas no utilizado para entrenar el modelo. Esto puede dar lugar a una estimación optimista del rendimiento del modelo.
Podríamos intentar detectar valores atípicos en «nuevos datos«como el conjunto de pruebas antes de hacer una predicción, pero entonces ¿qué hacemos si se detectan valores atípicos?
Un enfoque podría ser devolver un «Ninguno«indicando que el modelo es incapaz de hacer una predicción sobre esos casos atípicos. Esta podría ser una interesante extensión a explorar que puede ser apropiada para su proyecto.
Bosque de aislamiento
El Bosque de Aislamiento, o iForest para abreviar, es un algoritmo de detección de anomalías basado en los árboles.
Se basa en el modelado de los datos normales de tal manera que se aíslan las anomalías que son pocas en número y diferentes en el espacio de las características.
… nuestro método propuesto aprovecha las propiedades cuantitativas de dos anomalías: i) son la minoría que consiste en menos instancias y ii) tienen valores de atributo muy diferentes a los de las instancias normales.
– Bosque de Aislamiento, 2008.
La biblioteca de aprendizaje de ciencias proporciona una implementación de Bosque de Aislamiento en la clase de Bosque de Aislamiento.
Tal vez el hiperparámetro más importante del modelo es el «contaminación«que se utiliza para ayudar a estimar el número de valores atípicos en el conjunto de datos. Este es un valor entre 0,0 y 0,5 y por defecto se establece en 0,1.
... # Identificar los valores atípicos en el conjunto de datos de entrenamiento iso = Bosque de Aislamiento(contaminación=0.1) yhat = iso.fit_predict(X_tren) |
Una vez identificados, podemos eliminar los valores atípicos del conjunto de datos de entrenamiento.
... # Selecciona todas las filas que no sean atípicas máscara = yhat != –1 X_tren, y_tren = X_tren[[máscara, :], y_tren[[máscara] |
Enlazando todo esto, el ejemplo completo de la evaluación del modelo lineal en el conjunto de datos de la vivienda con los valores atípicos identificados y eliminados con el bosque de aislamiento se enumera a continuación.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
# Evaluar el rendimiento del modelo con los valores atípicos eliminados usando el bosque de aislamiento de pandas importación read_csv de sklearn.model_selection importación prueba_de_trenes_split de sklearn.modelo_lineal importación LinearRegression de sklearn.conjunto importación Bosque de Aislamiento de sklearn.métrica importación error_absoluto_medio # Cargar el conjunto de datos url = ‘https://raw.githubusercontent.com/jbrownlee/Datasets/master/housing.csv’ df = read_csv(url, encabezado=Ninguno) # Recuperar la matriz datos = df.valores # Dividido en elementos de entrada y salida X, y = datos[[:, :–1], datos[[:, –1] # Dividido en tren y conjuntos de prueba X_tren, X_test, y_tren, y_test = prueba_de_trenes_split(X, y, tamaño_de_prueba=0.33, estado_aleatorio=1) # Resumir la forma del conjunto de datos de entrenamiento imprimir(X_tren.forma, y_tren.forma) # Identificar los valores atípicos en el conjunto de datos de entrenamiento iso = Bosque de Aislamiento(contaminación=0.1) yhat = iso.fit_predict(X_tren) # Selecciona todas las filas que no sean atípicas máscara = yhat != –1 X_tren, y_tren = X_tren[[máscara, :], y_tren[[máscara] # Resumir la forma del conjunto de datos de entrenamiento actualizado imprimir(X_tren.forma, y_tren.forma) # Encaja con el modelo modelo = LinearRegression() modelo.encajar(X_tren, y_tren) # Evaluar el modelo yhat = modelo.predecir(X_test) # Evaluar las predicciones mae = error_absoluto_medio(y_test, yhat) imprimir(MAE: %.3f % mae) |
Ejecutando el ejemplo se ajusta y evalúa el modelo, luego reporta el MAE.
Sus resultados específicos pueden diferir dada la naturaleza estocástica del algoritmo de aprendizaje, el procedimiento de evaluación, y/o las diferencias de precisión entre los sistemas. Intente ejecutar el ejemplo unas cuantas veces.
En este caso, podemos ver que ese modelo identificó y eliminó 34 valores atípicos y logró un MAE de alrededor de 3,189, una mejora con respecto a la línea de base que alcanzó una puntuación de alrededor de 3,417.
(339, 13) (339,) (305, 13) (305,) MAE: 3.189 |
Determinante de covarianza mínima
Si las variables de entrada tienen una distribución gaussiana, entonces se pueden utilizar métodos estadísticos simples para detectar los valores atípicos.
Por ejemplo, si el conjunto de datos tiene dos variables de entrada y ambas son gaussianas, entonces el espacio de características forma un gaussiano multidimensional y el conocimiento de esta distribución puede utilizarse para identificar valores alejados de la distribución.
Este enfoque puede generalizarse definiendo una hiperesfera (elipsoide) que cubra los datos normales, y los datos que queden fuera de esta forma se consideran un atípico. Una aplicación eficiente de esta técnica para datos multivariantes se conoce como el Determinante de Covarianza Mínima, o MCD para abreviar.
El método del Determinante de Covarianza Mínima (MCD) es un estimador muy robusto de localización y dispersión multivariada, para el cual se dispone de un algoritmo rápido. […] También sirve como una herramienta conveniente y eficiente para la detección de valores atípicos.
– Determinante de Covarianza Mínima y Extensiones, 2017.
La biblioteca de aprendizaje de ciencias proporciona acceso a este método a través de la clase EllipticEnvelope.
Proporciona la «contaminación«que define la proporción de valores atípicos que se espera observar en la práctica. En este caso, lo fijaremos en un valor de 0,01, encontrado con un poco de ensayo y error.
... # Identificar los valores atípicos en el conjunto de datos de entrenamiento ee = EllipticEnvelope(contaminación=0.01) yhat = ee.fit_predict(X_tren) |
Una vez identificados, los valores atípicos pueden ser eliminados del conjunto de datos de entrenamiento como hicimos en el ejemplo anterior.
A continuación se presenta un ejemplo completo de la identificación y eliminación de valores atípicos del conjunto de datos de la vivienda mediante el método de la envoltura elíptica (determinante de la covariante mínima).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
# Evaluar el rendimiento del modelo con los valores atípicos eliminados usando una envoltura elíptica de pandas importación read_csv de sklearn.model_selection importación prueba_de_trenes_split de sklearn.modelo_lineal importación LinearRegression de sklearn.covarianza importación EllipticEnvelope de sklearn.métrica importación error_absoluto_medio # Cargar el conjunto de datos url = ‘https://raw.githubusercontent.com/jbrownlee/Datasets/master/housing.csv’ df = read_csv(url, encabezado=Ninguno) # Recuperar la matriz datos = df.valores # Dividido en elementos de entrada y salida X, y = datos[[:, :–1], datos[[:, –1] # Dividido en tren y conjuntos de prueba X_tren, X_test, y_tren, y_test = prueba_de_trenes_split(X, y, tamaño_de_prueba=0.33, estado_aleatorio=1) # Resumir la forma del conjunto de datos de entrenamiento imprimir(X_tren.forma, y_tren.forma) # Identificar los valores atípicos en el conjunto de datos de entrenamiento ee = EllipticEnvelope(contaminación=0.01) yhat = ee.fit_predict(X_tren) # Selecciona todas las filas que no sean atípicas máscara = yhat != –1 X_tren, y_tren = X_tren[[máscara, :], y_tren[[máscara] # Resumir la forma del conjunto de datos de entrenamiento actualizado imprimir(X_tren.forma, y_tren.forma) # Encaja con el modelo modelo = LinearRegression() modelo.encajar(X_tren, y_tren) # Evaluar el modelo yhat = modelo.predecir(X_test) # Evaluar las predicciones mae = error_absoluto_medio(y_test, yhat) imprimir(MAE: %.3f % mae) |
Ejecutando el ejemplo se ajusta y evalúa el modelo, luego reporta el MAE.
Sus resultados específicos pueden diferir dada la naturaleza estocástica del algoritmo de aprendizaje, el procedimiento de evaluación, y/o las diferencias de precisión entre los sistemas. Intente ejecutar el ejemplo unas cuantas veces.
En este caso, podemos ver que el método de la envoltura elíptica identificó y eliminó sólo 4 valores atípicos, lo que dio lugar a una caída del MAE de 3.417 con la línea de base a 3.388.
(339, 13) (339,) (335, 13) (335,) MAE: 3.388 |
Factor atípico local
Un enfoque sencillo para identificar los valores atípicos es localizar los ejemplos que están lejos de los otros ejemplos en el espacio de las características.
Esto puede funcionar bien para espacios de características con baja dimensionalidad (pocas características), aunque puede llegar a ser menos fiable a medida que aumenta el número de características, lo que se conoce como la maldición de la dimensionalidad.
El factor atípico local, o LOF para abreviar, es una técnica que intenta aprovechar la idea de los vecinos más cercanos para la detección de atípicos. A cada ejemplo se le asigna una puntuación de cuán aislado o cuán probable es que sea un valor atípico basado en el tamaño de su vecindario local. Los ejemplos con la mayor puntuación tienen más probabilidades de ser atípicos.
Introducimos un atípico local (LOF) para cada objeto del conjunto de datos, indicando su grado de atípico.
– LOF: Identificar los valores atípicos locales basados en la densidad, 2000.
La biblioteca de aprendizaje de ciencias proporciona una implementación de este enfoque en la clase de LocalOutlierFactor.
El modelo proporciona la «contaminaciónEl argumento de la «Tabla de la Tierra», es decir, el porcentaje esperado de valores atípicos en el conjunto de datos, se indicará y será por defecto de 0,1.
... # Identificar los valores atípicos en el conjunto de datos de entrenamiento lof = LocalOutlierFactor() yhat = lof.fit_predict(X_tren) |
A continuación se presenta un ejemplo completo de la identificación y eliminación de valores atípicos del conjunto de datos de la vivienda mediante el método del factor atípico local.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
# Evaluar el rendimiento del modelo con los valores atípicos eliminados usando el factor atípico local de pandas importación read_csv de sklearn.model_selection importación prueba_de_trenes_split de sklearn.modelo_lineal importación LinearRegression de sklearn.vecinos importación LocalOutlierFactor de sklearn.métrica importación error_absoluto_medio # Cargar el conjunto de datos url = ‘https://raw.githubusercontent.com/jbrownlee/Datasets/master/housing.csv’ df = read_csv(url, encabezado=Ninguno) # Recuperar la matriz datos = df.valores # Dividido en elementos de entrada y salida X, y = datos[[:, :–1], datos[[:, –1] # Dividido en tren y conjuntos de prueba X_tren, X_test, y_tren, y_test = prueba_de_trenes_split(X, y, tamaño_de_prueba=0.33, estado_aleatorio=1) # Resumir la forma del conjunto de datos de entrenamiento imprimir(X_tren.forma, y_tren.forma) # Identificar los valores atípicos en el conjunto de datos de entrenamiento lof = LocalOutlierFactor() yhat = lof.fit_predict(X_tren) # Selecciona todas las filas que no sean atípicas máscara = yhat != –1 X_tren, y_tren = X_tren[[máscara, :], y_tren[[máscara] # Resumir la forma del conjunto de datos de entrenamiento actualizado imprimir(X_tren.forma, y_tren.forma) # Encaja con el modelo modelo = LinearRegression() modelo.encajar(X_tren, y_tren) # Evaluar el modelo yhat = modelo.predecir(X_test) # Evaluar las predicciones mae = error_absoluto_medio(y_test, yhat) imprimir(MAE: %.3f % mae) |
Ejecutando el ejemplo se ajusta y evalúa el modelo, luego reporta el MAE.
Sus resultados específicos pueden diferir dada la naturaleza estocástica del algoritmo de aprendizaje, el procedimiento de evaluación, y/o las diferencias de precisión entre los sistemas. Intente ejecutar el ejemplo unas cuantas veces.
En este caso, podemos ver que el método del factor atípico local identificó y eliminó 34 valores atípicos, el mismo número que el bosque de aislamiento, lo que dio lugar a una disminución del MAE de 3.417 con la línea de base a 3.356. Mejor, pero no tan bueno como el bosque de aislamiento, lo que sugiere que se identificó y eliminó un conjunto diferente de valores atípicos.
(339, 13) (339,) (305, 13) (305,) MAE: 3.356 |
SVM de una clase
El algoritmo de la máquina de vectores de apoyo, o SVM, desarrollado inicialmente para la clasificación binaria, puede utilizarse para la clasificación de una clase.
Cuando se modela una clase, el algoritmo captura la densidad de la clase mayoritaria y clasifica los ejemplos de los extremos de la función de densidad como valores atípicos. Esta modificación de la SVM se denomina SVM de una clase.
… un algoritmo que computa una función binaria que se supone que captura regiones en el espacio de entrada donde vive la densidad de probabilidad (su soporte), es decir, una función tal que la mayoría de los datos vivirán en la región donde la función es distinta de cero.
– Estimación del soporte de una distribución de alta dimensión, 2001.
Aunque el SVM es un algoritmo de clasificación y el SVM de una clase también es un algoritmo de clasificación, puede utilizarse para descubrir valores atípicos en los datos de entrada tanto para los conjuntos de datos de regresión como de clasificación.
La biblioteca de aprendizaje de ciencias proporciona una implementación del SVM de una clase en la clase OneClassSVM.
La clase proporciona la «nu«que especifica la proporción aproximada de valores atípicos en el conjunto de datos, que por defecto es de 0,1. En este caso, lo fijaremos en 0,01, encontrado con un poco de prueba y error.
... # Identificar los valores atípicos en el conjunto de datos de entrenamiento ee = OneClassSVM(nu=0.01) yhat = ee.fit_predict(X_tren) |
A continuación se presenta un ejemplo completo de la identificación y eliminación de valores atípicos del conjunto de datos de la vivienda mediante el método de SVM de una clase.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
# Evaluar el rendimiento del modelo con los valores atípicos eliminados usando un SVM de una clase de pandas importación read_csv de sklearn.model_selection importación prueba_de_trenes_split de sklearn.modelo_lineal importación LinearRegression de sklearn.svm importación OneClassSVM de sklearn.métrica importación error_absoluto_medio # Cargar el conjunto de datos url = ‘https://raw.githubusercontent.com/jbrownlee/Datasets/master/housing.csv’ df = read_csv(url, encabezado=Ninguno) # Recuperar la matriz datos = df.valores # Dividido en elementos de entrada y salida X, y = datos[[:, :–1], datos[[:, –1] # Dividido en tren y conjuntos de prueba X_tren, X_test, y_tren, y_test = prueba_de_trenes_split(X, y, tamaño_de_prueba=0.33, estado_aleatorio=1) # Resumir la forma del conjunto de datos de entrenamiento imprimir(X_tren.forma, y_tren.forma) # Identificar los valores atípicos en el conjunto de datos de entrenamiento ee = OneClassSVM(nu=0.01) yhat = ee.fit_predict(X_tren) # Selecciona todas las filas que no sean atípicas máscara = yhat != –1 X_tren, y_tren = X_tren[[máscara, :], y_tren[[máscara] # Resumir la forma del conjunto de datos de entrenamiento actualizado imprimir(X_tren.forma, y_tren.forma) # Encaja con el modelo modelo = LinearRegression() modelo.encajar(X_tren, y_tren) # Evaluar el modelo yhat = modelo.predecir(X_test) # Evaluar las predicciones mae = error_absoluto_medio(y_test, yhat) imprimir(MAE: %.3f % mae) |
Ejecutando el ejemplo se ajusta y evalúa el modelo, luego reporta el MAE.
Sus resultados específicos pueden diferir dada la naturaleza estocástica del algoritmo de aprendizaje, el procedimiento de evaluación, y/o las diferencias de precisión entre los sistemas. Intente ejecutar el ejemplo unas cuantas veces.
En este caso, podemos ver que sólo se identificaron y eliminaron tres valores atípicos y el modelo alcanzó un MAE de alrededor de 3.431, que no es mejor que el modelo de referencia que alcanzó 3.417. Tal vez se pueda lograr un mejor rendimiento con un mayor ajuste.
(339, 13) (339,) (336, 13) (336,) MAE: 3.431 |