Scikit Learn: métodos de impulso
En este capítulo, aprenderemos sobre los métodos de refuerzo en Sklearn, que permiten construir un modelo de conjunto.
Los métodos de impulso construyen el modelo de conjunto de forma incremental. El principio principal es construir el modelo de forma incremental entrenando cada estimador del modelo base de forma secuencial. Para construir un conjunto poderoso, estos métodos básicamente combinan aprendices de varias semanas que se entrenan secuencialmente en múltiples iteraciones de datos de entrenamiento. El módulo sklearn.ensemble tiene los siguientes dos métodos de refuerzo.
AdaBoost
Es uno de los métodos de conjunto de impulso más exitosos cuya clave principal está en la forma en que dan ponderaciones a las instancias en el conjunto de datos. Es por eso que el algoritmo necesita prestar menos atención a las instancias mientras construye modelos posteriores.
Clasificación con AdaBoost
Para crear un clasificador AdaBoost, el módulo Scikit-learn proporciona sklearn.ensemble.AdaBoostClassifier. Al construir este clasificador, el parámetro principal que usa este módulo esbase_estimator. Aquí, base_estimator es el valor delbase estimatora partir del cual se construye el conjunto potenciado. Si elegimos el valor de este parámetro como ninguno, el estimador base seríaDecisionTreeClassifier(max_depth=1).
Ejemplo de implementación
En el siguiente ejemplo, estamos construyendo un clasificador AdaBoost usando sklearn.ensemble.AdaBoostClassifier y también predecir y comprobar su puntuación.
from sklearn.ensemble import AdaBoostClassifier
from sklearn.datasets import make_classification
X, y = make_classification(n_samples = 1000, n_features = 10,n_informative = 2, n_redundant = 0,random_state = 0, shuffle = False)
ADBclf = AdaBoostClassifier(n_estimators = 100, random_state = 0)
ADBclf.fit(X, y)
Salida
AdaBoostClassifier(algorithm = 'SAMME.R', base_estimator = None,
learning_rate = 1.0, n_estimators = 100, random_state = 0)
Ejemplo
Una vez ajustado, podemos predecir nuevos valores de la siguiente manera:
print(ADBclf.predict([[0, 2, 3, 0, 1, 1, 1, 1, 2, 2]]))
Salida
[1]
Ejemplo
Ahora podemos verificar la puntuación de la siguiente manera:
ADBclf.score(X, y)
Salida
0.995
Ejemplo
También podemos usar el conjunto de datos sklearn para construir un clasificador usando el método Extra-Tree. Por ejemplo, en un ejemplo que se muestra a continuación, estamos usando un conjunto de datos Pima-Indian.
from pandas import read_csv
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
from sklearn.ensemble import AdaBoostClassifier
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]
seed = 5
kfold = KFold(n_splits = 10, random_state = seed)
num_trees = 100
max_features = 5
ADBclf = AdaBoostClassifier(n_estimators = num_trees, max_features = max_features)
results = cross_val_score(ADBclf, X, Y, cv = kfold)
print(results.mean())
Salida
0.7851435406698566
Regresión con AdaBoost
Para crear un regresor con el método Ada Boost, la biblioteca Scikit-learn proporciona sklearn.ensemble.AdaBoostRegressor. Mientras construye el regresor, utilizará los mismos parámetros que utilizasklearn.ensemble.AdaBoostClassifier.
Ejemplo de implementación
En el siguiente ejemplo, estamos construyendo un regresor AdaBoost usando sklearn.ensemble.AdaBoostregressor y también predecir nuevos valores mediante el método predict ().
from sklearn.ensemble import AdaBoostRegressor
from sklearn.datasets import make_regression
X, y = make_regression(n_features = 10, n_informative = 2,random_state = 0, shuffle = False)
ADBregr = RandomForestRegressor(random_state = 0,n_estimators = 100)
ADBregr.fit(X, y)
Salida
AdaBoostRegressor(base_estimator = None, learning_rate = 1.0, loss = 'linear',
n_estimators = 100, random_state = 0)
Ejemplo
Una vez ajustado, podemos predecir a partir del modelo de regresión de la siguiente manera:
print(ADBregr.predict([[0, 2, 3, 0, 1, 1, 1, 1, 2, 2]]))
Salida
[85.50955817]
Aumento del árbol de degradado
También es llamado Gradient Boosted Regression Trees(GRBT). Es básicamente una generalización del impulso a funciones de pérdida diferenciables arbitrarias. Produce un modelo de predicción en forma de un conjunto de modelos de predicción de semanas. Puede utilizarse para los problemas de regresión y clasificación. Su principal ventaja radica en el hecho de que manejan naturalmente los datos de tipo mixto.
Clasificación con Gradient Tree Boost
Para crear un clasificador Gradient Tree Boost, el módulo Scikit-learn proporciona sklearn.ensemble.GradientBoostingClassifier. Al construir este clasificador, el parámetro principal que usa este módulo es 'pérdida'. Aquí, 'pérdida' es el valor de la función de pérdida a optimizar. Si elegimos pérdida = desviación, se refiere a la desviación para la clasificación con salidas probabilísticas.
Por otro lado, si elegimos el valor de este parámetro a exponencial, recupera el algoritmo AdaBoost. El parámetron_estimatorscontrolará el número de alumnos por semana. Un hiperparámetro llamadolearning_rate (en el rango de (0.0, 1.0]) controlará el sobreajuste por contracción.
Ejemplo de implementación
En el siguiente ejemplo, estamos construyendo un clasificador Gradient Boosting usando sklearn.ensemble.GradientBoostingClassifier. Estamos adaptando este clasificador con alumnos de 50 semanas.
from sklearn.datasets import make_hastie_10_2
from sklearn.ensemble import GradientBoostingClassifier
X, y = make_hastie_10_2(random_state = 0)
X_train, X_test = X[:5000], X[5000:]
y_train, y_test = y[:5000], y[5000:]
GDBclf = GradientBoostingClassifier(n_estimators = 50, learning_rate = 1.0,max_depth = 1, random_state = 0).fit(X_train, y_train)
GDBclf.score(X_test, y_test)
Salida
0.8724285714285714
Ejemplo
También podemos usar el conjunto de datos sklearn para construir un clasificador usando Gradient Boosting Classifier. Como en el siguiente ejemplo, estamos usando un conjunto de datos Pima-Indian.
from pandas import read_csv
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
from sklearn.ensemble import GradientBoostingClassifier
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]
seed = 5
kfold = KFold(n_splits = 10, random_state = seed)
num_trees = 100
max_features = 5
ADBclf = GradientBoostingClassifier(n_estimators = num_trees, max_features = max_features)
results = cross_val_score(ADBclf, X, Y, cv = kfold)
print(results.mean())
Salida
0.7946582356674234
Regresión con Gradient Tree Boost
Para crear un regresor con el método Gradient Tree Boost, la biblioteca Scikit-learn proporciona sklearn.ensemble.GradientBoostingRegressor. Puede especificar la función de pérdida para la regresión mediante la pérdida del nombre del parámetro. El valor predeterminado de pérdida es 'ls'.
Ejemplo de implementación
En el siguiente ejemplo, estamos construyendo un regresor de aumento de gradiente usando sklearn.ensemble.GradientBoostingregressor y también encontrar el error cuadrático medio usando el método mean_squared_error ().
import numpy as np
from sklearn.metrics import mean_squared_error
from sklearn.datasets import make_friedman1
from sklearn.ensemble import GradientBoostingRegressor
X, y = make_friedman1(n_samples = 2000, random_state = 0, noise = 1.0)
X_train, X_test = X[:1000], X[1000:]
y_train, y_test = y[:1000], y[1000:]
GDBreg = GradientBoostingRegressor(n_estimators = 80, learning_rate=0.1,
max_depth = 1, random_state = 0, loss = 'ls').fit(X_train, y_train)
Una vez ajustado, podemos encontrar el error cuadrático medio de la siguiente manera:
mean_squared_error(y_test, GDBreg.predict(X_test))
Salida
5.391246106657164