Проблема заключается в этой строке:
X, y = X_train[i:i + 1], y_train[i:i + 1]
, которая находится внутри вашей петли for
, т.е. после , которую вы запросили np.unique(labels)
, и вы с комфортом обнаружили, что действительно у вас естьвсе 20 единиц ...
Если присмотреться, вы поймете, что эта строка приводит к X
и y
из только одному элементу каждый (X_train[i]
и y_train[i]
соответственно - фактически, поскольку ошибка, вероятно, возникает в самой первой итерации для i=0
, в итоге вы получите только X_train[0]
и y_train[0]
), что, конечно, не должно иметь место при подборе модели;следовательно, сообщение об ошибке правильно указывает, что у вас есть только одна метка в вашем наборе (потому что у вас есть только один образец, то есть) ...
Чтобы убедиться, что это действительно так, просто вставьтеprint(np.unique(y))
перед вашим clf.fit()
- он напечатает только одну этикетку.
Совершенно неясно, чего именно вы пытаетесь достичь с помощью петли for
;если вы пытаетесь обучить свой классификатор последовательным частям вашего набора данных, вы можете попробовать изменить индексы [i:i+1]
на [i:i+k]
для некоторого достаточно большого k
, но для набора данных с 20 метками это не так просто, так какВы должны убедиться, что все 20 меток будут присутствовать для каждого звонка на clf.fit()
, в противном случае вы в конечном итоге будете сравнивать яблоки с апельсинами ...
Я настоятельно рекомендую начать с простого:удалите цикл for
, поместите ваш классификатор на весь ваш тренировочный набор (clf.fit(X_train, y_train)
) и проверьте документацию scikit-learn для доступных метрик производительности, которые вы можете использовать ...
РЕДАКТИРОВАТЬ Я только что заметил детали:
Я пытаюсь реализовать онлайн-классификатор
Ну, то, что вы пытаетесь сделать, это, безусловно, не онлайн-обучение (что само по себе является огромной темой), поскольку ваш цикл for
просто переобучает (по крайней мере, пытается) новый классификатор с нуля во время каждой итерации.
Как я уже сказалсказал, начать среали;прежде чем перейти к гораздо более продвинутой теме онлайн-обучения, которая, безусловно, не новичка ...
постарайтесь твердо понять принципы простого пакетного обучения.