El aprendizaje automático es un subcampo de la inteligencia artificial que brinda a los sistemas la capacidad de aprender por sí mismos sin estar programados explícitamente para hacerlo. El aprendizaje automático se puede utilizar para resolver muchos problemas del mundo real.
Clasifiquemos las células cancerosas según sus características e identifiquemos si son ‘malignas’ o ‘benignas’. Usaremos scikit-learn para un problema de aprendizaje automático. Scikit-learn es una biblioteca de aprendizaje automático, minería de datos y análisis de datos de código abierto para el lenguaje de programación Python.
El conjunto de datos:
Scikit-learn viene con algunos conjuntos de datos estándar pequeños que no requieren descargar ningún archivo de ningún sitio web externo. El conjunto de datos que utilizaremos para nuestro problema de aprendizaje automático es el conjunto de datos de Wisconsin (diagnóstico) de cáncer de mama. El conjunto de datos incluye varios datos sobre los tumores de cáncer de mama junto con las etiquetas de clasificación, a saber, maligno o benigno. Se puede cargar usando la siguiente función:
load_breast_cancer([return_X_y])
El conjunto de datos tiene 569 instancias o datos de 569 tumores e incluye datos sobre 30 atributos o características como el radio, la textura, el perímetro, el área, etc. de un tumor. Usaremos estas características para entrenar nuestro modelo.
Instalación de los módulos necesarios:
para este proyecto de aprendizaje automático, necesitaremos el módulo Python ‘Scikit-learn’. Si no lo tiene instalado en su máquina, descárguelo e instálelo ejecutando el siguiente comando en el símbolo del sistema:
pip install scikit-learn
Nota: puede usar cualquier IDE para este proyecto, ya que se recomienda encarecidamente el cuaderno Jupyter para el proyecto. Esto se debe a que, dado que Python es un lenguaje interpretado, uno puede aprovechar al máximo ejecutando unas pocas líneas de código y ver y comprender lo que sucede, paso a paso, en lugar de escribir todo el script y ejecutarlo una vez.
Instálelo ejecutando el siguiente comando en el símbolo del sistema:
pip install jupyter
Implementación paso a paso de la clasificación usando Scikit-learn:
Paso n.º 1: Importar el módulo y el conjunto de datos necesarios.
Necesitaremos el módulo ‘Scikit-learn’ y el conjunto de datos de wisconsin (diagnóstico) de cáncer de mama.
Python3
# importing the Python module import sklearn # importing the dataset from sklearn.datasets import load_breast_cancer
Paso #2: Cargar el conjunto de datos a una variable.
Python3
# loading the dataset data = load_breast_cancer()
Los atributos importantes que debemos considerar de ese conjunto de datos son ‘nombres de destino’ (el significado de las etiquetas), ‘objetivo’ (las etiquetas de clasificación), ‘nombres_de_características’ (el significado de las características) y ‘datos’ (los datos aprender).
Paso #3: Organizar los datos y mirarlos.
Para comprender mejor qué contiene el conjunto de datos y cómo podemos usar los datos para entrenar nuestro modelo, primero organicemos los datos y luego veamos qué contienen usando la función print().
Python3
# Organize our data label_names = data['target_names'] labels = data['target'] feature_names = data['feature_names'] features = data['data']
Luego, usando la función print() , examinemos los datos.
Python3
# looking at the data print(label_names)
Producción:
['malignant' 'benign']
Entonces, vemos que cada conjunto de datos de un tumor está etiquetado como ‘maligno’ o ‘benigno’.
Python3
print(labels)
Producción:
[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 1 1 1 0 0 1 0 0 1 1 1 1 0 1 0 0 1 1 1 1 0 1 0 0 1 0 1 0 0 1 1 1 0 0 1 0 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 1 1 0 1 1 0 1 1 1 1 1 1 1 1 0 0 0 1 0 0 1 1 1 0 0 1 0 1 0 0 1 0 0 1 1 0 1 1 0 1 1 1 1 0 1 1 1 1 1 1 1 1 1 0 1 1 1 1 0 0 1 0 1 1 0 0 1 1 0 0 1 1 1 1 0 1 1 0 0 0 1 0 1 0 1 1 1 0 1 1 0 0 1 0 0 0 0 1 0 0 0 1 0 1 0 1 1 0 1 0 0 0 0 1 1 0 0 1 1 1 0 1 1 1 1 1 0 0 1 1 0 1 1 0 0 1 0 1 1 1 1 0 1 1 1 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 1 0 1 1 0 1 1 0 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 0 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 0 1 0 1 1 1 1 0 0 0 1 1 1 1 0 1 0 1 0 1 1 1 0 1 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1 1 1 1 1 1 0 0 1 0 0 0 1 0 0 1 1 1 1 1 0 1 1 1 1 1 0 1 1 1 0 1 1 0 0 1 1 1 1 1 1 0 1 1 1 1 1 1 1 0 1 1 1 1 1 0 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 0 1 0 0 1 0 1 1 1 1 1 0 1 1 0 1 0 1 1 0 1 0 1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 0 1 0 1 1 0 1 1 1 1 1 0 0 1 0 1 0 1 1 1 1 1 0 1 1 0 1 0 1 0 0 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 0 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 1]
A partir de aquí, vemos que cada etiqueta está vinculada a valores binarios de 0 y 1, donde 0 representa tumores malignos y 1 representa tumores benignos.
Python3
print(feature_names)
Producción:
['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' 'smoothness 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']
Aquí, vemos las 30 características o atributos que tiene cada conjunto de datos del tumor. Usaremos los valores numéricos de estas características para entrenar nuestro modelo y realizar la predicción correcta, ya sea que un tumor sea o no maligno o benigno, en función de estas características.
Python3
print(features)
Producción:
[[1.799e+01 1.038e+01 1.228e+02 ... 2.654e-01 4.601e-01 1.189e-01] [2.057e+01 1.777e+01 1.329e+02 ... 1.860e-01 2.750e-01 8.902e-02] [1.969e+01 2.125e+01 1.300e+02 ... 2.430e-01 3.613e-01 8.758e-02] ... [1.660e+01 2.808e+01 1.083e+02 ... 1.418e-01 2.218e-01 7.820e-02] [2.060e+01 2.933e+01 1.401e+02 ... 2.650e-01 4.087e-01 1.240e-01] [7.760e+00 2.454e+01 4.792e+01 ... 0.000e+00 2.871e-01 7.039e-02]]
Este es un enorme conjunto de datos que contiene los valores numéricos de los 30 atributos de las 569 instancias de datos de tumores.
Entonces, a partir de los datos anteriores, podemos concluir que el primer caso de tumor es maligno y tiene un radio medio de valor 1.79900000e+01.
Paso #4: Organizar los datos en Conjuntos.
Para probar la precisión de nuestro clasificador, debemos probar el modelo en datos no vistos. Entonces, antes de construir el modelo, dividiremos nuestros datos en dos conjuntos, a saber, conjunto de entrenamiento y conjunto de prueba. Usaremos el conjunto de entrenamiento para entrenar y evaluar el modelo y luego usaremos el modelo entrenado para hacer predicciones en el conjunto de prueba invisible.
El módulo sklearn tiene una función integrada llamada train_test_split(), que divide automáticamente los datos en estos conjuntos. Usaremos esta función para dividir los datos.
Python3
# importing the function from sklearn.model_selection import train_test_split # splitting the data train, test, train_labels, test_labels = train_test_split(features, labels, test_size = 0.33, random_state = 42)
La función train_test_split() divide aleatoriamente los datos usando el parámetro test_size . Lo que hemos hecho aquí es que hemos partido el 33% de los datos originales en datos de prueba (test). Los datos restantes (tren) son los datos de entrenamiento. Además, tenemos etiquetas respectivas tanto para las variables de tren como para las variables de prueba, es decir, train_labels y test_labels.
Para obtener más información sobre cómo usar la función train_test_split(), puede consultar la documentación oficial .
Paso #5: Construyendo el Modelo.
Hay muchos modelos de aprendizaje automático para elegir. Todos ellos tienen sus propias ventajas y desventajas. Para este modelo, usaremos el algoritmo Naive Bayes que generalmente funciona bien en tareas de clasificación binaria. En primer lugar, importe el módulo GaussianNB e inicialícelo con la función GaussianNB(). Luego entrene el modelo ajustándolo a los datos en el conjunto de datos usando el método fit().
Python3
# importing the module of the machine learning model from sklearn.naive_bayes import GaussianNB # initializing the classifier gnb = GaussianNB() # training the classifier model = gnb.fit(train, train_labels)
Una vez que se completa el entrenamiento, podemos usar el modelo entrenado para hacer predicciones en nuestro conjunto de prueba que hemos preparado antes. Para hacer eso, usaremos la función predict() incorporada que devuelve una array de valores de predicción para la instancia de datos en el conjunto de prueba. Luego imprimiremos nuestras predicciones usando la función print().
Python3
# making the predictions predictions = gnb.predict(test) # printing the predictions print(predictions)
Producción:
[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 0 1 1 0 1 1 0 1 1 1 1 1 1 0 0 0 1 1]
Del resultado anterior, vemos que la función predict() devolvió una array de 0 y 1. Estos valores representan los valores predichos del conjunto de pruebas para la clase de tumor (maligno o benigno).
Paso #6: Evaluación de la precisión del modelo entrenado.
Como ahora hemos pronosticado valores, podemos evaluar la precisión de nuestro modelo comparándolo con las etiquetas reales del conjunto de prueba, es decir, comparando las predicciones con test_labels. Para este propósito, utilizaremos la función Accuracy_Score () incorporada en el módulo Sklearn.
Python3
# importing the accuracy measuring function from sklearn.metrics import accuracy_score # evaluating the accuracy print(accuracy_score(test_labels, predictions))
Producción:
0.9414893617021277
Entonces, descubrimos que este clasificador de aprendizaje automático basado en el algoritmo Naive Bayes tiene una precisión del 94,15 % para predecir si un tumor es maligno o benigno.