web-dev-qa-db-fra.com

régression multi-sorties dans xgboost

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

16
user1782011

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.

28
ComeOnGetMe