3
votes

lightgbm ---- ValueError: référence circulaire détectée

Former le modèle

importer lightgbm en tant que lgb lgb_train = lgb.Dataset (x_train, y_train) lgb_val = lgb.Dataset (x_test, y_test)

paramètres = { 'application': 'binaire', 'objectif': 'binaire', 'metric': 'auc', 'is_unbalance': 'vrai', 'boosting': 'gbdt', 'num_leaves': 31, 'feature_fraction': 0,5, 'ensachage_fraction': 0,5, 'bagging_freq': 20, 'learning_rate': 0,05, 'verbeux': 0 }

model = lgb.train (paramètres, train_data, valid_sets = test_data, num_boost_round = 5000, early_stopping_rounds = 100)

y_pred = model.predict (test_data)


0 commentaires

3 Réponses :


0
votes

J'ai eu ce qui pourrait être le même problème.

Publiez l'intégralité de la trace pour vous en assurer.

Pour moi, c'était un problème de sérialisation vers JSON, ce que LightGBM fait sous le capot pour enregistrer le booster pour une utilisation ultérieure.

Recherchez dans votre ensemble de données toutes les colonnes de date / date / heure, ou tout ce qui ressemble à distance à une date, et supprimez-le ou convertissez-le en quelque chose que JSON peut gérer.

Les miens avaient tous été convertis en dtype catégorique par un code Pandas que j'avais mal écrit, et je fais généralement le GBM initial assez rapidement pour voir quelles variables apparaissent comme importantes. LightGBM m'a laissé faire les binaires de données pour l'entraînement (c'est-à-dire qu'il aurait généré une erreur s'ils étaient des dtypes datetime ou timedelta avant de me laisser exécuter quoi que ce soit). Il exécuterait très bien la formation, signalerait un AUC, puis échouerait après la dernière étape de formation lors du vidage des catégories vers JSON. C'était exaspérant, avec un traçage cryptique.

J'espère que cela vous aidera.


0 commentaires

0
votes

Si vous avez une variable delta temporelle dans l'ensemble de données, convertissez-la en un entier à l'aide de l'attribut dt.days. J'ai rencontré le même problème, c'est le problème signalé dans Github de light gbm


0 commentaires

2
votes

Si vous avez utilisé les fonctions cut ou qcut pour le binning et que vous n'avez pas encodé plus tard (encodage one-hot, encodage d'étiquettes ..). cela peut être la cause de l'erreur. Essayez d'utiliser un encodage.

J'espère que cela fonctionne.


0 commentaires