02.6 Clasificación - Ejercicio para entregar sobre variedades vínicolas¶
import matplotlib.pyplot as plt
%matplotlib inline
from IPython import display
import numpy as np
Se va a utilizar un archivo con información de variedades vinícolas¶
# Se preparan las columnas a tratar
import pandas as pd
df_wine = pd.read_csv('data/wine.csv', header=None)
df_wine.columns = ['Class label', 'Alcohol',
'Malic acid', 'Ash',
'Alcalinity of ash',
'Magnesium', 'Total phenols',
'Flavanoids', 'Nonflavanoid phenols',
'Proanthocyanins',
'Color intensity', 'Hue',
'OD280/OD315 of diluted wines'
,'Proline']
# Se borra la clase 1
df_wine = df_wine[df_wine['Class label'] != 1]
df_wine.head()
# Se toma el campo 'Class label' como variable objetivo y
# Se toman los campos 'Alcohol' y 'OD280/OD315 of diluted wines' como características sobre una matriz X
y = df_wine['Class label'].values
X = df_wine[['Alcohol', 'OD280/OD315 of diluted wines']].values
np.unique(y)
array([2, 3])
Presentar una vista del dataframe cargado¶
Preproceso de datos¶
NOTA A sklearn.metrics:__ Algunas métricas se definen esencialmente para tareas de clasificación binaria (por ejemplo, f1_score, roc_auc_score). En estos casos, por defecto solo se evalúa la etiqueta positiva, asumiendo por defecto que la clase positiva está etiquetada como 1 (aunque esto puede configurarse a través del parámetro pos_label).
Por lo tanto hay dos alternativas:
Se recodifica la variable objetivo y, que contiene la etiqueta ‘Class label’ para que adopte los valores (0,1)
Este ejemplo se convierte en una clasificación binaria, y se pueden mostrar sus métricas con sklearn.metrics
La otra posibilidad es:
No alterar los valores de y
Indicar en las llamadas a sklearn.metrics en pos_label la etiqueta que funciona como verdadero (3 por ejemplo).
Y finalmente se trocea el conjunto de entrada en entrenamiento 80% y prueba 20%
from sklearn.preprocessing import LabelEncoder
#le = LabelEncoder()
#y = le.fit_transform(y)
print(np.unique(y))
# Troceamos las caracteristicas de X en un 80% de entrenamiento y un 20% de prueba
[2 3]
Hacer un entrenamiento con la clase GaussianNB que implementa naive-Bayes en sk-learn¶
Entrenar el modelo con X_train, y_train
Validar con X_test, y_test utilizando la librería sklearn.metrics. Al ser una clasificación binario se pueden obtener métricas tal como exactitud, precisión y sensibilidad
Se puede verificar que la exactitud coincide con el recuento de aciertos
Se muestra la correspondiente matriz de confusión¶
Repetir el entrenamiento con la clase DecissionTreeClassifier que implementa el árbol de decisión en sk-learn¶
Entrenar el modelo con X_train, y_train
Validar con X_test, y_test utilizando la librería sklearn.metrics.
Matriz de confusión
De forma volutaria, se puede buscar la documentación de la clase RandomForestClassifier¶
Esta clase está implementada en la librería sklearn.ensemble
RamdomForest implementa internamente varios árboles de decisión que se ensamblan y se toma como resultado para la clasificación el voto mayoritario
Parámetros principales del constructor:
n_estimators : número de árboles, 100 por defecto
criterion : criterio de partición (‘gini’, ‘entropy’), por defecto es ‘gini’.
Para más información:
https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.RandomForestClassifier.html
De forma voluntaria también se puede aplicar la implementación del Bagging¶
Se realizarán 100 repeticiones utilizando árboles de decisión
Ahora se hace uso de N clasificadores entrenados para predecir con voto mayoritario el conjunto de test
Se usa la moda como forma de obtener la etiqueta más votada