Métodos de conjunto: técnicas elegantes para producir mejores resultados de aprendizaje automático
Publicado: 2022-03-11métodos Ensemble son técnicas que crean múltiples modelos y luego ellos se combinan para producir mejores resultados. métodos Ensemble generalmente produce soluciones más exactos que un único modelo haría. Este ha sido el caso en una serie de competiciones de aprendizaje de máquina, donde las soluciones ganadoras utilizan métodos de conjunto. En la popular competencia de Netflix, el ganador utilizó un método de conjunto para implementar un potente algoritmo de filtrado colaborativo. Otro ejemplo es KDD 2009, donde el ganador también utiliza métodos de conjunto. También se puede encontrar ganadores que utilizan estos métodos en competiciones Kaggle, por ejemplo, aquí está la entrevista con el ganador de la competencia CrowdFlower.
Es importante que entendamos unos terminologías antes de continuar con este artículo. A lo largo del artículo he utilizado el término “modelo” para describir la salida del algoritmo que se entrenó con los datos. Este modelo se utiliza luego para hacer predicciones. Este algoritmo puede ser cualquier algoritmo de aprendizaje automático como la regresión logística, árbol de decisiones, etc. Estos modelos, cuando se usan como entradas de métodos de conjunto, se denominan “modelos de base”.
En esta entrada del blog voy a cubrir métodos para la clasificación de conjunto y describir algunos métodos ampliamente conocidos de conjunto: el voto, apilar, embolsado y aumentando.
La votación y promediando Métodos basados en Ensemble
La votación y el promedio son dos de los métodos más fáciles de conjunto. Ambos son fáciles de entender y aplicar. La votación se utiliza para la clasificación y el promedio se utiliza para la regresión.
En ambos métodos, el primer paso es crear múltiples modelos de clasificación / regresión utilizando algún conjunto de datos de entrenamiento. Cada modelo de base puede ser creado usando diferentes divisiones de la misma formación de datos y el mismo algoritmo, o utilizando el mismo conjunto de datos con diferentes algoritmos, o cualquier otro método. Los siguientes pseudocódigo se muestra Python-esque el uso del mismo conjunto de datos de entrenamiento con diferentes algoritmos.
train = load_csv("train.csv") target = train["target"] train = train.drop("target") test = load_csv("test.csv") algorithms = [logistic_regression, decision_tree_classification, ...] #for classification algorithms = [linear_regression, decision_tree_regressor, ...] #for regression predictions = matrix(row_length=len(target), column_length=len(algorithms)) for i,algorithm in enumerate(algorithms): predictions[,i] = algorithm.fit(train, target).predict(test)De acuerdo con el pseudocódigo anterior, hemos creado las predicciones para cada modelo y las guardó en una matriz llamada predicciones que cada columna contiene las predicciones de un modelo.
la votación por mayoría
Cada modelo hace una predicción (votos) para cada instancia de prueba y la predicción de salida final es el que recibe más de la mitad de los votos. Si ninguna de las predicciones obtener más de la mitad de los votos, podemos decir que el método de conjunto no podía hacer una predicción estable para esta instancia. Aunque esta es una técnica ampliamente utilizada, puede intentar la más votada de predicción (aunque esto es menos de la mitad de los votos) como la predicción final. En algunos artículos, es posible que vea este método se llama “regla de la pluralidad”.
La votación ponderada
A diferencia de la votación por mayoría, donde cada modelo tiene los mismos derechos, podemos aumentar la importancia de uno o más modelos. En votación ponderada se cuenta la predicción de los mejores modelos múltiples veces. Encontrar un conjunto razonable de pesos depende de usted.
un simple promedio
En el método de promediado simple, para cada instancia de conjunto de datos de prueba, se calculan las predicciones medias. Este método reduce la frecuencia sobreajuste y crea un modelo de regresión más suave. Los pseudocódigo siguiente código muestra este método de promedio simple:
final_predictions = [] for row_number in len(predictions): final_predictions.append( mean(prediction[row_number, ]) )promedio ponderado
promedio ponderado es una versión ligeramente modificada de promediado simple, donde la predicción de cada modelo se multiplica por el peso y luego se calcula su media. El código siguiente pseudocódigo muestra el promedio ponderado:
weights = [..., ..., ...] #length is equal to len(algorithms) final_predictions = [] for row_number in len(predictions): final_predictions.append( mean(prediction[row_number, ]*weights) )Apilar múltiples modelos de máquinas de aprendizaje
Apilar, también conocido como generalización apilado, es un método de conjunto donde los modelos se combinan utilizando otro algoritmo de aprendizaje automático. La idea básica es la formación de algoritmos de aprendizaje automático con formación de datos y luego generar un nuevo conjunto de datos con estos modelos. A continuación, este nuevo conjunto de datos se utiliza como entrada para el algoritmo combinador de aprendizaje automático.
El pseudocódigo de un procedimiento de apilamiento se resume a continuación:
base_algorithms = [logistic_regression, decision_tree_classification, ...] #for classification stacking_train_dataset = matrix(row_length=len(target), column_length=len(algorithms)) stacking_test_dataset = matrix(row_length=len(test), column_length=len(algorithms)) for i,base_algorithm in enumerate(base_algorithms): stacking_train_dataset[,i] = base_algorithm.fit(train, target).predict(train) stacking_test_dataset[,i] = base_algorithm.predict(test) final_predictions = combiner_algorithm.fit(stacking_train_dataset, target).predict(stacking_test_dataset)Como se puede ver en el pseudocódigo anterior, la formación de datos para el algoritmo combinador se genera utilizando las salidas de los algoritmos de base. En el pseudocódigo, el algoritmo de base se genera utilizando formación de datos y luego el mismo conjunto de datos se utiliza de nuevo para hacer predicciones. Pero, como sabemos, en el mundo real no usamos el mismo conjunto de datos de entrenamiento para la predicción, por lo que para superar este problema es posible que vea algunas implementaciones de apilamiento, donde está dividido formación de datos. A continuación se puede ver un pseudocódigo en la formación de datos se divide antes de entrenar los algoritmos de base:

