El Clasificador de Procesos Gaussianos es un algoritmo de aprendizaje de la máquina de clasificación.
Los procesos gausianos son una generalización de la distribución de probabilidad gausiana y pueden utilizarse como base de sofisticados algoritmos no paramétricos de aprendizaje automático para la clasificación y la regresión.
Son un tipo de modelo de núcleo, como los SVM, y a diferencia de éstos, son capaces de predecir probabilidades de pertenencia a una clase altamente calibradas, aunque la elección y configuración del núcleo utilizado en el núcleo del método puede ser un reto.
En este tutorial, descubrirá el algoritmo de aprendizaje de la máquina de clasificación del Clasificador de Procesos Gaussianos.
Después de completar este tutorial, lo sabrás:
- El Clasificador de Procesos Gaussianos es un algoritmo no paramétrico que puede aplicarse a tareas de clasificación binaria.
- Cómo encajar, evaluar y hacer predicciones con el modelo del Clasificador de Procesos Gaussianos con Scikit-Learn.
- Cómo ajustar los hiperparámetros del algoritmo del Clasificador de Procesos Gaussianos en un determinado conjunto de datos.
Empecemos.
Resumen del Tutorial
Este tutorial está dividido en tres partes; son:
- Procesos Gaussianos de Clasificación
- Procesos Gaussianos con Scikit-Learn
- Sintonizar los hiperparámetros de los procesos gausianos
Procesos Gaussianos de Clasificación
Los procesos gausianos, o GP para abreviar, son una generalización de la distribución de probabilidad gausiana (por ejemplo, la función en forma de campana).
Las funciones de distribución de probabilidad gaussianas resumen la distribución de las variables aleatorias, mientras que los procesos gaussianos resumen las propiedades de las funciones, por ejemplo, los parámetros de las funciones. Como tal, se puede pensar en los procesos gausianos como un nivel de abstracción o indirecto por encima de las funciones gausianas.
Un proceso gaussiano es una generalización de la distribución de probabilidad gaussiana. Mientras que una distribución de probabilidad describe variables aleatorias que son escalares o vectores (para las distribuciones multivariantes), un proceso estocástico rige las propiedades de las funciones.
– Página 2, Gaussian Processes for Machine Learning, 2006.
Los procesos gausianos pueden utilizarse como un algoritmo de aprendizaje de máquinas para la clasificación de modelos predictivos.
Los procesos gausianos son un tipo de método de núcleo, como los SVM, aunque son capaces de predecir probabilidades altamente calibradas, a diferencia de los SVM.
Los procesos gausianos requieren la especificación de un núcleo que controle la forma en que los ejemplos se relacionan entre sí; concretamente, define la función de covarianza de los datos. Esto se denomina la función latente o la «molestia«…función.
La función latente f desempeña el papel de una función de molestia: no observamos valores de f en sí (observamos sólo las entradas X y las etiquetas de clase y) y no estamos particularmente interesados en los valores de f …
– Página 40, Gaussian Processes for Machine Learning, 2006.
La forma en que se agrupan los ejemplos usando el núcleo controla cómo el modelo «percibe» los ejemplos, dado que asume que los ejemplos que son «cerrar«…tienen la misma etiqueta de clase.
Por lo tanto, es importante tanto probar diferentes funciones del núcleo para el modelo como diferentes configuraciones para funciones sofisticadas del núcleo.
… una función de covarianza es el ingrediente crucial en un predictor de proceso Gaussiano, ya que codifica nuestras suposiciones sobre la función que deseamos aprender.
– Página 79, Gaussian Processes for Machine Learning, 2006.
También requiere una función de enlace que interprete la representación interna y prediga la probabilidad de pertenencia a una clase. Se puede utilizar la función logística, que permite modelar una distribución de probabilidad binomial para la clasificación binaria.
En el caso de la discriminación binaria, una idea sencilla es convertir el resultado de un modelo de regresión en una probabilidad de clase utilizando una función de respuesta (el inverso de una función de enlace), que «aplasta» su argumento, que puede estar en el dominio (-inf, inf), en el rango [0, 1]garantizando una interpretación probabilística válida.
– Página 35, Gaussian Processes for Machine Learning, 2006.
Los procesos gausianos y los procesos gausianos de clasificación son un tema complejo.
Para saber más vea el texto:
Procesos Gaussianos con Scikit-Learn
El Clasificador de Procesos Gaussianos está disponible en la biblioteca de aprendizaje de la máquina Python de scikit-learn a través de la clase GaussianProcessClassifier.
La clase le permite especificar el núcleo a utilizar mediante el «núcleo«y por defecto a 1 * RBF(1.0), por ejemplo, un núcleo RBF.
... # Definir el modelo modelo = GaussianProcessClassifier(núcleo=1*RBF(1.0)) |
Dado que se especifica un núcleo, el modelo intentará configurar mejor el núcleo para el conjunto de datos de entrenamiento.
Esto se controla mediante el establecimiento de un «optimizador«, el número de iteraciones para el optimizador a través de la «max_iter_predict«, y el número de repeticiones de este proceso de optimización realizado en un intento de superar el óptimo local «n_restarts_optimizer“.
Por defecto, se realiza una sola ejecución de optimización, y ésta puede ser desactivada configurando «Optimizar» a Ninguno.
... # Definir el modelo modelo = GaussianProcessClassifier(optimizador=Ninguno) |
Podemos demostrar el Clasificador de Procesos Gaussianos con un ejemplo trabajado.
Primero, definamos un conjunto de datos de clasificación sintética.
Usaremos la función make_classification() para crear un conjunto de datos con 100 ejemplos, cada uno con 20 variables de entrada.
El ejemplo que figura a continuación crea y resume el conjunto de datos.
# Conjunto de datos de clasificación de pruebas de sklearn.conjuntos de datos importación hacer_clasificación # Definir el conjunto de datos X, y = make_classification(n_muestras=100, n_funciones=20, n_informativo=15, n_redundante=5, estado_aleatorio=1) # resumir el conjunto de datos imprimir(X.forma, y.forma) |
Ejecutando el ejemplo se crea el conjunto de datos y se confirma el número de filas y columnas del conjunto de datos.
Podemos ajustar y evaluar un modelo de Clasificador de Procesos Gaussianos usando la validación cruzada de repetición estratificada k-fold a través de la clase RepeatedStratifiedKFold. Usaremos 10 pliegues y tres repeticiones en el arnés de prueba.
Usaremos la configuración por defecto.
... # Crear el modelo modelo = GaussianProcessClassifier() |
El ejemplo completo de evaluación del modelo del Clasificador de Procesos Gaussianos para la tarea de clasificación binaria sintética se enumera a continuación.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
# Evaluar un modelo clasificador de procesos gaussianos en el conjunto de datos de numpy importación significa de numpy importación std de sklearn.conjuntos de datos importación make_classification de sklearn.model_selection importación puntaje_valor_cruzado de sklearn.model_selection importación RepeatedStratifiedKFold de sklearn.PROCESO_GAUSIANO importación GaussianProcessClassifier # Definir el conjunto de datos X, y = make_classification(n_muestras=100, n_funciones=20, n_informativo=15, n_redundante=5, estado_aleatorio=1) # Definir el modelo modelo = GaussianProcessClassifier() # Definir el método de evaluación del modelo cv = RepeatedStratifiedKFold(n_splits=10, n_repeticiones=3, estado_aleatorio=1) # Evaluar el modelo resultados = puntaje_valor_cruzado(modelo, X, y, puntuación=«exactitud, cv=cv, n_jobs=–1) # Resumir el resultado imprimir(«Precisión media: %.3f (%.3f) % (significa(resultados), std(resultados))) |
La ejecución del ejemplo evalúa el algoritmo del Clasificador de Procesos Gaussianos en el conjunto de datos sintéticos e informa de la precisión media en las tres repeticiones de validación cruzada de 10 veces.
Sus resultados específicos pueden variar dada la naturaleza estocástica del algoritmo de aprendizaje. Considere ejecutar el ejemplo unas cuantas veces.
En este caso, podemos ver que el modelo alcanzó una precisión media de alrededor del 79,0 por ciento.
Precisión media: 0,790 (0,101) |
Podemos decidir usar el Clasificador de Procesos Gaussianos como nuestro modelo final y hacer predicciones sobre nuevos datos.
Esto puede lograrse ajustando el conducto modelo a todos los datos disponibles y llamando al predecir() función pasando en una nueva fila de datos.
Podemos demostrarlo con un ejemplo completo que se enumera a continuación.
# Hacer una predicción con un modelo clasificador de proceso gaussiano en el conjunto de datos de sklearn.conjuntos de datos importación make_classification de sklearn.PROCESO_GAUSIANO importación GaussianProcessClassifier # Definir el conjunto de datos X, y = make_classification(n_muestras=100, n_funciones=20, n_informativo=15, n_redundante=5, estado_aleatorio=1) # Definir el modelo modelo = GaussianProcessClassifier() # Modelo de ajuste modelo.encajar(X, y) # Definir nuevos datos fila = [[2.47475454,0.40165523,1.68081787,2.88940715,0.91704519,–3.07950644,4.39961206,0.72464273,–4.86563631,–6.06338084,–1.22209949,–0.4699618,1.01222748,–0.6899355,–0.53000581,6.86966784,–3.27211075,–6.59044146,–2.21290585,–3.139579] # hacer una predicción yhat = modelo.predecir([[fila]) # resumir la predicción imprimir(Clase prevista: %d’. % yhat) |
Ejecutando el ejemplo se ajusta al modelo y hace una predicción de etiqueta de clase para una nueva fila de datos.
A continuación, podemos ver la configuración de los hiperparámetros del modelo.
Sintonizar los hiperparámetros de los procesos gausianos
Los hiperparámetros del método del Clasificador de Procesos Gaussianos deben ser configurados para su conjunto de datos específico.
Quizás el hiperparámetro más importante es el núcleo controlado a través de la «núcleo«argumento». La biblioteca de aprendizaje de ciencias proporciona muchos núcleos incorporados que pueden ser utilizados.
Tal vez algunos de los ejemplos más comunes incluyen:
- RBF
- DotProduct
- Matern
- RationalQuadratic
- WhiteKernel
Puedes aprender más sobre los núcleos que ofrece la biblioteca aquí:
Evaluaremos el rendimiento del Clasificador de Procesos Gaussianos con cada uno de estos núcleos comunes, usando argumentos por defecto.
... # Definir la cuadrícula cuadrícula = dict() cuadrícula[[«Núcleo] = [[1*RBF(), 1*DotProduct(), 1*Matern(), 1*RationalQuadratic(), 1*WhiteKernel()] |
El siguiente ejemplo lo demuestra utilizando la clase GridSearchCV con una cuadrícula de valores que hemos definido.
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 |
# Núcleo de búsqueda en cuadrícula para el clasificador de procesos gaussiano de sklearn.conjuntos de datos importación make_classification de sklearn.model_selection importación GridSearchCV de sklearn.model_selection importación RepeatedStratifiedKFold de sklearn.PROCESO_GAUSIANO importación GaussianProcessClassifier de sklearn.PROCESO_GAUSIANO.núcleos importación RBF de sklearn.PROCESO_GAUSIANO.núcleos importación DotProduct de sklearn.PROCESO_GAUSIANO.núcleos importación Matern de sklearn.PROCESO_GAUSIANO.núcleos importación RationalQuadratic de sklearn.PROCESO_GAUSIANO.núcleos importación WhiteKernel # Definir el conjunto de datos X, y = make_classification(n_muestras=100, n_funciones=20, n_informativo=15, n_redundante=5, estado_aleatorio=1) # Definir el modelo modelo = GaussianProcessClassifier() # Definir el método de evaluación del modelo cv = RepeatedStratifiedKFold(n_splits=10, n_repeticiones=3, estado_aleatorio=1) # Definir la cuadrícula cuadrícula = dict() cuadrícula[[«Núcleo] = [[1*RBF(), 1*DotProduct(), 1*Matern(), 1*RationalQuadratic(), 1*WhiteKernel()] # Definir la búsqueda busca en = GridSearchCV(modelo, cuadrícula, puntuación=«exactitud, cv=cv, n_jobs=–1) # realizar la búsqueda resultados = busca en.encajar(X, y) # Resumir mejor imprimir(«La mejor precisión media: %.3f % resultados.mejor_puntuación_) imprimir(Mejor configuración: %s’ % resultados.best_params_) # resumir todo significa = resultados.cv_resultados_[[‘mean_test_score’] params = resultados.cv_resultados_[[«params] para significa, param en zip(significa, params): imprimir(«>%.3f con: %r» % (significa, param)) |
Al ejecutar el ejemplo se evaluará cada combinación de configuraciones utilizando una validación cruzada repetida.
Sus resultados específicos pueden variar dada la naturaleza estocástica del algoritmo de aprendizaje. Intente ejecutar el ejemplo unas cuantas veces.
En este caso, podemos ver que el RationalQuadratic El núcleo alcanzó un aumento en el rendimiento con una precisión de alrededor del 91,3 por ciento en comparación con el 79,0 por ciento alcanzado con el núcleo RBF en la sección anterior.
Mejor precisión media: 0,913 Mejor configuración: {‘kernel’: 1**2 * RationalQuadratic(alpha=1, length_scale=1)} >0.790 con: {‘kernel’: 1**2 * RBF(length_scale=1)} >0.800 con: {‘kernel’: 1**2 * DotProduct(sigma_0=1)} >0.830 con: {‘kernel’: 1**2 * Matern(length_scale=1, nu=1.5)} >0,913 con: {‘kernel’: 1**2 * RationalQuadratic(alpha=1, length_scale=1)} >0.510 con: {‘kernel’: 1**2 * WhiteKernel(noise_level=1)} |
Más lecturas
Esta sección proporciona más recursos sobre el tema si desea profundizar en él.
Libros
APIs
Artículos
Resumen
En este tutorial, descubriste el algoritmo de aprendizaje de la máquina de clasificación de los procesos gausianos.
Específicamente, aprendiste:
- El Clasificador de Procesos Gaussianos es un algoritmo no paramétrico que puede aplicarse a tareas de clasificación binaria.
- Cómo encajar, evaluar y hacer predicciones con el modelo del Clasificador de Procesos Gaussianos con Scikit-Learn.
- Cómo ajustar los hiperparámetros del algoritmo del Clasificador de Procesos Gaussianos en un determinado conjunto de datos.
¿Tiene alguna pregunta?
Haga sus preguntas en los comentarios de abajo y haré lo posible por responder.