Clasificación - Introducción

Introducción a la clasificación

La clasificación puede definirse como el proceso de predecir la clase o categoría a partir de valores observados o puntos de datos dados. La salida categorizada puede tener el formato "Negro" o "Blanco" o "spam" o "no spam".

Matemáticamente, la clasificación es la tarea de aproximar una función de mapeo (f) de variables de entrada (X) a variables de salida (Y). Básicamente, pertenece al aprendizaje automático supervisado en el que también se proporcionan objetivos junto con el conjunto de datos de entrada.

Un ejemplo de problema de clasificación puede ser la detección de spam en los correos electrónicos. Solo puede haber dos categorías de salida, "spam" y "no spam"; por lo tanto, esta es una clasificación de tipo binario.

Para implementar esta clasificación, primero necesitamos entrenar al clasificador. Para este ejemplo, los correos electrónicos "spam" y "no spam" se utilizarían como datos de entrenamiento. Después de entrenar con éxito el clasificador, se puede usar para detectar un correo electrónico desconocido.

Tipos de alumnos en la clasificación

Tenemos dos tipos de alumnos en relación con los problemas de clasificación:

Estudiantes perezosos

Como sugiere el nombre, este tipo de alumnos espera a que aparezcan los datos de prueba después de almacenar los datos de entrenamiento. La clasificación se realiza solo después de obtener los datos de prueba. Dedican menos tiempo a entrenar pero más tiempo a predecir. Ejemplos de estudiantes perezosos son el vecino más cercano K y el razonamiento basado en casos.

Estudiantes ansiosos

A diferencia de los estudiantes perezosos, los estudiantes ansiosos construyen un modelo de clasificación sin esperar a que aparezcan los datos de prueba después de almacenar los datos de entrenamiento. Dedican más tiempo a entrenar pero menos tiempo a predecir. Ejemplos de estudiantes ansiosos son los árboles de decisión, Naïve Bayes y las redes neuronales artificiales (ANN).

Construyendo un clasificador en Python

Scikit-learn, una biblioteca de Python para el aprendizaje automático, se puede usar para construir un clasificador en Python. Los pasos para construir un clasificador en Python son los siguientes:

Paso 1: Importación del paquete de Python necesario

Para construir un clasificador usando scikit-learn, necesitamos importarlo. Podemos importarlo usando el siguiente script:

import sklearn

Paso 2: Importación del conjunto de datos

Después de importar el paquete necesario, necesitamos un conjunto de datos para construir un modelo de predicción de clasificación. Podemos importarlo desde el conjunto de datos de sklearn o podemos usar otro según nuestro requisito. Vamos a utilizar la base de datos de diagnóstico de Wisconsin de cáncer de mama de sklearn. Podemos importarlo con la ayuda del siguiente script:

from sklearn.datasets import load_breast_cancer

El siguiente script cargará el conjunto de datos;

data = load_breast_cancer()

También necesitamos organizar los datos y se puede hacer con la ayuda de los siguientes scripts:

label_names = data['target_names']
   labels = data['target']
   feature_names = data['feature_names']
   features = data['data']

El siguiente comando imprimirá el nombre de las etiquetas, 'malignant'y'benign'en el caso de nuestra base de datos.

print(label_names)

La salida del comando anterior son los nombres de las etiquetas:

['malignant' 'benign']

Estas etiquetas se asignan a valores binarios 0 y 1. Malignant el cáncer está representado por 0 y Benign el cáncer está representado por 1.

Los nombres de las funciones y los valores de las funciones de estas etiquetas se pueden ver con la ayuda de los siguientes comandos:

print(feature_names[0])

La salida del comando anterior son los nombres de las características para la etiqueta 0, es decir Malignant cáncer -

mean radius

De manera similar, los nombres de las características para la etiqueta se pueden producir de la siguiente manera:

print(feature_names[1])

La salida del comando anterior son los nombres de las características para la etiqueta 1, es decir Benign cáncer -

mean texture

Podemos imprimir las características de estas etiquetas con la ayuda del siguiente comando:

print(features[0])

Esto dará el siguiente resultado:

