7 sencillos pasos para crear un clasificador de aprendizaje automático con códigos en Python
El aprendizaje automático (ML), una rama de la inteligencia artificial (IA), es más que una palabra de moda en este momento. Está en continuo crecimiento y se convertirá en la tecnología más transformadora que exista durante la próxima década. Algunas aplicaciones del aprendizaje automático que ya han comenzado a tener un impacto en la sociedad incluyen los vehículos autónomos, los sistemas de detección de fraude y la detección de tumores.
El aprendizaje automático también se convirtió en parte de nuestras rutinas diarias. Desde asistentes personales (PA) habilitados por voz como Siri, Alexa y el Asistente de Google hasta música, películas, noticias y recomendaciones de compras optimizadas, hasta búsquedas sugerentes, todo lo que utilizamos está influenciado directa o indirectamente por el aprendizaje automático.
Si desea saber más sobre los fundamentos del aprendizaje automático, consulte el tutorial de aprendizaje automático.
La clasificación, una tarea de aprendizaje automático supervisado, es el proceso de asignar un valor de etiqueta a una clase específica y luego identificar un tipo particular para que sea de un tipo u otro. Matemáticamente, la clasificación es una tarea de aproximar una función de mapeo (f) de las variables de entrada a las variables de salida. Uno de los ejemplos más básicos de clasificación de ML es un sistema de filtrado de spam de correo electrónico en el que se puede clasificar un correo electrónico como "spam" o "no spam".
En este artículo, con 7 sencillos pasos, crearemos un clasificador de aprendizaje automático en el lenguaje de programación Python utilizando el conjunto de datos de diagnóstico de cáncer de mama de Wisconsin. Usaremos un clasificador Naïve Bayes (NB) que predice si un tumor de cáncer de mama es maligno o benigno.
¡Curioso por construir el clasificador! Entonces empecemos.
Paso 1: Importar la biblioteca ML para Python
Para comenzar a crear un clasificador de ML en Python, necesitamos una biblioteca de ML para Python. Aquí usaremos Scikit-learn, que es una de las mejores bibliotecas de aprendizaje automático de código abierto para Python. Utilice el siguiente comando para importarlo:
import sklearn
Si tiene Scikit-learn instalado en su computadora, el comando anterior se completará sin ningún error. Si no está instalado, recibirá un mensaje de error similar al que se muestra a continuación:
Traceback (most recent call last): File "<string>", line 1, in <module> ImportError: No module named 'sklearn'
Puede descargar la biblioteca Python ML usando el comando pip de la siguiente manera:
pip install -U scikit-learn
Paso 2: importar el conjunto de datos
Para crear nuestro clasificador, utilizaremos el "Conjunto de datos de Wisconsin sobre cáncer de mama" de Sklearn, que se utiliza ampliamente con fines de clasificación. Contiene 569 instancias con 30 atributos predictivos numéricos, como el radio del tumor, textura, perímetro, área, simetría, suavidad, etc. También contiene dos etiquetas de clasificación, a saber, malignas o benignas.
Utilizando este conjunto de datos, nuestro clasificador predecirá si un tumor de cáncer de mama es maligno o benigno.
Importemos y carguemos este conjunto de datos:
# Import dataset
from sklearn.datasets import load_breast_cancer
# Load dataset
data_BreastCancer = load_breast_cancer()
La variable data_BreastCancer, que creamos anteriormente, funciona como un diccionario. Las cuatro claves importantes del diccionario a considerar son:
Los nombres de las etiquetas de clasificación (target_names)
Las etiquetas reales (objetivo)
-
Los nombres de las funciones (feature_names)
Los atributos (datos)
Ahora necesitamos organizar nuestros datos creando nuevas variables para cada clave importante del diccionario y asignar los datos:
# Organizing the data
label_names = data_BreastCancer['target_names']
labels = data_BreastCancer['target']
feature_names = data_BreastCancer['feature_names']
features = data_BreastCancer['data']
Para comprender mejor el conjunto de datos, imprimamos etiquetas de clase, las primeras cincuenta etiquetas de instancias de datos, los nombres de las características y los valores de las características para la primera instancia de datos:
Ejemplo
# Look at the data
print('\nClass Labels:',label_names)
print('\nFirst Fifty Data Instance Labels:',labels[:50])
print('\nFeature Names:',feature_names)
print('\nFeature Values for First Data Instance:',features[0])
Producción
Obtendrá el siguiente resultado si ejecuta el código:
Class Labels: ['malignant' 'benign']
First Fifty Data Instance Labels: [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 1 0 1 1]
Feature Names: ['mean radius' 'mean texture' 'mean perimeter' 'mean area'
'mean smoothness' 'mean compactness' 'mean concavity'
'mean concave points' 'mean symmetry' 'mean fractal dimension'
'radius error' 'texture error' 'perimeter error' 'area error'
'smoothn1ess error' 'compactness error' 'concavity error'
'concave points error' 'symmetry error' 'fractal dimension error'
'worst radius' 'worst texture' 'worst perimeter' 'worst area'
'worst smoothness' 'worst compactness' 'worst concavity'
'worst concave points' 'worst symmetry' 'worst fractal dimension']
Feature Values for First Data Instance: [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]
Como puede ver en el resultado anterior, los nombres de nuestras clases son malignos, que se asignan al valor binario 0, y benignos, que se asignan al valor binario 1. También muestra que nuestra primera instancia de datos es un tumor maligno cuyo radio medio es 1.799e+01.
Ahora que tenemos nuestros datos cargados, podemos ponerlos a trabajar para construir nuestro clasificador ML. Veamos cómo en los siguientes pasos.
Paso 3: organizar los datos en conjuntos de entrenamiento y prueba
Para evaluar la precisión de un modelo de ML, siempre se recomienda probar el modelo con datos invisibles. Esa es la razón por la que primero dividiremos nuestros datos en dos partes: entrenamiento y un conjunto de prueba.
La biblioteca Scikit-learn tiene la función train_test_split() con la ayuda de la cual podemos dividir nuestros datos en estos conjuntos:
from sklearn.model_selection import train_test_split
# Split the data into training and test set
train, test, train_labels, test_labels = train_test_split(features,labels,test_size=0.40,random_state=42)
En este ejemplo, ahora tenemos un conjunto de entrenamiento que representa el 60 % del conjunto de datos original y un conjunto de prueba que representa el 40 % del conjunto de datos original.
Ahora es el momento de construir y entrenar el modelo clasificador.
Paso 4: construye el modelo
Para construir nuestro clasificador ML, usaremos un algoritmo simple llamado Naïve Bayes (NB) que funciona bien en tareas de clasificación binaria. Scikit-learn nos proporciona tres modelos Naïve Bayes, a saber,
Gaussian Naïve Bayes: se basa en una distribución continua caracterizada por la media y la varianza.
Multinomial Naïve Bayes: asume un vector de características donde cada elemento representa el número de veces que aparece.
Bernoulli Naïve Bayes - Es un algoritmo binario. Es útil cuando necesitamos comprobar si una característica está presente o no.
Como usaremos el modelo Gaussian Naïve Bayes, primero debemos importar el módulo GaussianNB de Sklearn y luego inicializar el modelo con la función GaussianNB().
# Import GaussianNB module
from sklearn.naive_bayes import GaussianNB
# Initializing our classifier model
Gaussian_NB = GaussianNB()
Paso 5: entrenar el modelo
Ahora necesitamos entrenar nuestro clasificador ajustándolo a los datos usando la función fit():
# Train the classifier
NB_Clf = Gaussian_NB.fit(train,train_labels)
Paso 6: hacer predicciones en el conjunto de prueba
Una vez que entrenemos el modelo clasificador, podemos usarlo para hacer predicciones en nuestro conjunto de pruebas. Usamos la función predict() que devuelve una matriz de predicciones para cada instancia de datos en el conjunto de prueba.
Usemos la función predict() e imprimamos las predicciones:
Ejemplo
# Making predictions on the test set
Preds_NBClf = NB_Clf.predict(test)
# Print the predictions
print(Preds_NBClf)
Producción
Obtendrá el siguiente resultado si ejecuta el código:
[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 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]
El resultado anterior, una matriz de 0 y 1, representa los valores previstos para la clase de tumor, es decir, maligno y benigno.
Paso 7: Evaluación de la precisión del clasificador
En este paso, evaluamos la precisión del clasificador ML comparando dos matrices test_labels y Preds_NBClf. Afortunadamente, para predecir la precisión, la biblioteca Sklearn nos proporciona una función llamada precision_score().
Ejemplo
# Import accuracy_score module
from sklearn.metrics import accuracy_score
# Evaluating the accuracy of our classifier
print('Accuracy:',accuracy_score(test_labels, Preds_NBClf))
Producción
Obtendrá el siguiente resultado:
Accuracy:0.9517543859649122
El resultado anterior muestra que nuestro clasificador Naïve Bayes tiene una precisión del 95,18%, lo que significa que el 95,18% de nuestro clasificador hace la predicción correcta sobre el tumor.
Conclusión
En este artículo, con 7 sencillos pasos, aprendió cómo crear un clasificador de aprendizaje automático en el lenguaje de programación Python. Con estos pasos, ahora puede cargar el conjunto de datos, organizar los datos, entrenar el modelo de ML, predecir a partir del conjunto de pruebas y evaluar la precisión del clasificador.
Definitivamente ahora puede experimentar con diferentes subconjuntos de características, o incluso puede probar otros dos modelos Naïve Bayes, es decir, multinomial y Bernoulli, así como varios otros algoritmos de aprendizaje automático.