darts icon indicating copy to clipboard operation
darts copied to clipboard

[BUG] lightgbm model with validation set

Open bawiek opened this issue 3 years ago • 3 comments

Describe the bug Hi, I get an error for the LGBM model with a validation set with output_chunk_length >1
With a output_chunk_length=1 it works fine, is this normal ?

image

System :

  • Python version: 3.8.10
  • darts version: 20.0.0

To Reproduce

from darts.datasets import AirPassengersDataset
series_air = AirPassengersDataset().load()
scaler_air, scaler_milk = Scaler(), Scaler()
series_air_scaled = scaler_air.fit_transform(series_air)
train_air, val_air = series_air_scaled[:-36], series_air_scaled[-36:]

model_lightGBM = LightGBMModel( lags=10, 
                                lags_past_covariates=None, 
                                lags_future_covariates=None, 
                                output_chunk_length=2, 
                                likelihood=None, 
                                quantiles=None, 
                                random_state=None)
model_lightGBM.fit(
    series = train_air,
    val_series = val_air,
    #past_covariates = None,
    #val_past_covariates = None,
    #future_covariates = None,
    #val_future_covariates = None,
    verbose=True
)

TypeError: Wrong type(ndarray) for label. It should be list, numpy 1-D array or pandas Series

Expected behavior [1] valid_0's l2: 0.222919 [2] valid_0's l2: 0.210642

bawiek avatar Aug 12 '22 12:08 bawiek

Hi, could you please post the full stack trace of the error? Thank you.

hrzn avatar Aug 12 '22 16:08 hrzn

Hi @hrzn, Thank you for your time! The entire traceback :

Traceback (most recent call last):
  File "c:/Users/bwieczorek/Desktop/lgbm_test.py", line 32, in main
    model_lightGBM.fit(
  File "C:\Users\bwieczorek\Desktop\lib\site-packages\darts\models\forecasting\gradient_boosted_model.py", line 162, in fit
    super().fit(
  File "C:\Users\bwieczorek\Desktop\lib\site-packages\darts\models\forecasting\regression_model.py", line 427, in fit
    self._fit_model(
  File "C:\Users\bwieczorek\Desktop\lib\site-packages\darts\models\forecasting\regression_model.py", line 328, in _fit_model
    self.model.fit(training_samples, training_labels, **kwargs)
  File "C:\Users\bwieczorek\Desktop\lib\site-packages\sklearn\multioutput.py", line 202, in fit
    self.estimators_ = Parallel(n_jobs=self.n_jobs)(
  File "C:\Users\bwieczorek\Desktop\lib\site-packages\joblib\parallel.py", line 1041, in __call__
    if self.dispatch_one_batch(iterator):
  File "C:\Users\bwieczorek\Desktop\lib\site-packages\joblib\parallel.py", line 859, in dispatch_one_batch
    self._dispatch(tasks)
  File "C:\Users\bwieczorek\Desktop\lib\site-packages\joblib\parallel.py", line 777, in _dispatch
    job = self._backend.apply_async(batch, callback=cb)
  File "C:\Users\bwieczorek\Desktop\lib\site-packages\joblib\_parallel_backends.py", line 208, in apply_async
    result = ImmediateResult(func)
  File "C:\Users\bwieczorek\Desktop\lib\site-packages\joblib\_parallel_backends.py", line 572, in __init__
    self.results = batch()
  File "C:\Users\bwieczorek\Desktop\lib\site-packages\joblib\parallel.py", line 262, in __call__
    return [func(*args, **kwargs)
  File "C:\Users\bwieczorek\Desktop\lib\site-packages\joblib\parallel.py", line 262, in <listcomp>
    return [func(*args, **kwargs)
  File "C:\Users\bwieczorek\Desktop\lib\site-packages\sklearn\utils\fixes.py", line 211, in __call__
    return self.function(*args, **kwargs)
  File "C:\Users\bwieczorek\Desktop\lib\site-packages\sklearn\multioutput.py", line 44, in _fit_estimator
    estimator.fit(X, y, **fit_params)
  File "C:\Users\bwieczorek\Desktop\lib\site-packages\lightgbm\sklearn.py", line 818, in fit
    super().fit(X, y, sample_weight=sample_weight, init_score=init_score,
  File "C:\Users\bwieczorek\Desktop\lib\site-packages\lightgbm\sklearn.py", line 683, in fit
    self._Booster = train(params, train_set,
  File "C:\Users\bwieczorek\Desktop\lib\site-packages\lightgbm\engine.py", line 232, in train
    booster.add_valid(valid_set, name_valid_set)
  File "C:\Users\bwieczorek\Desktop\lib\site-packages\lightgbm\basic.py", line 2559, in add_valid
    data.construct().handle))
  File "C:\Users\bwieczorek\Desktop\lib\site-packages\lightgbm\basic.py", line 1437, in construct
    self._lazy_init(self.data, label=self.label, reference=self.reference,
  File "C:\Users\bwieczorek\Desktop\lib\site-packages\lightgbm\basic.py", line 1282, in _lazy_init
    self.set_label(label)
  File "C:\Users\bwieczorek\Desktop\lib\site-packages\lightgbm\basic.py", line 1801, in set_label
    label = list_to_1d_numpy(_label_from_pandas(label), name='label')
  File "C:\Users\bwieczorek\Desktop\lib\site-packages\lightgbm\basic.py", line 164, in list_to_1d_numpy
    raise TypeError("Wrong type({0}) for {1}.\n"
TypeError: Wrong type(ndarray) for label.
It should be list, numpy 1-D array or pandas Series

bawiek avatar Aug 15 '22 14:08 bawiek

Hi @bawiek, thanks for bringing this issue to our attention! I just opened a PR that should solve this issue, which means that it should be fixed from the next release on.

brunnedu avatar Aug 16 '22 12:08 brunnedu

This was fixed a couple of versions ago => closing.

hrzn avatar Jan 05 '23 15:01 hrzn