One vs One, One vs Rest con SVM para clasificación multiclase

Estás leyendo la publicación: One vs One, One vs Rest con SVM para clasificación multiclase

En el aprendizaje automático, los algoritmos de clasificación binaria se convierten en uno de los algoritmos más importantes y utilizados cuando las cosas entran en la parte de precisión del modelado. En la mayoría de los casos, podemos ver que una máquina de vectores de soporte es una opción preferible para los científicos de datos en sus proyectos. Una cosa que se queda atrás aquí es que estos clasificadores binarios no son capaces de realizar una clasificación multiclase. One-vs-rest y One-vs-one son dos métodos que hacen que los clasificadores binarios funcionen como clasificadores multiclase. En este artículo, vamos a discutir el método uno contra uno y uno contra el resto o uno contra todos con una máquina de vectores de soporte para la clasificación de clases múltiples. Los puntos principales que se discutirán en el artículo se enumeran a continuación.

Tabla de contenido

  1. Clasificación binaria a clasificación multiclase
  2. ¿Qué es One-vs-Rest (OvR) o One-vs-All (OvA)?
    1. Implementación de One-vs-Rest (OvR)
  3. ¿Qué es uno contra uno (OvO)?
    1. Implementación de Uno contra Uno (OvO)

Primero analicemos cómo se pueden usar los clasificadores binarios para la clasificación de clases múltiples.

Clasificación binaria a clasificación multiclase

En general, vemos el uso de algoritmos como SVM y regresión logística en problemas de clasificación binaria en los que, al usar estos algoritmos, debemos predecir una clase de dos para cualquier muestra de datos. Predecir una clase de dos clases es la razón para considerar la clasificación como una clasificación binaria.

En uno de nuestros artículos, hemos discutido que una máquina de vectores de soporte es el método más utilizado para la clasificación porque puede crear límites no lineales al proyectar los datos con dimensiones más altas en el espacio usando su función no lineal. Pero estos modelos solo son capaces de tratar problemas de clasificación binaria.

En los problemas de clasificación multiclase, necesitamos tratar con más de dos clases, lo que significa que el algoritmo que estamos usando debería ser capaz de trabajar con múltiples clases. Hay varios modelos disponibles para esto y algunos métodos también están disponibles que pueden hacer que las máquinas de vectores de soporte sean capaces de manejar más de dos clases. Llamamos a estos métodos métodos heurísticos. Hay dos tipos de métodos heurísticos:

  1. Uno contra el resto (OvR) o Uno contra todos (OvA)
  2. Uno contra uno (OvO)
🔥 Recomendado:  LUX: API de Python para análisis de datos exploratorios automatizados

Echemos un vistazo más de cerca a One-vs-Rest (OvR) o One-vs-All (OvA).

¿Está buscando un repositorio completo de bibliotecas de Python utilizadas en ciencia de datos? echa un vistazo aquí.

¿Qué es One-vs-Rest (OvR) o One-vs-All (OvA)?

Podemos pensar en One-vs-Rest (OvR) o One-vs-All (OvA) como un enfoque para hacer que los algoritmos de clasificación binaria puedan funcionar como algoritmos de clasificación multiclase. Este enfoque divide principalmente los datos multiclase como datos de clasificación binaria para que los algoritmos de clasificación binaria se puedan aplicar para convertir datos de clasificación binaria.

El procedimiento de conversión de los datos se puede entender usando un ejemplo de datos de iris donde tenemos tres clases de la siguiente manera:

  • Setosa
  • Versicolor
  • virginica

Los datos convertidos como datos de clasificación binaria tendrán el siguiente aspecto:

  • Setosa vs. [Versicolor, Virginica]
  • versicolor vs [Setosa, Virginica]
  • virginica vs [Setosa, Versicolor]

Al observar la conversión, podemos pensar que hay un requisito de tres modelos, pero con los grandes conjuntos de datos, crear tres modelos puede ser un enfoque difícil y no preciso para el modelado. Aquí One-vs-Rest (OvR) o One-vs-All(OvA) viene a salvarnos donde los clasificadores binarios pueden entrenarse para predecir cualquier clase como positiva y otras clases como negativas.

Principalmente usamos clasificadores binarios que pueden dar probabilidad de membresía o puntajes similares a probabilidad porque el argmax de estos puntajes se puede utilizar para predecir una clase de varias clases. Veamos cómo podemos implementar clasificadores binarios usando el método One-vs-Rest (OvR) o One-vs-All(OvA) para un problema de clasificación multiclase.

