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