[
   1.799e+01 1.038e+01 1.228e+02 1.001e+03 1.184e-01 2.776e-01 3.001e-01
   1.471e-01 2.419e-01 7.871e-02 1.095e+00 9.053e-01 8.589e+00 1.534e+02
   6.399e-03 4.904e-02 5.373e-02 1.587e-02 3.003e-02 6.193e-03 2.538e+01
   1.733e+01 1.846e+02 2.019e+03 1.622e-01 6.656e-01 7.119e-01 2.654e-01
   4.601e-01 1.189e-01
]

Podemos imprimir las características de estas etiquetas con la ayuda del siguiente comando:

print(features[1])

Esto dará el siguiente resultado:

[
   2.057e+01 1.777e+01 1.329e+02 1.326e+03 8.474e-02 7.864e-02 8.690e-02
   7.017e-02 1.812e-01 5.667e-02 5.435e-01 7.339e-01 3.398e+00 7.408e+01
   5.225e-03 1.308e-02 1.860e-02 1.340e-02 1.389e-02 3.532e-03 2.499e+01
   2.341e+01 1.588e+02 1.956e+03 1.238e-01 1.866e-01 2.416e-01 1.860e-01
   2.750e-01 8.902e-02
]

Paso 3: organización de datos en conjuntos de prueba y entrenamiento

Como necesitamos probar nuestro modelo en datos invisibles, dividiremos nuestro conjunto de datos en dos partes: un conjunto de entrenamiento y un conjunto de prueba. Podemos usar la función train_test_split () del paquete sklearn python para dividir los datos en conjuntos. El siguiente comando importará la función:

from sklearn.model_selection import train_test_split

Ahora, el siguiente comando dividirá los datos en datos de entrenamiento y prueba. En este ejemplo, usamos el 40 por ciento de los datos con fines de prueba y el 60 por ciento de los datos con fines de capacitación:

train, test, train_labels, test_labels = train_test_split(
   features,labels,test_size = 0.40, random_state = 42
)

Paso 4: evaluación del modelo

Después de dividir los datos en entrenamiento y prueba, necesitamos construir el modelo. Usaremos el algoritmo Naïve Bayes para este propósito. Los siguientes comandos importarán el módulo GaussianNB:

from sklearn.naive_bayes import GaussianNB

Ahora, inicialice el modelo de la siguiente manera:

gnb = GaussianNB()

A continuación, con la ayuda del siguiente comando podemos entrenar el modelo:

model = gnb.fit(train, train_labels)

Ahora, para fines de evaluación, necesitamos hacer predicciones. Se puede hacer usando la función de predicción () de la siguiente manera:

preds = gnb.predict(test)
print(preds)

Esto dará el siguiente resultado:

[
   1 0 0 1 1 0 0 0 1 1 1 0 1 0 1 0 1 1 1 0 1 1 0 1 1 1 1 1 1 0 1 1 1 1 1 1 0 1
   0 1 1 0 1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 0 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 1 1
   1 1 1 1 0 1 1 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 1 0 0 1 0 0 1 1 1 0 1 1 0 1 1 0
   0 0 1 1 1 0 0 1 1 0 1 0 0 1 1 0 0 0 1 1 1 0 1 1 0 0 1 0 1 1 0 1 0 0 1 1 1 1
   1 1 1 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 0 1 1 0 1 1 1 1 1 1 0 0 0 1 1 0 
   1 0 1 1 1 1 0 1 1 0 1 1 1 0 1 0 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 0 1 0 0 1 1 0 
   1

]

La serie anterior de 0 y 1 en la salida son los valores predichos para el Malignant y Benign clases de tumores.

Paso 5: encontrar la precisión

Podemos encontrar la precisión de la construcción del modelo en el paso anterior comparando las dos matrices, a saber, test_labels y preds. Usaremos la función precision_score () para determinar la precisión.

from sklearn.metrics import accuracy_score
   print(accuracy_score(test_labels,preds))
   0.951754385965

El resultado anterior muestra que el clasificador NaïveBayes tiene una precisión del 95,17%.

Métricas de evaluación de clasificación

El trabajo no está hecho incluso si ha finalizado la implementación de su aplicación o modelo de aprendizaje automático. ¿Debemos tener que averiguar qué tan efectivo es nuestro modelo? Puede haber diferentes métricas de evaluación, pero debemos elegirlas con cuidado porque la elección de las métricas influye en cómo se mide y se compara el rendimiento de un algoritmo de aprendizaje automático.