base_algorithms = [logistic_regression, decision_tree_classification, ...] #for classification stacking_train_dataset = matrix(row_length=len(target), column_length=len(algorithms)) stacking_test_dataset = matrix(row_length=len(test), column_length=len(algorithms)) for i,base_algorithm in enumerate(base_algorithms): for trainix, testix in split(train, k=10): #you may use sklearn.cross_validation.KFold of sklearn library stacking_train_dataset[testcv,i] = base_algorithm.fit(train[trainix], target[trainix]).predict(train[testix]) stacking_test_dataset[,i] = base_algorithm.fit(train).predict(test) final_predictions = combiner_algorithm.fit(stacking_train_dataset, target).predict(stacking_test_dataset)agregación de bootstrap
El nombre de agregación de bootstrap, también conocido como “embolsado”, resume los elementos clave de esta estrategia. En el algoritmo de ensacado, el primer paso implica la creación de múltiples modelos. Estos modelos se generan usando el mismo algoritmo con aleatorias sub-muestras del conjunto de datos que se extraen de la base de datos original al azar con el método de arranque de muestreo. En el muestreo bootstrap, algunos ejemplos originales aparecen más de una vez y algunos ejemplos originales no están presentes en la muestra. Si desea crear un sub-conjunto de datos con m elementos, hay que seleccionar un elemento de azar de los tiempos originales conjunto de datos m. Y si el objetivo es la generación n conjunto de datos, de seguir este paso n veces.
Al final, tenemos n conjuntos de datos, donde el número de elementos en cada conjunto de datos es m. La siguiente Python-esque muestreo pseudocódigo espectáculo bootstrap:
def bootstrap_sample(original_dataset, m): sub_dataset = [] for i in range(m): sub_dataset.append( random_one_element(original_dataset) ) return sub_datasetEl segundo paso en ensacado se agregación de los modelos generados. métodos bien conocidos, como el voto y el promedio, se utilizan para este propósito.
El aspecto general pseudocódigo como esto:
def bagging(n, m, base_algorithm, train_dataset, target, test_dataset): predictions = matrix(row_length=len(target), column_length=n) for i in range(n): sub_dataset = bootstrap_sample(train_dataset, m) predictions[,i] = base_algorithm.fit(original_dataset, target).predict(test_dataset) final_predictions = voting(predictions) # for classification final_predictions = averaging(predictions) # for regression return final_predictionsEn embolsado, cada sub-muestras pueden ser generados independientemente uno de otro. Por lo tanto la generación y la formación pueden realizarse en paralelo.
También puede encontrar aplicación de la estrategia de embolsado en algunos algoritmos. Por ejemplo, Random Bosque algoritmo utiliza la técnica de embolsado con algunas diferencias. Random Bosque utiliza la función de selección aleatoria, y el algoritmo de base de la misma es un algoritmo de árbol de decisión.
Impulsar: la conversión de modelos débiles a los fuertes
El término “potenciar” se utiliza para describir una familia de algoritmos que son capaces de convertir los modelos débiles a fuertes modelos. El modelo es débil si tiene una tasa de error sustancial, pero el rendimiento no es aleatoria (que resulta en una tasa de error de 0.5 para la clasificación binario). Impulsar incrementalmente construye un conjunto mediante la formación de cada modelo con el mismo conjunto de datos, pero donde los pesos de los casos se ajustan de acuerdo con el error de la última predicción. La idea principal está obligando a los modelos de centrarse en los casos que son difíciles. A diferencia de ensacado, impulsando es un método secuencial, y por lo tanto no se puede utilizar operaciones paralelas aquí.
El procedimiento general del algoritmo de impulsar se define como sigue:
def adjust_dataset(_train, errors): #create a new dataset by using the hardest instances ix = get_highest_errors_index(train) return concat(_train[ix], random_select(train)) models = [] _train = random_select(train) for i in range(n): #n rounds model = base_algorithm.fit(_train) predictions = model.predict(_train) models.append(model) errors = calculate_error(predictions) _train = adjust_dataset(_train, errors) final_predictions = combine(models, test)La función adjust_dataset devuelve un nuevo conjunto de datos que contiene los casos más difíciles, los cuales pueden ser utilizados para forzar al algoritmo de base para aprender.
Adaboost es un algoritmo ampliamente conocido que es un método impulsar. Los fundadores de Adaboost ganaron el Premio Gödel para su trabajo. Sobre todo, el algoritmo de árbol de decisión se prefiere como un algoritmo de base para Adaboost y en la biblioteca sklearn el algoritmo de base por defecto para Adaboost es árbol de decisión (AdaBoostRegressor y AdaBoostClassifier). Como hemos comentado en el párrafo anterior, el mismo método se aplica para incrementales Adaboost. La información recopilada en cada paso del algoritmo AdaBoost acerca de la 'dureza' de cada muestra de entrenamiento se introduce en el modelo. El 'ajuste de conjunto de datos' paso es diferente de la descrita anteriormente y la etapa los 'modelos combinan' se calcula mediante el uso de voto ponderado.
Conclusión
Aunque los métodos de conjunto pueden ayudarle a ganar competiciones de aprendizaje automático mediante el diseño de algoritmos sofisticados y producir resultados con alta precisión, a menudo no es el preferido en las industrias donde interpretabilidad es más importante. No obstante, la eficacia de estos métodos son innegables, y sus beneficios en aplicaciones apropiadas puede ser enorme. En ámbitos como la salud, incluso la más pequeña cantidad de la mejora en la precisión de los algoritmos de aprendizaje automático puede ser algo realmente valioso.
- Una introducción a la teoría del aprendizaje automático y sus aplicaciones: un tutorial visual con ejemplos
- Máquinas y Confianza: cómo mitigar AI Bias
