Tutorial de clasificación scikit-learn

Tutorial de clasificación scikit-learn

  • Inteligencia artificial
6 min de lectura Actualizado Oct 17, 2019

Puntos clave: Este tutorial demuestra cómo utilizar scikit-learn para tareas de clasificación, centrándose en predecir la diabetes mediante indicadores de salud. Cubre la preparación de datos, el entrenamiento de modelos con Support Vector Machine y la evaluación mediante métricas como la matriz de confusión.

  • Utiliza datos de salud como glucosa y IMC de personas diabéticas y no diabéticas.
  • Emplea el SVC de scikit-learn para el entrenamiento de modelos y la matriz de confusión para la evaluación de la precisión.

Aquí mostramos cómo utilizar scikit-learn. El código de este ejemplo está aquí. Descarga los datos de Kaggle aquí.

¿Qué framework de aprendizaje automático debería te utiliza?

Antes de mostrar te cómo funciona scikit-learn, es trabajo de discutir qué framework de ML usar. Lo pongo desde el principio porque demasiada gente que empieza en ciencia de datos piensa que debe Comienza con TensorFlow, pero eso están excesivo para la mayoría de tus problemas. Para enfoques de bajo nivel, en los que TensorFlow se especializa, están demasiado complicado; son enfoques más fáciles.

Los datos

scikit-learn TensorFlow Keras Spark ML

Este framework de ML de propósito general está fácil de utilizar y puede abordar la mayoría de los problemas de ML.

Están muy populares entre los científicos de datos. Incluso los científicos de datos que utilizan otros frameworks suelen desplegar utilidades scikit-learn en parte de su código.

TensorFlow está diseñado para un solo propósito: redes neuronales. Está de muy bajo nivel, lo que significa que te necesitarás mucho conocimiento sobre arrays NumPy y teoría de redes neuronales.

Google vende CPUs especiales, llamadas TPU, que son diseñadas para procesar tensores a gran escala. Así que te puedes Ve que está diseñada para tareas intensivas en computación, como el reconocimiento facial, pero la mayoría de los problemas de negocio son menos complicados que el reconocimiento facial.

Hemos escrito tutoriales sobre cómo utilizar ML con TensorFlow y Keras aquí.

Si te quieres utiliza TensorFlow, entonces utiliza Keras, ya que actúa como un front-end y lo hace mucho más fácil. te menos probable que Haz errores que produzcan respuestas incorrectas.

Keras también funciona junto a otros frameworks de ML populares, facilitando su uso.

Aquí explicamos cómo utilizar los Keras.

 

SciKit-Learn están diseñado para funcionar en un solo servidor. Si te tiene una gran cantidad de datos, te quizá quieras utiliza Spark ML, ya que está diseñado para funcionar en un clúster.

Y Spark ML está fácil de entender.

Todos los frameworks de aprendizaje automático en Python Comienza prácticamente igual, empezando con las mismas herramientas:

  • Pandas. Esto organiza csv, json, Spark y otros tipos de datos en filas y columnas. Pandas simplifica mucho todo tipo de datos, pero sus funciones avanzadas pueden Obtén complicadas.
  • NumPy. Esto está estrechamente ligado tanto a Pandas como a matplotlib. NumPy rinde mejor al manejar la tarea más importante de aprendizaje automático: la operación computacionalmente costosa de multiplicar matrices en múltiples dimensiones. A medida que crecen, pueden dejar rápidamente tu ordenador sin memoria.
  • Matplotlib. Esto dibuja gráficos, como histogramas, diagramas de líneas, etc. Graficar datos están una buena forma de explorar datos mientras te trabajas con ellos, y pueden ilustrar tus conclusiones al final del programa.
  • Seaborn. Este marco, además de matplotlib, está diseñado específicamente para ciencia de datos.

Los datos que estamos analizando están glucosa, índice de masa corporal, etc., tomados de dos grupos de personas: los que son diabéticos y los que no son diabéticos. Esa clasificación 1 (diabético) y 0 (no) está en la columna de Resultados. El objetivo están utilizar esos datos para entrenar un modelo predictivo que muestre, dado ciertos indicadores de salud, si una persona está probable o no que tenga o Obtén diabetes.

El algoritmo

Son muchas formas de abordar un problema de clasificación, como la regresión logística o incluso redes neuronales. Aquí utilizamos la Máquina de Vectores de Soporte (SVM).

El primer paso están leer los datos en un dataframe.

    import pandas as pd
import seaborn as sns
import numpy as np
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split

data = pd.read_csv('/home/ubuntu/Downloads/diabetes.csv', delimiter=',')

Entonces, échale un vistazo.

    data.head()

El aprendizaje automático requiere que te dividan los datos en características y etiquetas.

  • Características son las características de lo que te son observando, también conocidas como variables independientes.
  • Las etiquetas son lo que te son intentando predecir, es decir, las variables dependientes.

La clasificación significa que son un conjunto finito de resultados. Aquí son dos, así que te podría llamarlo un problema de clasificación binaria.

Como te puede Ve, el resultado, tenga o no diabetes, están la última columna. Así que, el resto son características. Será fácil separar estos datos ya que las etiquetas son al final.

    Pregnancies  Glucose  BloodPressure  SkinThickness  Insulin   BMI  \
