Clasificación multiclase usando scikit-learn

La clasificación multiclase es un problema popular en el aprendizaje automático supervisado.

Problema: dado un conjunto de datos de m ejemplos de entrenamiento, cada uno de los cuales contiene información en forma de varias características y una etiqueta. Cada etiqueta corresponde a una clase a la que pertenece el ejemplo de entrenamiento. En la clasificación multiclase, tenemos un conjunto finito de clases. Cada ejemplo de entrenamiento también tiene n características. 

Por ejemplo, en el caso de la identificación de diferentes tipos de frutas, se pueden presentar «Forma», «Color», «Radio», y «Manzana», «Naranja», «Plátano» pueden ser etiquetas de clase diferentes. 

En una clasificación multiclase, entrenamos un clasificador usando nuestros datos de entrenamiento y usamos este clasificador para clasificar nuevos ejemplos. 

Objetivo de este artículo: utilizaremos diferentes métodos de clasificación multiclase, como KNN, árboles de decisión, SVM, etc. Compararemos su precisión en los datos de prueba. Realizaremos todo esto con sci-kit learn (Python). Para obtener información sobre cómo instalar y usar sci-kit learn, visite http://scikit-learn.org/stable/

Acercarse –  

  1. Cargue el conjunto de datos desde la fuente.
  2. Divida el conjunto de datos en datos de «entrenamiento» y «prueba».
  3. Entrene clasificadores de árboles de decisión, SVM y KNN en los datos de entrenamiento.
  4. Utilice los clasificadores anteriores para predecir etiquetas para los datos de prueba.
  5. Mida la precisión y visualice la clasificación.

Clasificador de árbol de decisión: un clasificador de árbol de decisión es un enfoque sistemático para la clasificación multiclase. Plantea un conjunto de preguntas al conjunto de datos (relacionadas con sus atributos/características). El algoritmo de clasificación del árbol de decisión se puede visualizar en un árbol binario. En la raíz y en cada uno de los Nodes internos, se plantea una pregunta y los datos de ese Node se dividen aún más en registros separados que tienen diferentes características. Las hojas del árbol se refieren a las clases en las que se divide el conjunto de datos. En el siguiente fragmento de código, entrenamos un clasificador de árboles de decisión en scikit-learn.

Python

# importing necessary libraries
from sklearn import datasets
from sklearn.metrics import confusion_matrix
from sklearn.model_selection import train_test_split
  
# loading the iris dataset
iris = datasets.load_iris()
  
# X -> features, y -> label
X = iris.data
y = iris.target
  
# dividing X, y into train and test data
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state = 0)
  
# training a DescisionTreeClassifier
from sklearn.tree import DecisionTreeClassifier
dtree_model = DecisionTreeClassifier(max_depth = 2).fit(X_train, y_train)
dtree_predictions = dtree_model.predict(X_test)
  
# creating a confusion matrix
cm = confusion_matrix(y_test, dtree_predictions)

Clasificador 
SVM (máquina de vector de soporte): SVM (máquina de vector de soporte) es un método de clasificación eficiente cuando el vector de características es de alta dimensión. En sci-kit learn, podemos especificar la función kernel (aquí, lineal). Para saber más sobre las funciones del núcleo y SVM, consulte – Función del núcleo | sci-kit aprender y SVM .

Python

# importing necessary libraries
from sklearn import datasets
from sklearn.metrics import confusion_matrix
from sklearn.model_selection import train_test_split
  
# loading the iris dataset
iris = datasets.load_iris()
  
# X -> features, y -> label
X = iris.data
y = iris.target
  
# dividing X, y into train and test data
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state = 0)
  
# training a linear SVM classifier
from sklearn.svm import SVC
svm_model_linear = SVC(kernel = 'linear', C = 1).fit(X_train, y_train)
svm_predictions = svm_model_linear.predict(X_test)
  
# model accuracy for X_test  
accuracy = svm_model_linear.score(X_test, y_test)
  
# creating a confusion matrix
cm = confusion_matrix(y_test, svm_predictions)

Clasificador KNN (k-vecinos más cercanos): KNN o k-vecinos más cercanos es el algoritmo de clasificación más simple. Este algoritmo de clasificación no depende de la estructura de los datos. Cada vez que se encuentra un nuevo ejemplo, se examinan sus k vecinos más cercanos de los datos de entrenamiento. La distancia entre dos ejemplos puede ser la distancia euclidiana entre sus vectores de características. La clase mayoritaria entre los k vecinos más cercanos se toma como la clase del ejemplo encontrado. 

Python

# importing necessary libraries
from sklearn import datasets
from sklearn.metrics import confusion_matrix
from sklearn.model_selection import train_test_split
  
# loading the iris dataset
iris = datasets.load_iris()
  
# X -> features, y -> label
X = iris.data
y = iris.target
  
# dividing X, y into train and test data
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state = 0)
  
# training a KNN classifier
from sklearn.neighbors import KNeighborsClassifier
knn = KNeighborsClassifier(n_neighbors = 7).fit(X_train, y_train)
  
# accuracy on X_test
accuracy = knn.score(X_test, y_test)
print accuracy
  
# creating a confusion matrix
knn_predictions = knn.predict(X_test) 
cm = confusion_matrix(y_test, knn_predictions)

Clasificador Naive Bayes: el método de clasificación Naive Bayes se basa en el teorema de Bayes. Se denomina ‘Ingenuo’ porque asume la independencia entre cada par de características en los datos. Sea (x 1 , x 2 , …, x n ) un vector de características y sea y la etiqueta de clase correspondiente a este vector de características.
Aplicando el teorema de Bayes, 

Naive Bayes classifier equation

Como x 1 , x 2 , …, x n son independientes entre sí,  

Naive Bayes classifier equation

Insertando proporcionalidad quitando la P(x 1 , …, x n ) (ya que es constante). 

Naive Bayes classifier equation

Por lo tanto, la etiqueta de clase se decide por, 

Naive Bayes classifier equation

P(y) es la frecuencia relativa de la etiqueta de clase y en el conjunto de datos de entrenamiento.
En el caso del clasificador Gaussian Naive Bayes, P(x i | y) se calcula como,

Naive Bayes classifier equation

Python

# importing necessary libraries
from sklearn import datasets
from sklearn.metrics import confusion_matrix
from sklearn.model_selection import train_test_split
  
# loading the iris dataset
iris = datasets.load_iris()
  
# X -> features, y -> label
X = iris.data
y = iris.target
  
# dividing X, y into train and test data
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state = 0)
  
# training a Naive Bayes classifier
from sklearn.naive_bayes import GaussianNB
gnb = GaussianNB().fit(X_train, y_train)
gnb_predictions = gnb.predict(X_test)
  
# accuracy on X_test
accuracy = gnb.score(X_test, y_test)
print accuracy
  
# creating a confusion matrix
cm = confusion_matrix(y_test, gnb_predictions)

Referencias – 

  1. http://scikit-learn.org/stable/modules/naive_bayes.html
  2. https://en.wikipedia.org/wiki/Multiclass_classification
  3. http://scikit-learn.org/stable/documentation.html
  4. http://scikit-learn.org/stable/modules/tree.html
  5. http://scikit-learn.org/stable/modules/svm.html#svm-kernels
  6. https://www.analyticsvidhya.com/blog/2015/10/understaing-support-vector-machine-example-code/

Este artículo es una contribución de Arik Pamnani . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
 

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *