Estoy tratando de resolver la tarea de regresión. Descubrí que 3 modelos funcionan bien para diferentes subconjuntos de datos: LassoLARS, SVR y Gradient Tree Boosting. Me di cuenta de que cuando hago predicciones usando todos estos 3 modelos y luego hago una tabla de 'salida real' y salidas de mis 3 modelos, veo que cada vez que al menos uno de los modelos está realmente cerca de la salida verdadera, aunque otros 2 podría estar relativamente lejos.
Cuando calculo el mínimo error posible (si tomo la predicción del "mejor" predictor para cada ejemplo de prueba) obtengo un error que es mucho más pequeño que el error de cualquier modelo solo. Así que pensé en tratar de combinar predicciones de estos 3 modelos diferentes en algún tipo de conjunto. La pregunta es, ¿cómo hacer esto correctamente? Todos mis 3 modelos están construidos y ajustados usando scikit-learn, ¿proporciona algún tipo de método que podría usarse para empaquetar modelos en un conjunto? El problema aquí es que no quiero promediar las predicciones de los tres modelos, quiero hacerlo con la ponderación, donde la ponderación debe determinarse en función de las propiedades de un ejemplo específico.
Incluso si scikit-learn no proporciona esa funcionalidad, sería bueno que alguien supiera cómo abordar esta tarea de manera adecuada: calcular la ponderación de cada modelo para cada ejemplo en los datos. Creo que podría hacerlo un regresor separado construido sobre estos 3 modelos, que intentará obtener pesos óptimos para cada uno de los 3 modelos, pero no estoy seguro de si esta es la mejor manera de hacerlo.
fuente
model.named_steps['lin_regr'].coef_
) le dará algunas ideas sobre cuánto contribuye cada modelo en un conjunto a la solución final.X, y = make_regression(n_features=10, n_targets=1)
da error de dimensión. ¿Alguien puede explicar qué hacer?Ok, después de pasar un tiempo buscando en Google, descubrí cómo podía hacer la ponderación en python incluso con scikit-learn. Considere lo siguiente:
Entreno un conjunto de mis modelos de regresión (como se mencionó SVR, LassoLars y GradientBoostingRegressor). Luego los ejecuté todos en datos de entrenamiento (los mismos datos que se usaron para el entrenamiento de cada uno de estos 3 regresores). Recibo predicciones para ejemplos con cada uno de mis algoritmos y guardo estos 3 resultados en el marco de datos de pandas con las columnas 'predictedSVR', 'predicttedLASSO' y 'predicttedGBR'. Y agrego la columna final en este archivo de datos que llamo 'predicho', que es un valor de predicción real.
Luego solo entreno una regresión lineal en este nuevo marco de datos:
Entonces, cuando quiero hacer una predicción para un nuevo ejemplo, simplemente ejecuto cada uno de mis 3 regresores por separado y luego hago:
en salidas de mis 3 regresores. Y obtener un resultado.
El problema aquí es que estoy encontrando pesos promedio óptimos para los regresores en promedio, los pesos serán los mismos para cada ejemplo en el que intentaré hacer predicciones.
Si alguien tiene alguna idea sobre cómo apilar (ponderar) usando las características del ejemplo actual, sería bueno escucharlas.
fuente
LinearRegression()
lugar deLogisticRegression()
modelo?Si sus datos tienen subconjuntos obvios, puede ejecutar un algoritmo de agrupación como k-means y luego asociar cada clasificador con los grupos en los que funciona bien. Cuando llegue un nuevo punto de datos, determine en qué clúster está y ejecute el clasificador asociado.
También puede usar las distancias inversas desde los centroides para obtener un conjunto de pesos para cada clasificador y predecir usando una combinación lineal de todos los clasificadores.
fuente
Realizo un tipo de ponderación haciendo lo siguiente, una vez que todos sus modelos estén completamente entrenados y funcionen bien:
Puede ajustar aún más su conjunto tomando la medida del porcentaje correcto durante un tiempo. Una vez que haya calificado un nuevo conjunto de datos significativamente grande, puede trazar el umbral en pasos de 0.1, por ejemplo, contra el porcentaje correcto si usa ese umbral para calificar, para tener una idea de qué umbral le dará, digamos, 95% correcto para la clase 1, y así sucesivamente. Puede seguir actualizando el conjunto de pruebas y los puntajes de f1 a medida que ingresan nuevos datos y realizar un seguimiento de la deriva, reconstruyendo los modelos cuando caen los umbrales o la precisión.
fuente