0            6      148             72             35        0  33.6   
1            1       85             66             29        0  26.6   
2            8      183             64              0        0  23.3   
3            1       89             66             23       94  28.1   
4            0      137             40             35      168  43.1   

   DiabetesPedigreeFunction  Age  Outcome  
0                     0.627   50        1  
1                     0.351   31        0  
2                     0.672   32        1  
3                     0.167   21        0  
4                     2.288   33        1

El comando Pandas drop() significa Crea un nuevo dataframe tomando un dataframe existente y eliminando una o más columnas. axis=1 significa que nos referimos a son columnas y no a las filas (que para Pandas están también llamado el índice).

    x = data.drop("Outcome", axis=1)

data['Outcome'] están una serie Pandas y no un dataframe Pandas. Esto significa que solo tiene una columna, pero sigue teniendo la columna índice. np.ravel() la aplanará a un array.

    y=np.ravel(data['Outcome'])

El procedimiento estándar está tomar los datos de entrada y Crea conjuntos de datos de entrenamiento y prueba dividiéndolos por una cantidad. Aquí elegimos el 50%.

  • Se son utilizados conjuntos de datos de entrenamiento para entrenar el modelo.
  • Los conjuntos de datos de prueba son utilizados para Haz predicciones basadas en ese modelo entrenado.

Utilizamos x e y ya que la ecuación familiar para una recta y = mx + b. Para el aprendizaje automático, y están un vector y m y x son matrices, es decir, un vector de dimensión n. b están sesgo, que están un solo número real.

    x_train, x_test, y_train, y_test = train_test_split(x,y, test_size = 0.5, random_state=50)

Ahora normalizamos los datos. Básicamente, esto calcula el valor ( x - μ) / δ ) donde μ están la media y δ están la desviación estándar. Esto pone todas las características en la misma escala, lo cual están una práctica habitual de aprendizaje automático. En otras palabras, hace que los números grandes sean pequeños para que todos son aproximadamente del mismo tamaño.

    from sklearn.preprocessing import StandardScaler

scaler = StandardScaler().fit(x_train)

x_train = scaler.transform(x_train)

x_test = scaler.transform(x_test)

Primero, declaramos el modelo. Suon usando una máquina de vectores de soporte.

    from sklearn.svm import SVC
svc_model = SVC()

Luego lo entrenamos: es así de sencillo cuando te utiliza scikit-learn. No se requiere otra manipulación de datos.

    svc_model.fit(x_train, y_train)

La función fit() responde con esta información.

    SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0,
  decision_function_shape='ovr', degree=3, gamma='auto_deprecated',
  kernel='rbf', max_iter=-1, probability=False, random_state=None,
  shrinking=True, tol=0.001, verbose=False)

Ahora utilizamos los datos de prueba para Crea predicciones.

    y_predict = svc_model.predict(x_test)

Luego mostramos cuán precisas son esas predicciones creando lo que están llamada una matriz de confusión. Esto están una forma visual de Ve cuántas veces el modelo acertó y cuántas veces fue incorrecto.

    from sklearn.metrics import classification_report, confusion_matrix

cm = np.array(confusion_matrix(y_test, y_predict, labels=[0,1]))

confusion = pd.DataFrame(cm, index=['Diabetic', 'Not Diabetic'], columns=['Predicted Diabetes', 'Predicted Healthy'])
    Predicted Diabetes  Predicted Healthy
Diabetic                     225                 23
Not Diabetic                  68                 68

Al principio es un poco difícil entender esa pantalla, así que piénsalo así:

    Diabetic (Outcome = 1)	True positive. Patient is diabetic and model correctly predicted that.  	False positive. Patient was not diabetic but model said patient was diabetic.

Not Diabetic (Outcome = 0)	False positive. Patient was not diabetic, but model said patient was diabetic.
	True negative, patient not diabetic and model predicted that.

Aquí están una forma gráfica de mostrar los mismos resultados usando la potente extensión Seaborn de Matplotlib:

    sns.heatmap(confusion,annot=True,fmt='g')

El informe de clasificación publica un resumen del modelo, mostrando una precisión del 77%. Esto significa que nuestro modelo predice la diabetes con precisión el 77% de las veces.

    print(classification_report(y_test, y_predict))
    precision    recall  f1-score   support

           0       0.77      0.91      0.83       248
           1       0.75      0.50      0.60       136

   micro avg       0.76      0.76      0.76       384
   macro avg       0.76      0.70      0.72       384
weighted avg       0.76      0.76      0.75       384

Los resultados fueron casi los mismos que cuando usamos Keras como red neuronal.

Estas publicaciones son mías y no representan necesariamente la posición, estrategias u opinión de BMC.

Más de Inteligencia artificial

Suscríbete al Informe

Al registrarse para esta oferta te son confirmar que te leído y aceptado la Política de Privacidad de BMC.

Gracias te

Tú te has suscrito a The Brief
El Brief abarca la orquestación de mainframe y empresa—BMC AMI y Control-M—y la investigación de analistas, despliegues de clientes y eventos en ambas áreas.