El Centroide más cercano es un algoritmo de clasificación lineal de aprendizaje de máquinas.
Se trata de predecir una etiqueta de clase para los nuevos ejemplos en función del centroide de clase más cercano al ejemplo del conjunto de datos de entrenamiento.
El Centroides encogidos más cercanos El algoritmo es una extensión que implica el desplazamiento de los centros de las clases hacia el centro de todo el conjunto de datos de entrenamiento y la eliminación de las variables de entrada que son menos útiles para discriminar las clases.
Como tal, el algoritmo del Centroide más cercano realiza una forma automática de selección de características, lo que lo hace apropiado para conjuntos de datos con un gran número de variables de entrada.
En este tutorial, descubrirás el algoritmo de aprendizaje de la máquina de clasificación de los centros encogidos más cercanos.
Después de completar este tutorial, lo sabrás:
- El centroide encogido más cercano es un simple algoritmo de aprendizaje lineal de la máquina para la clasificación.
- Cómo encajar, evaluar y hacer predicciones con el modelo de Centroides Encogidos Más Cercanos con Scikit-Learn.
- Cómo sintonizar los hiperparámetros del algoritmo del Centroide Encogido más Cercano en un determinado conjunto de datos.
Empecemos.
Resumen del Tutorial
Este tutorial está dividido en tres partes; son:
- Algoritmo del Centroides más cercano
- Centroides más cercanos con Scikit-Learn
- Sintonización de los hiperparámetros del centroide más cercanos
Algoritmo del Centroides más cercano
El Centroide más cercano es un algoritmo de aprendizaje de la máquina de clasificación.
El algoritmo implica primero resumir el conjunto de datos de entrenamiento en un conjunto de centroides (centros), y luego usar los centroides para hacer predicciones para nuevos ejemplos.
Para cada clase, el centroide de los datos se encuentra tomando el valor medio de cada predictor (por clase) en el conjunto de entrenamiento. El centroide general se calcula utilizando los datos de todas las clases.
– Página 307, Applied Predictive Modeling, 2013.
Un centroide es el centro geométrico de una distribución de datos, como la media. En múltiples dimensiones, este sería el valor medio a lo largo de cada dimensión, formando un punto de centro de la distribución a través de cada variable.
El algoritmo de los centrosides más cercanos asume que los centrosides en el espacio de características de entrada son diferentes para cada etiqueta del objetivo. Los datos de entrenamiento se dividen en grupos por etiqueta de clase, luego se calcula el centroide de cada grupo de datos. Cada centroide es simplemente el valor medio de cada una de las variables de entrada. Si hay dos clases, entonces se calculan dos centrosides o puntos; tres clases dan tres centrosides, y así sucesivamente.
Los centroides representan entonces el «modelo.” Con nuevos ejemplos, como los del conjunto de pruebas o los nuevos datos, se calcula la distancia entre una determinada fila de datos y cada centroide y se utiliza el centroide más cercano para asignar una etiqueta de clase al ejemplo.
Las medidas de distancia, como la distancia euclidiana, se utilizan para los datos numéricos o la distancia de martillo para los datos categóricos, en cuyo caso la mejor práctica es escalar las variables de entrada mediante la normalización o la estandarización antes de entrenar el modelo. Esto se hace para asegurar que las variables de entrada con valores grandes no dominen el cálculo de la distancia.
Una extensión del método del centroide más cercano para la clasificación es encoger los centros de cada variable de entrada hacia el centroide de todo el conjunto de datos de entrenamiento. Las variables que se reducen al valor del centroide de los datos pueden entonces eliminarse, ya que no ayudan a discriminar entre las etiquetas de clase.
Como tal, la cantidad de contracción aplicada a los centroides es un hiperparámetro que puede ajustarse para el conjunto de datos y utilizarse para realizar una forma automática de selección de características. Por lo tanto, es apropiado para un conjunto de datos con un gran número de variables de entrada, algunas de las cuales pueden ser irrelevantes o ruidosas.
Por consiguiente, el modelo centroide encogido más cercano también realiza la selección de características durante el proceso de entrenamiento del modelo.
– Página 307, Applied Predictive Modeling, 2013.
Este enfoque se conoce como «Centroides encogidos más cercanos«y fue descrito por primera vez por Robert Tibshirani y otros en su artículo de 2002 titulado «Diagnóstico de múltiples tipos de cáncer por centros de expresión genética reducidos».
Centroides más cercanos con Scikit-Learn
El Centroide encogido más cercano está disponible en la biblioteca de aprendizaje de la máquina de Python a través de la clase del Centroide más cercano.
La clase permite la configuración de la métrica de distancia usada en el algoritmo a través de la «métrico» argumento, que por defecto eseuclidiano…para la métrica de la distancia euclidiana.
Esto puede ser cambiado a otras métricas incorporadas como ‘manhattan.’
... # Crear el modelo centroide más cercano modelo = NearestCentroid(métrico=«euclidiano) |
Por defecto, no se utiliza la contracción, pero la contracción puede ser especificada a través de la opción «umbral_de_retracción«que toma un valor de punto flotante entre 0 y 1.
... # Crear el modelo centroide más cercano modelo = NearestCentroid(métrico=«euclidiano, umbral_de_retracción=0.5) |
Podemos demostrar los centrosides más cercanos 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 1.000 ejemplos, cada uno con 20 variables de entrada.
El ejemplo 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=1000, 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 encajar y evaluar un modelo de Centroides Encogidos más cercanos usando la validación cruzada de pliegueK repetido estratificado a través de la clase de pliegueK repetido. Usaremos 10 pliegues y tres repeticiones en el arnés de prueba.
Usaremos la configuración por defecto de la distancia euclidiana y sin encogimiento.
... # Crear el modelo centroide más cercano modelo = NearestCentroid() |
El ejemplo completo de la evaluación del modelo de centros de encogimiento más cercano 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 centroide más cercano 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.vecinos importación NearestCentroid # Definir el conjunto de datos X, y = make_classification(n_muestras=1000, n_funciones=20, n_informativo=15, n_redundante=5, estado_aleatorio=1) # Definir el modelo modelo = NearestCentroid() # 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 de los centrosides más reducidos en el conjunto de datos sintéticos e informa de la precisión media en las tres repeticiones de la 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 71%.
Precisión media: 0,711 (0,055) |
Podríamos decidir usar los Centroides Encogidos más Cercanos como nuestro modelo final y hacer predicciones sobre nuevos datos.
Esto puede lograrse ajustando el 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 centroide más cercano en el conjunto de datos de sklearn.conjuntos de datos importación make_classification de sklearn.vecinos importación NearestCentroid # Definir el conjunto de datos X, y = make_classification(n_muestras=1000, n_funciones=20, n_informativo=15, n_redundante=5, estado_aleatorio=1) # Definir el modelo modelo = NearestCentroid() # 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.
Sintonización de los hiperparámetros del centroide más cercanos
Los hiperparámetros del método del centroide encogido más cercano deben ser configurados para su conjunto de datos específico.
Quizás el hiperparámetro más importante es la contracción controlada a través de la «umbral_de_retracción«argumento». Es una buena idea probar valores entre 0 y 1 en una cuadrícula de valores como 0.1 o 0.01.
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 |
# Búsqueda de cuadrícula de encogimiento para el centroide más cercano de numpy importación arange 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.vecinos importación NearestCentroid # Definir el conjunto de datos X, y = make_classification(n_muestras=1000, n_funciones=20, n_informativo=15, n_redundante=5, estado_aleatorio=1) # Definir el modelo modelo = NearestCentroid() # 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[[‘shrink_threshold’ (umbral de encogimiento)] = arange(0, 1.01, 0.01) # 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 imprimir(Precisión media: %.3f’. % resultados.mejor_puntuación_) imprimir(Config: %s’ % resultados.best_params_) |
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 conseguimos resultados ligeramente mejores que el predeterminado, con un 71,4 por ciento frente a un 71,1 por ciento. Podemos ver que el modelo asignó un umbral_de_retracción valor de 0,53.
Precisión media: 0,714 Config: {‘shrink_threshold’: 0.53} |
La otra configuración clave es la medida de distancia utilizada, que puede elegirse en función de la distribución de las variables de entrada.
Se puede utilizar cualquiera de las medidas de distancia incorporadas, como se indica aquí:
Las medidas de distancia comunes incluyen:
- «Cityblock», «coseno», «euclidiano», «l1», «l2», «manhattan
Para más información sobre cómo se calculan estas medidas de distancia, vea el tutorial:
Dado que nuestras variables de entrada son numéricas, nuestro conjunto de datos sólo soporta…euclidianoy…manhattan.’
Podemos incluir estas métricas en nuestra búsqueda en la cuadrícula; el ejemplo completo se muestra 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 |
# Búsqueda de cuadrícula de contracción y distancia métrica para el centroide más cercano de numpy importación arange 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.vecinos importación NearestCentroid # Definir el conjunto de datos X, y = make_classification(n_muestras=1000, n_funciones=20, n_informativo=15, n_redundante=5, estado_aleatorio=1) # Definir el modelo modelo = NearestCentroid() # 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[[‘shrink_threshold’ (umbral de encogimiento)] = arange(0, 1.01, 0.01) cuadrícula[[«métrico] = [[«euclidiano, «Manhattan] # 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 imprimir(Precisión media: %.3f’. % resultados.mejor_puntuación_) imprimir(Config: %s’ % resultados.best_params_) |
Ejecutando el ejemplo se ajusta al modelo y descubre los hiperparámetros que dan los mejores resultados usando la validación cruzada.
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 obtenemos una precisión ligeramente mejor del 75 por ciento al no utilizar la medida de la distancia euclidiana y el manhattan.
Precisión media: 0,750 Config: {‘métrico’: ‘manhattan’, ‘shrink_threshold’: 0.0} |
Una buena extensión de estos experimentos sería añadir la normalización o estandarización de los datos como parte de un Pipeline de modelización.
Más lecturas
Esta sección proporciona más recursos sobre el tema si desea profundizar en él.
Tutoriales
Documentos
Libros
APIs
Artículos
Resumen
En este tutorial, descubriste el algoritmo de aprendizaje de la máquina de clasificación de los centros encogidos más cercanos.
Específicamente, aprendiste:
- El centroide encogido más cercano es un simple algoritmo de aprendizaje lineal de la máquina para la clasificación.
- Cómo encajar, evaluar y hacer predicciones con el modelo de Centroides Encogidos Más Cercanos con Scikit-Learn.
- Cómo sintonizar los hiperparámetros del algoritmo del Centroide Encogido más Cercano en un determinado conjunto de datos.
¿Tiene alguna pregunta?
Haga sus preguntas en los comentarios de abajo y haré lo posible por responder.