Implementación de One-vs-Rest (OvR)

Para implementar el método One-vs-Rest (OvR), las bibliotecas scikit-learn proporcionan un método llamado OneVsRestClassifier en el paquete multiclase. En este artículo, vamos a ver cómo podemos implementar un clasificador de vectores de soporte para la clasificación multiclase de datos IRIS utilizando OneVsRestClassifier. Importemos bibliotecas primero.

🔥 Recomendado:  Vea el enfoque audaz de Metasill para tomar NFT IRL

desde sklearn importar conjuntos de datos desde sklearn.svm importar SVC desde sklearn.multiclass importar OneVsRestClassifier

Aquí, en lo anterior, podemos ver que acabamos de llamar a los modelos SVC, el modelo OneVsRestClassifier y los datos del iris. Hagamos variables independientes y objetivo usando los datos del iris.

iris = conjuntos de datos.cargar_iris() X = iris.datos y = iris.objetivo

Instanciamos el modelo SVC.

svc = SVC()

Creación de instancias del clasificador One-Vs-Rest para el modelo SVC.

o_vs_r = OneVsRestClassifier(svc)

Entrenemos al modelo

o_vs_r.fit(X, y)

Predicción de valores a partir del modelo.

yhat = o_vs_r.predict(X) yhat

Producción:

Aquí, en lo anterior, podemos ver que el clasificador de vector de soporte predice 3 clases y no requerimos usar tres clasificadores binarios. Echemos un vistazo más de cerca a One-vs-One (OvO).

¿Qué es uno contra uno (OvO)?

Este método también se puede considerar como un enfoque para hacer que los algoritmos de clasificación binaria puedan funcionar como algoritmos de clasificación multiclase. Es similar al método One-Vs-Rest porque también funciona en función de dividir los datos, pero el comportamiento de división de este método es diferente del método One-Vs-Rest. Este método incluye la división de datos para cada clase donde cada clase tiene a todas las demás clases como su oponente. Podemos volver a utilizar el conjunto de datos del iris para comprender el comportamiento de división de datos de este método.

En el iris, tenemos las siguientes clases:

  • Setosa
  • Versicolor
  • virginica

Los datos de iris divididos utilizando los métodos Uno contra Uno (OvO) se verán de la siguiente manera:

  • Setosa vs Versicolor
  • Setosa vs Virginica
  • Versicolor contra Virginica
  • Virginica vs Versicolor

Aquí podemos ver que usando estos datos tenemos datos de clasificación binaria que incluyen una clase con todas las demás clases. Podemos averiguar el número de división de datos usando la siguiente fórmula

🔥 Recomendado:  Las 5 mejores computadoras portátiles para escritores y blogueros en 2023 Quién escribe mucho

División de datos = (número de clases X (número de clases – 1))/2

Otras funciones de este método son similares al método One-vs-Rest. Veamos cómo podemos implementar un clasificador de vectores de soporte para la clasificación multiclase utilizando el método One-vs-One.

Implementación de Uno contra Uno (OvO)

Para implementar este método, podemos usar la biblioteca scikit-learn donde se proporciona el método OneVsOneClassifier en el paquete multiclase. En esta sección, veremos cómo podemos aplicar este método al clasificador de vectores de soporte para clasificar los datos de IRIS. Importemos la biblioteca

desde sklearn importar conjuntos de datos desde sklearn.svm importar SVC desde sklearn.multiclass importar OneVsOneClassifier

Llamemos a los datos.

iris = conjuntos de datos.cargar_iris() X = iris.datos y = iris.objetivo

Clasificador de vectores de soporte de creación de instancias

svc = SVC()

Creación de instancias del método One-vs-One

o_vs_o = OneVsOneClassifier(svc)

Entrenando al modelo

o_vs_o.fit(X, y)

Predicción a partir del modelo

yhat = o_vs_o.predict(X) yhat

Producción:

Aquí podemos ver que nuestro clasificador de vectores de soporte puede predecir más de dos clases usando el método Uno contra Uno.

Ultimas palabras

En este artículo, hemos discutido los dos métodos heurísticos que hacen que un clasificador binario sea capaz de trabajar con datos de varias clases. Estos métodos pueden ayudarnos a aplicar métodos de clasificación binaria a una clasificación multiclase utilizando la división de los datos.

Referencias