web-dev-qa-db-fra.com

Python: validation croisée LightGBM. Comment utiliser lightgbm.cv pour la régression?

Je veux faire une validation croisée pour le modèle LightGBM avec lgb.Dataset et utiliser early_stopping_rounds . L'approche suivante fonctionne sans problème avec XGBoost xgboost.cv . Je préfère ne pas utiliser l'approche de Scikit Learn avec GridSearchCV, car il ne prend pas en charge l'arrêt anticipé ou lgb.Dataset.

import lightgbm as lgb
from sklearn.metrics import mean_absolute_error
dftrainLGB = lgb.Dataset(data = dftrain, label = ytrain, feature_name = list(dftrain))

params = {'objective': 'regression'}

cv_results = lgb.cv(
        params,
        dftrainLGB,
        num_boost_round=100,
        nfold=3,
        metrics='mae',
        early_stopping_rounds=10
        )

La tâche consiste à effectuer une régression, mais le code suivant génère une erreur: Supported target types are: ('binary', 'multiclass'). Got 'continuous' instead.

LightGBM prend-il en charge la régression ou ai-je fourni des paramètres incorrects?

14
Marius

Par défaut, le paramètre stratify dans lightgbm.cv est True. Selon la documentation :

stratifié (bool, facultatif (par défaut = Vrai)) - Indique s'il faut effectuer un échantillonnage stratifié.

Mais stratifier ne fonctionne qu'avec des problèmes de classification. Donc, pour travailler avec la régression, vous devez le rendre faux.

cv_results = lgb.cv(
        params,
        dftrainLGB,
        num_boost_round=100,
        nfold=3,
        metrics='mae',
        early_stopping_rounds=10,

        # This is what I added
        stratified=False
        )

Maintenant ça marche.

27
Vivek Kumar