J'essaie de résoudre la tâche de régression. J'ai découvert que 3 modèles fonctionnent parfaitement pour différents sous-ensembles de données: LassoLARS, SVR et Gradient Tree Boosting. J'ai remarqué que lorsque je fais des prédictions en utilisant tous ces 3 modèles, puis que je fais un tableau de la «sortie réelle» et des sorties de mes 3 modèles, je vois que chaque fois au moins un des modèles est vraiment proche de la sortie réelle, bien que 2 autres pourrait être relativement loin.
Lorsque je calcule une erreur minimale possible (si je prends la prédiction du «meilleur» prédicteur pour chaque exemple de test), j'obtiens une erreur qui est beaucoup plus petite que l'erreur de n'importe quel modèle seul. J'ai donc pensé à combiner les prédictions de ces 3 modèles différents dans une sorte d'ensemble. La question est, comment faire cela correctement? Tous mes 3 modèles sont construits et ajustés à l'aide de scikit-learn, fournit-il une sorte de méthode qui pourrait être utilisée pour emballer des modèles dans un ensemble? Le problème ici est que je ne veux pas simplement faire la moyenne des prévisions des trois modèles, je veux le faire avec la pondération, où la pondération doit être déterminée en fonction des propriétés d'un exemple spécifique.
Même si scikit-learn ne fournit pas une telle fonctionnalité, il serait bien que quelqu'un sache comment gérer cette tâche - de déterminer la pondération de chaque modèle pour chaque exemple dans les données. Je pense que cela pourrait être fait par un régresseur séparé construit au-dessus de tous ces 3 modèles, qui essaiera de produire des poids optimaux pour chacun des 3 modèles, mais je ne suis pas sûr que ce soit la meilleure façon de le faire.
la source
model.named_steps['lin_regr'].coef_
) vous donnera un aperçu de la contribution de chaque modèle d'un ensemble à la solution finale.X, y = make_regression(n_features=10, n_targets=1)
cela donne une erreur de dimension. quelqu'un peut-il expliquer quoi faire?Ok, après avoir passé un peu de temps sur Google, j'ai découvert comment je pouvais faire la pondération en python même avec scikit-learn. Considérez ce qui suit:
Je forme un ensemble de mes modèles de régression (comme mentionné SVR, LassoLars et GradientBoostingRegressor). Ensuite, je les exécute tous sur des données d'entraînement (mêmes données qui ont été utilisées pour l'entraînement de chacun de ces 3 régresseurs). J'obtiens des prédictions pour des exemples avec chacun de mes algorithmes et j'enregistre ces 3 résultats dans une trame de données pandas avec les colonnes 'PrededSVR', 'PrededLASSO' et 'PrededGBR'. Et j'ajoute la dernière colonne dans cette datafrane que j'appelle «prédit» qui est une vraie valeur de prédiction.
Ensuite, je forme juste une régression linéaire sur cette nouvelle trame de données:
Donc, quand je veux faire une prédiction pour un nouvel exemple, je lance simplement chacun de mes 3 régresseurs séparément, puis je fais:
sur les sorties de mes 3 régresseurs. Et obtenez un résultat.
Le problème ici est que je trouve en moyenne des poids optimaux pour les régresseurs, les poids seront les mêmes pour chaque exemple sur lequel j'essaierai de faire des prédictions.
Si quelqu'un a des idées sur la façon d'empiler (pondérer) en utilisant les fonctionnalités de l'exemple actuel, ce serait bien de les entendre.
la source
LinearRegression()
place duLogisticRegression()
modèle?Si vos données ont des sous-ensembles évidents, vous pouvez exécuter un algorithme de clustering comme k-means, puis associer chaque classificateur aux clusters sur lesquels il fonctionne bien. Lorsqu'un nouveau point de données arrive, déterminez dans quel cluster il se trouve et exécutez le classificateur associé.
Vous pouvez également utiliser les distances inverses des centroïdes pour obtenir un ensemble de poids pour chaque classificateur et prédire en utilisant une combinaison linéaire de tous les classificateurs.
la source
J'accomplis un type de pondération en procédant comme suit, une fois que tous vos modèles sont parfaitement formés et fonctionnent bien:
Vous pouvez affiner votre ensemble en prenant la mesure du pourcentage correct sur une certaine période. Une fois que vous avez un nouvel ensemble de données significativement important, vous pouvez tracer le seuil par étapes de 0,1, par exemple, contre un pourcentage correct si vous utilisez ce seuil pour marquer, pour avoir une idée de ce seuil qui vous donnera, disons, 95% de correct pour la classe 1, etc. Vous pouvez continuer à mettre à jour l'ensemble de tests et les scores f1 à mesure que de nouvelles données arrivent et suivre la dérive, reconstruire les modèles lorsque les seuils ou la précision tombent.
la source