Как обучить классификатор с данными с несколькими метками?

Я пытаюсь научить классификатор принимать заголовок новостей в качестве входных данных и выводить теги, соответствующие следующему заголовку. Мои данные содержат кучу заголовков новостей в качестве входных переменных и метатегов для этих заголовков в качестве выходных переменных.

Я One-Hot_Encoded заголовки и соответствующие им метатеги в два отдельных файла CSV. Затем я объединил их в один большой фрейм данных, где значения X_train представляют собой массив 5573x958 numpy для слов заголовка, а значения y_train представляют собой массив 5573x843 numpy.

Вот следующее изображение фрейма данных pandas, содержащего мои данные в форме One-Hot-Encoded< /а>.

Цель моего классификатора состоит в том, чтобы я ввел заголовок и получил на выходе теги, наиболее связанные с этим заголовком. Проблема у меня следующая.

X_train = train_set.iloc[:, :958].values
X_train.shape
(out) (5573, 958)

y_train = train_set.iloc[:, 958:].values
y_train.shape
(out) (5573, 843)
from sklearn.naive_bayes import MultinomialNB
nb_clf = MultinomialNB().fit(X_train, y_train)

Когда я обучаю его с помощью классификатора наивного байеса, я получаю следующее сообщение об ошибке:

bad input shape (5573, 843)

Из того, что я исследовал, единственный способ, которым я могу иметь целевые значения с несколькими метками, - это их однократное горячее кодирование, так как когда я пробовал LabelEncoder() или MultiLabelBinarizer(), мне приходилось указывать имя каждого столбца для бинаризации и когда Мне нужно указать более 800 столбцов (слов), я не мог понять, как это сделать. Поэтому я просто закодировал их одним горячим кодированием, что, как мне кажется, дает тот же результат, просто классификатору это не нравится в качестве входных данных. Любые предложения о том, как я могу это исправить?


person Alborz Gharabaghi    schedule 12.08.2020    source источник


Ответы (1)


Вы можете использовать многоцелевую классификацию Sklearn. Вот пример:

from sklearn.multioutput import MultiOutputClassifier
from sklearn.naive_bayes import MultinomialNB
nb_clf = MultiOutputClassifier(MultinomialNB()).fit(X_train, y_train)

Вы можете просмотреть документацию по этой ссылке sklearn.multioutput.MultiOutputClassifier

person Khelifi Aymen    schedule 12.08.2020