Как исправить ошибку отступа ValueError: not enough values to unpack (expected 3, got 1)?

Изменение размерности у X_train успешно компилируется, но ничего не меняя при изменении размерности у Y_train выдаёт ошибку:

ValueError: not enough values to unpack (expected 3, got 1)

from lightgbm import LGBMClassifier

from tensorflow.keras.datasets import mnist
(X_train, Y_train), (X_test, Y_test) = mnist.load_data()

nsamples, nx, ny = X_train.shape # место возникновения ошибки
X_train = X_train.reshape((nsamples,nx*ny))

nsamples, nx, ny = Y_train.shape
Y_train = Y_train.reshape((nsamples,nx*ny))

model = LGBMClassifier(objective='multiclass')
model.fit(X_train,Y_train,categorical_feature=[0,3])

Ответы (1 шт):

Автор решения: MaxU

уберите строки:

nsamples, nx, ny = Y_train.shape
Y_train = Y_train.reshape((nsamples,nx*ny))

т.к. они не имеют смысла.

Y_train - это одномерный вектор правильных значений для обучения модели:

In [62]: Y_train.shape
Out[62]: (60000,)

In [63]: Y_train[:5]
Out[63]: array([5, 0, 4, 1, 9], dtype=uint8)

поэтому у него только один компонент в размерности .shape, который вы пытаетесь присвоить сразу трем переменным - это вызывает указанную вами ошибку.

Воспроизведение ошибки:

In [64]: a,b,c = (60000,)
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-64-a5b9b64c3fb7> in <module>
----> 1 a,b,c = (60000,)

ValueError: not enough values to unpack (expected 3, got 1)

Если вы изменяете размерность обучающей выборки, то и тестовую выборку надо изменить таким же способом:

test_samples, nx, ny = X_test.shape # место возникновения ошибки
X_test = X_test.reshape((-1, nx*ny))
→ Ссылка