1. Introducción
La fusión de modelos es un medio importante para puntuar en las últimas etapas del juego. Especialmente en los juegos de aprendizaje en equipo de varios jugadores, la fusión de los modelos de diferentes compañeros de equipo puede producir resultados inesperados. A menudo, cuanto mayor sea la diferencia entre los modelos, mejor será el rendimiento. de los modelos.Bajo la premisa, los resultados de la fusión de modelos mejorarán en gran medida.La siguiente es la forma de fusión de modelos.
- Promedio:
a. Método de promedio simple
b. Método de promedio ponderado - Votación:
a. Método de votación simple
b. Método de votación ponderada - Síntesis:
a. fusión de clasificación
b. fusión de registro - apilamiento:
a. Cree un modelo de múltiples capas y use los resultados de la predicción para reajustar las predicciones. 5. Combinación:
a.Seleccione parte de los datos para el entrenamiento de predicción para obtener resultados de predicción como nuevas características y llévelos a los datos restantes para la predicción. La mezcla tiene solo una capa, mientras que el apilamiento tiene varias capas - Impulso/empaquetado (ya mencionado en Task4, por lo que no entraré en detalles)
2 Explicación detallada de apilamiento\mezcla
- El apilamiento
utiliza los resultados de predicción obtenidos por varios alumnos base y utiliza los resultados de predicción como un nuevo conjunto de entrenamiento para entrenar a un alumno. Como se muestra en la figura a continuación, se supone que hay cinco alumnos básicos, y los datos se llevan a los cinco alumnos básicos para obtener los resultados de la predicción, y luego se llevan al modelo seis para entrenamiento y prueba. Sin embargo, dado que los resultados obtenidos de los cinco alumnos básicos se incorporan directamente al modelo seis, es fácil que se produzca un sobreajuste. Por lo tanto, al usar el modelo de cinco y para la predicción, puede considerar usar la verificación K-fold para evitar el sobreajuste.
- La combinación
es diferente del apilamiento. La combinación combina el valor predicho como una nueva característica con la característica original para formar un nuevo valor de característica para la predicción. Para evitar el sobreajuste, los datos se dividen en dos partes, d1 y d2, y los datos de d1 se usan como conjunto de entrenamiento y los datos de d2 se usan como conjunto de prueba. Los datos pronosticados se usan como una nueva función y los datos de d2 se usan como un conjunto de entrenamiento para combinar nuevas funciones para predecir el resultado del conjunto de prueba.
- La diferencia entre combinación y apilamiento
A. apilamiento
En el apilamiento, debido a que los datos utilizados por las dos capas son diferentes, se puede evitar el problema de la fuga de información. Durante la competición por equipos, no hay necesidad de compartir tus semillas aleatorias con tus compañeros de equipo.
B. Fusión
La fusión es más simple que el apilamiento y no necesita construir un modelo de varias capas. Dado que el par combinado divide los datos en dos partes, parte de la información de los datos se ignorará en la predicción final. Al mismo tiempo, cuando se usa la segunda capa de datos, puede ocurrir un sobreajuste porque la segunda capa de datos es menor.
3 código de ejemplo
3.1 Promedio
- Promedio ponderado simple, los resultados se fusionan directamente
para encontrar el promedio de múltiples resultados de pronóstico. pre1-pren son los resultados predichos por n grupos de modelos, y se ponderan y fusionan
pre = (pre1 + pre2 + pre3 +...+pren )/n
- El método de promedio ponderado
generalmente realiza una fusión ponderada en función de la precisión de los modelos de predicción anteriores y asigna pesos más altos a los modelos con alta precisión.
pre = 0.3pre1 + 0.3pre2 + 0.4pre3
3.2 Votación
- voto simple
from xgboost import XGBClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.ensemble import RandomForestClassifier, VotingClassifier
clf1 = LogisticRegression(random_state=1)
clf2 = RandomForestClassifier(random_state=1)
clf3 = XGBClassifier(learning_rate=0.1, n_estimators=150,max_depth=4,min_child_weight=2,subsample=0.7,objective='binary:logistic')
vclf = VotingClassifier(estimators=[('lr', clf1), ('rf', clf2), ('xgb',clf3)])
vclf = vclf .fit(x_train,y_train)
print(vclf .predict(x_test))
- voto ponderado
from xgboost import XGBClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.ensemble import RandomForestClassifier, VotingClassifier
clf1 = LogisticRegression(random_state=1)
clf2 = RandomForestClassifier(random_state=1)
clf3 = XGBClassifier(learning_rate=0.1, n_estimators=150, max_depth=4, min_child_weight=2,subsample=0.7,objective='binary:logistic')
vclf = VotingClassifier(estimators=[('lr', clf1), ('rf', clf2), ('xgb', clf3)],voting='soft', weights=[2, 1, 1])
vclf = vclf .fit(x_train,y_train)
print(vclf .predict(x_test))