2

I beieve SGDClassifier() с loss='log' поддерживает многоуровневую классификацию, и мне не нужно использовать OneVsRestClassifier. Check thisscikit multilabel классификация: ValueError: плохая форма ввода

Теперь, мой набор данных довольно большой, и я использую HashingVectorizer и передавая результаты в качестве входных данных SGDClassifier. Моя цель имеет 42048 функций.

Когда я запускаю это следующим образом:

clf.partial_fit(X_train_batch, y) 

я получаю: ValueError: bad input shape (300000, 42048).

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

clf.partial_fit(X_train_batch, y, classes=np.arange(42048)) 

В документации SGDClassifier, он говорит y : numpy array of shape [n_samples]

+0

Каковы формы 'X_train_batch' и' y'? – bogatron

+0

(300000, 1048576) и (300000, 42048) соответственно, оба являются scipy разреженной матрицей – user644745

ответ

3

Нет, SGDClassifier делает не делать MultiLabel классификации - это делает MultiClass классификации, которая является другой проблемой, хотя и решаются с помощью одна проблема против всех проблем.

Тогда ни SGD, ни OneVsRestClassifier.fit не принимают разреженную матрицу для y. Первый хочет массив ярлыков, как вы уже узнали. Последний требует для многоцелевых целей списка списков меток, например.

y = [[1], [2, 3], [1, 3]] 

для обозначения того, что X[0] имеет метку 1, X[1] имеет этикетки {2,3} и X[2] имеет метки {1,3}.

+0

Спасибо Larsmans. Я продолжал работать над этим и получил все мои ответы. Но сейчас я беспокоюсь, так как есть около 42000+ ярлыков, мне может потребоваться составить 42K-оценки для каждой из ярлыков отдельно, и я не думаю, что смогу сделать все это на одной машине. Думая об использовании параллельного и звездообразного ipython. – user644745

Смежные вопросы