Las siguientes son algunas de las métricas de evaluación de clasificación importantes entre las que puede elegir en función de su conjunto de datos y tipo de problema:

Matriz de confusión

Es la forma más fácil de medir el desempeño de un problema de clasificación donde la salida puede ser de dos o más tipos de clases. Una matriz de confusión no es más que una tabla con dos dimensiones, a saber. "Real" y "Previsto" y, además, ambas dimensiones tienen "Positivos verdaderos (TP)", "Negativos verdaderos (TN)", "Positivos falsos (FP)", "Negativos falsos (FN)" como se muestra a continuación:

La explicación de los términos asociados con la matriz de confusión es la siguiente:

  • True Positives (TP) - Es el caso cuando tanto la clase real como la clase pronosticada del punto de datos es 1.

  • True Negatives (TN) - Es el caso cuando tanto la clase real como la clase pronosticada del punto de datos es 0.

  • False Positives (FP) - Es el caso cuando la clase real de punto de datos es 0 y la clase predicha de punto de datos es 1.

  • False Negatives (FN) - Es el caso cuando la clase real de punto de datos es 1 y la clase predicha de punto de datos es 0.

Podemos encontrar la matriz de confusión con la ayuda de la función confusion_matrix () de sklearn. Con la ayuda del siguiente script, podemos encontrar la matriz de confusión del clasificador binario construido anteriormente:

from sklearn.metrics import confusion_matrix

Salida

[
   [ 73   7]
   [  4 144]
]

Exactitud

Puede definirse como el número de predicciones correctas realizadas por nuestro modelo ML. Podemos calcularlo fácilmente mediante matriz de confusión con la ayuda de la siguiente fórmula:

$$ = \ frac {+} {+++} $$

Para el clasificador binario construido anteriormente, TP + TN = 73 + 144 = 217 y TP + FP + FN + TN = 73 + 7 + 4 + 144 = 228.

Por lo tanto, Precisión = 217/228 = 0,951754385965, que es la misma que hemos calculado después de crear nuestro clasificador binario.

Precisión

La precisión, utilizada en la recuperación de documentos, puede definirse como la cantidad de documentos correctos devueltos por nuestro modelo ML. Podemos calcularlo fácilmente mediante matriz de confusión con la ayuda de la siguiente fórmula:

$$ = \ frac {} {+ FP} $$

Para el clasificador binario construido arriba, TP = 73 y TP + FP = 73 + 7 = 80.

Por lo tanto, Precisión = 73/80 = 0.915

Recuerdo o sensibilidad

La recuperación puede definirse como la cantidad de positivos devueltos por nuestro modelo de AA. Podemos calcularlo fácilmente mediante matriz de confusión con la ayuda de la siguiente fórmula:

$$ = \ frac {} {+ FN} $$

Para el clasificador binario construido anteriormente, TP = 73 y TP + FN = 73 + 4 = 77.

Por lo tanto, Precisión = 73/77 = 0.94805

Especificidad

La especificidad, en contraste con el recuerdo, puede definirse como el número de negativos devueltos por nuestro modelo ML. Podemos calcularlo fácilmente mediante matriz de confusión con la ayuda de la siguiente fórmula:

$$ = \ frac {N} {N + FP} $$

Para el clasificador binario construido anteriormente, TN = 144 y TN + FP = 144 + 7 = 151.

Por lo tanto, Precisión = 144/151 = 0,95364

Varios algoritmos de clasificación ML

Los siguientes son algunos algoritmos importantes de clasificación de ML:

  • Regresión logística

  • Máquina de vectores de soporte (SVM)

  • Árbol de decisión

  • Bayes ingenuo

  • Bosque aleatorio

Discutiremos todos estos algoritmos de clasificación en detalle en capítulos posteriores.

Aplicaciones

Algunas de las aplicaciones más importantes de los algoritmos de clasificación son las siguientes:

  • Reconocimiento de voz

  • Reconocimiento de escritura a mano

  • Identificación biométrica

  • Clasificación de documentos