Mejora del rendimiento de los modelos de aprendizaje automático
Mejora del rendimiento con conjuntos
Los conjuntos pueden darnos un impulso en el resultado del aprendizaje automático al combinar varios modelos. Básicamente, los modelos de conjunto constan de varios modelos de aprendizaje supervisado entrenados individualmente y sus resultados se combinan de varias formas para lograr un mejor rendimiento predictivo en comparación con un solo modelo. Los métodos de conjunto se pueden dividir en los siguientes dos grupos:
Métodos de conjunto secuencial
Como su nombre lo indica, en este tipo de métodos de conjunto, los alumnos base se generan secuencialmente. La motivación de tales métodos es explotar la dependencia entre los alumnos de base.
Métodos de conjuntos paralelos
Como su nombre lo indica, en este tipo de métodos conjuntos, los alumnos base se generan en paralelo. La motivación de tales métodos es explotar la independencia entre los alumnos de base.
Métodos de aprendizaje en conjunto
Los siguientes son los métodos de aprendizaje por conjuntos más populares, es decir, los métodos para combinar las predicciones de diferentes modelos:
Harpillera
El término ensacado también se conoce como agregación bootstrap. En los métodos de ensacado, el modelo de conjunto intenta mejorar la precisión de la predicción y disminuir la varianza del modelo combinando predicciones de modelos individuales entrenados sobre muestras de entrenamiento generadas aleatoriamente. La predicción final del modelo de conjunto se dará calculando el promedio de todas las predicciones de los estimadores individuales. Uno de los mejores ejemplos de métodos de ensacado son los bosques aleatorios.
Impulsar
En el método de impulso, el principio principal de la construcción del modelo de conjunto es construirlo de forma incremental entrenando cada estimador del modelo base secuencialmente. Como sugiere el nombre, básicamente combina varios estudiantes de base de semanas, entrenados secuencialmente en múltiples iteraciones de datos de entrenamiento, para construir un conjunto poderoso. Durante el entrenamiento de los estudiantes de base semanal, se asignan pesos más altos a aquellos estudiantes que fueron clasificados erróneamente anteriormente. El ejemplo de método de impulso es AdaBoost.
Votación
En este modelo de aprendizaje conjunto, se construyen múltiples modelos de diferentes tipos y se utilizan algunas estadísticas simples, como calcular la media o la mediana, etc., para combinar las predicciones. Esta predicción servirá como entrada adicional para el entrenamiento para hacer la predicción final.
Algoritmos de ensamble de ensacado
Los siguientes son tres algoritmos de ensamble de ensacado:
Árbol de decisión en bolsa
Como sabemos, los métodos de ensamble de ensacado funcionan bien con los algoritmos que tienen alta varianza y, en este sentido, el mejor es el algoritmo de árbol de decisión. En la siguiente receta de Python, vamos a construir un modelo de conjunto de árbol de decisión en bolsas usando la función BaggingClassifier de sklearn con DecisionTreeClasifier (un algoritmo de árboles de clasificación y regresión) en el conjunto de datos de diabetes de los indios Pima.
Primero, importe los paquetes necesarios de la siguiente manera:
from pandas import read_csv
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
from sklearn.ensemble import BaggingClassifier
from sklearn.tree import DecisionTreeClassifier
Ahora, debemos cargar el conjunto de datos de diabetes Pima como hicimos en los ejemplos anteriores:
path = r"C:\pima-indians-diabetes.csv"
headernames = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(path, names=headernames)
array = data.values
X = array[:,0:8]
Y = array[:,8]
A continuación, proporcione la entrada para una validación cruzada de 10 veces de la siguiente manera:
seed = 7
kfold = KFold(n_splits=10, random_state=seed)
cart = DecisionTreeClassifier()
Necesitamos proporcionar la cantidad de árboles que vamos a construir. Aquí estamos construyendo 150 árboles -
num_trees = 150
A continuación, cree el modelo con la ayuda del siguiente script:
model = BaggingClassifier(base_estimator=cart, n_estimators=num_trees, random_state=seed)
Calcule e imprima el resultado de la siguiente manera:
results = cross_val_score(model, X, Y, cv=kfold)
print(results.mean())
Salida
0.7733766233766234
El resultado anterior muestra que obtuvimos alrededor del 77% de precisión de nuestro modelo de clasificador de árbol de decisión en bolsas.
Bosque aleatorio
Es una extensión de los árboles de decisión empaquetados. Para los clasificadores individuales, las muestras del conjunto de datos de entrenamiento se toman con reemplazo, pero los árboles se construyen de tal manera que se reduce la correlación entre ellos. Además, se considera que un subconjunto aleatorio de características elige cada punto de división en lugar de elegir con avidez el mejor punto de división en la construcción de cada árbol.
En la siguiente receta de Python, vamos a construir un modelo de conjunto de bosque aleatorio en bolsas utilizando la clase RandomForestClassifier de sklearn en el conjunto de datos de diabetes de los indios Pima.
Primero, importe los paquetes necesarios de la siguiente manera:
from pandas import read_csv
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
from sklearn.ensemble import RandomForestClassifier
Ahora, debemos cargar el conjunto de datos de diabetes Pima como se hizo en ejemplos anteriores:
path = r"C:\pima-indians-diabetes.csv"
headernames = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(path, names=headernames)
array = data.values
X = array[:,0:8]
Y = array[:,8]
A continuación, proporcione la entrada para una validación cruzada de 10 veces de la siguiente manera:
seed = 7
kfold = KFold(n_splits=10, random_state=seed)
Necesitamos proporcionar la cantidad de árboles que vamos a construir. Aquí estamos construyendo 150 árboles con puntos de división elegidos entre 5 características:
num_trees = 150
max_features = 5
A continuación, cree el modelo con la ayuda del siguiente script:
model = RandomForestClassifier(n_estimators=num_trees, max_features=max_features)
Calcule e imprima el resultado de la siguiente manera:
results = cross_val_score(model, X, Y, cv=kfold)
print(results.mean())
Salida
0.7629357484620642
El resultado anterior muestra que obtuvimos alrededor del 76% de precisión de nuestro modelo de clasificador de bosque aleatorio en bolsas.
Árboles adicionales
Es otra extensión del método de conjunto de árbol de decisión en bolsa. En este método, los árboles aleatorios se construyen a partir de las muestras del conjunto de datos de entrenamiento.
En la siguiente receta de Python, vamos a construir un modelo de conjunto de árbol adicional usando la clase ExtraTreesClassifier de sklearn en el conjunto de datos de diabetes de los indios Pima.
Primero, importe los paquetes necesarios de la siguiente manera:
from pandas import read_csv
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
from sklearn.ensemble import ExtraTreesClassifier
Ahora, debemos cargar el conjunto de datos de diabetes Pima como se hizo en ejemplos anteriores:
path = r"C:\pima-indians-diabetes.csv"
headernames = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(path, names=headernames)
array = data.values
X = array[:,0:8]
Y = array[:,8]
A continuación, proporcione la entrada para una validación cruzada de 10 veces de la siguiente manera:
seed = 7
kfold = KFold(n_splits=10, random_state=seed)
Necesitamos proporcionar la cantidad de árboles que vamos a construir. Aquí estamos construyendo 150 árboles con puntos de división elegidos entre 5 características:
num_trees = 150
max_features = 5
A continuación, cree el modelo con la ayuda del siguiente script:
model = ExtraTreesClassifier(n_estimators=num_trees, max_features=max_features)
Calcule e imprima el resultado de la siguiente manera:
results = cross_val_score(model, X, Y, cv=kfold)
print(results.mean())
Salida
0.7551435406698566
El resultado anterior muestra que obtuvimos alrededor del 75.5% de precisión de nuestro modelo de clasificador de árboles adicionales en bolsas.
Aumento de algoritmos de conjuntos
Los siguientes son los dos algoritmos de conjuntos de refuerzo más comunes:
AdaBoost
Es uno de los algoritmos de conjunto de impulso más exitosos. La clave principal de este algoritmo está en la forma en que dan ponderaciones a las instancias en el conjunto de datos. Debido a esto, el algoritmo debe prestar menos atención a las instancias mientras construye modelos posteriores.
En la siguiente receta de Python, vamos a construir el modelo de conjunto Ada Boost para la clasificación usando la clase AdaBoostClassifier de sklearn en el conjunto de datos de diabetes de los indios Pima.
Primero, importe los paquetes necesarios de la siguiente manera:
from pandas import read_csv
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
from sklearn.ensemble import AdaBoostClassifier
Ahora, debemos cargar el conjunto de datos de diabetes Pima como se hizo en ejemplos anteriores:
path = r"C:\pima-indians-diabetes.csv"
headernames = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(path, names=headernames)
array = data.values
X = array[:,0:8]
Y = array[:,8]
A continuación, proporcione la entrada para una validación cruzada de 10 veces de la siguiente manera:
seed = 5
kfold = KFold(n_splits=10, random_state=seed)
Necesitamos proporcionar la cantidad de árboles que vamos a construir. Aquí estamos construyendo 150 árboles con puntos de división elegidos entre 5 características:
num_trees = 50
A continuación, cree el modelo con la ayuda del siguiente script:
model = AdaBoostClassifier(n_estimators=num_trees, random_state=seed)
Calcule e imprima el resultado de la siguiente manera:
results = cross_val_score(model, X, Y, cv=kfold)
print(results.mean())
Salida
0.7539473684210527
El resultado anterior muestra que obtuvimos alrededor del 75% de precisión de nuestro modelo de conjunto de clasificador AdaBoost.
Impulso de gradiente estocástico
También se llama máquinas de aumento de gradiente. En la siguiente receta de Python, vamos a crear un modelo de conjunto de aumento de gradiente estocástico para la clasificación utilizando la clase GradientBoostingClassifier de sklearn en el conjunto de datos de diabetes de los indios Pima.
Primero, importe los paquetes necesarios de la siguiente manera:
from pandas import read_csv
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
from sklearn.ensemble import GradientBoostingClassifier
Ahora, debemos cargar el conjunto de datos de diabetes Pima como se hizo en ejemplos anteriores:
path = r"C:\pima-indians-diabetes.csv"
headernames = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(path, names=headernames)
array = data.values
X = array[:,0:8]
Y = array[:,8]
A continuación, proporcione la entrada para una validación cruzada de 10 veces de la siguiente manera:
seed = 5
kfold = KFold(n_splits=10, random_state=seed)
Necesitamos proporcionar la cantidad de árboles que vamos a construir. Aquí estamos construyendo 150 árboles con puntos de división elegidos entre 5 características:
num_trees = 50
A continuación, cree el modelo con la ayuda del siguiente script:
model = GradientBoostingClassifier(n_estimators=num_trees, random_state=seed)
Calcule e imprima el resultado de la siguiente manera:
results = cross_val_score(model, X, Y, cv=kfold)
print(results.mean())
Salida
0.7746582365003418
El resultado anterior muestra que obtuvimos alrededor del 77.5% de precisión de nuestro modelo de conjunto de clasificador Gradient Boosting.
Algoritmos de conjunto de votaciones
Como se discutió, la votación primero crea dos o más modelos independientes a partir del conjunto de datos de entrenamiento y luego un clasificador de votación ajustará el modelo junto con tomar el promedio de las predicciones del submodelo siempre que se necesiten nuevos datos.
En la siguiente receta de Python, vamos a construir un modelo de conjunto de votación para la clasificación usando la clase VotingClassifier de sklearn en el conjunto de datos de diabetes de los indios Pima. Estamos combinando las predicciones de regresión logística, clasificador de árbol de decisión y SVM juntos para un problema de clasificación de la siguiente manera:
Primero, importe los paquetes necesarios de la siguiente manera:
from pandas import read_csv
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeClassifier
from sklearn.svm import SVC
from sklearn.ensemble import VotingClassifier
Ahora, debemos cargar el conjunto de datos de diabetes Pima como se hizo en ejemplos anteriores:
path = r"C:\pima-indians-diabetes.csv"
headernames = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(path, names=headernames)
array = data.values
X = array[:,0:8]
Y = array[:,8]
A continuación, proporcione la entrada para una validación cruzada de 10 veces de la siguiente manera:
kfold = KFold(n_splits=10, random_state=7)
A continuación, necesitamos crear submodelos de la siguiente manera:
estimators = []
model1 = LogisticRegression()
estimators.append(('logistic', model1))
model2 = DecisionTreeClassifier()
estimators.append(('cart', model2))
model3 = SVC()
estimators.append(('svm', model3))
Ahora, cree el modelo de conjunto de votación combinando las predicciones de los submodelos creados anteriormente.
ensemble = VotingClassifier(estimators)
results = cross_val_score(ensemble, X, Y, cv=kfold)
print(results.mean())
Salida
0.7382262474367738
El resultado anterior muestra que obtuvimos alrededor del 74% de precisión de nuestro modelo de conjunto de clasificadores de votación.