sklearn (неверная форма ввода) ValueError

Я новичок в мире ML и sklearn. Я пытался использовать GaussianNB для набора данных с X_train[2500,800], Y_train[2500,8].

from sklearn.naive_bayes import GaussianNB
clf = GaussianNB()
clf.fit(X, Y)

При запуске программы показывает

ValueError: неправильная форма ввода (2500, 8).

Как преобразовать Y_train[2500,8] в Y_train[2500,1]?


person robert patrik    schedule 19.08.2017    source источник
comment
Каковы ваши данные? у вас есть 2500 образцы с 800 функциями?   -  person Uri Goren    schedule 19.08.2017
comment
Да. 2500 образцов. И y имеет 8 меток. Но классификатор принимает только один столбец   -  person robert patrik    schedule 19.08.2017
comment
Y_train должен быть списком целевых значений, то есть списком, в котором i-й элемент является меткой класса i-го варианта обучения в вашем наборе данных. Следовательно, он должен быть одномерным. Следовательно, если ваш Y_train имеет форму (2500, 8), возможно, вы что-то перепутали.   -  person MaxPowers    schedule 19.08.2017
comment
Это многоуровневая классификация? то есть может ли один образец иметь несколько меток в y (из этих 8 меток) или каждый будет иметь только одну метку?   -  person Vivek Kumar    schedule 19.08.2017
comment
@robertpatrik Я думаю, что в вопросе ошибка, вы уверены, что у вас есть `X_train[2500,800]`, вы имели в виду X_train[2500,8] вместо этого? Кроме того, знаете ли вы, какая из 8 меток является вашей целевой переменной?   -  person Mohamed Ali JAMAOUI    schedule 19.08.2017
comment
хорошо, если ваши ярлыки в формате ont_hot, просто сделайте Y_train = np.argmax(Y_train, axis=1)   -  person Ishant Mrinal    schedule 19.08.2017
comment
Спасибо @IshantMrinal. Это работает.   -  person robert patrik    schedule 19.08.2017
comment
@VivekKumar, как решить эту ошибку, если это классификация с несколькими метками? т.е. каждый элемент обучения может иметь несколько меток, что означает, что y не является одномерным.   -  person Rajat    schedule 13.11.2018
comment
@fateh Какой классификатор вы используете? Гауссовский НБ? Если это так, то он не поддерживает 2-d y по своей сути. Либо вам нужно использовать OneVsRestClassifier, чтобы уменьшить -label для нескольких бинарных задач или используйте другой алгоритм, который поддерживает случаи с несколькими метками. Подробнее см. здесь. Было бы лучше, если бы вы предоставили более подробную информацию (желательно в новом вопросе).   -  person Vivek Kumar    schedule 13.11.2018
comment
@VivekKumar Я использую классификатор логистической регрессии, и размерность y равна (237,15).   -  person Rajat    schedule 13.11.2018
comment
@fateh LogisticRegression в sklearn напрямую не поддерживает мульти-метку, так как ее нет под заголовком Support multilabel на странице, на которую я ссылаюсь. Поэтому вам придется использовать OneVsRestClassifier только для этого.   -  person Vivek Kumar    schedule 13.11.2018
comment
вы имеете в виду onevsrest или make_multilabel_classification ? в моем случае элементы обучения могут иметь несколько меток, поэтому я считаю, что должен использовать make_multilabel_classification. Это правильно?   -  person Rajat    schedule 13.11.2018
comment
@fateh make_multilabel_classification создает новый фиктивный набор данных для примеров. Если у вас уже есть данные, вы не будете использовать файл make_multilabel_classification.   -  person Vivek Kumar    schedule 13.11.2018


Ответы (1)


OP использует один горячий кодировщик, поэтому функция подгонки не будет работать с массивом. @Ishant Mrinal рекомендует это

Y_train = np.argmax(Y_train, axis=1)

Это позволит вам передать одну горячую кодировку в функцию подгонки.

person vbhakta    schedule 08.09.2017