Est-il possible de former un modèle en Xgboost ayant plusieurs sorties continues (multi régression)? Quel serait l'objectif de former un tel modèle?
Merci d'avance pour toute suggestion
Ma suggestion est d'utiliser sklearn.multioutput.MultiOutputRegressor comme wrapper de xgb.XGBRegressor
. MultiOutputRegressor
entraîne un régresseur par cible et ne nécessite que le régresseur implémente fit
et predict
, que xgboost prend en charge.
# get some noised linear data
X = np.random.random((1000, 10))
a = np.random.random((10, 3))
y = np.dot(X, a) + np.random.normal(0, 1e-3, (1000, 3))
# fitting
multioutputregressor = MultiOutputRegressor(xgb.XGBRegressor(objective='reg:linear')).fit(X, y)
# predicting
print np.mean((multioutputregressor.predict(X) - y)**2, axis=0) # 0.004, 0.003, 0.005
C'est probablement le moyen le plus simple de régresser les cibles multidimensionnelles à l'aide de xgboost car vous n'auriez pas besoin de modifier une autre partie de votre code (si vous utilisiez à l'origine l'API sklearn
).
Cependant, cette méthode ne tire pas parti de toute relation possible entre les cibles. Mais vous pouvez essayer de concevoir une fonction objectif personnalisé pour y parvenir.