В настоящее время я использую Naive Bayes, чтобы классифицировать кучу текстов. У меня несколько категорий. Сейчас я просто выводя назад вероятность и категорию, но то, что я хотел бы сделать, это ранжировать категории, основанные на задних вероятностях, и использовать категории 2-го, 3-го места в качестве «резервных» категорий.
Вот пример:
df = pandas.DataFrame({ 'text' : pandas.Categorical(["I have wings","Metal wings","Feathers","Airport"]), 'true_cat' : pandas.Categorical(["bird","plane","bird","plane"])})
text true_cat
-----------------------
I have wings bird
Metal wings plane
Feathers bird
Airport plane
Что я делаю:
new_cat = classifier.classify(features(text))
prob_cat = classifier.prob_classify(features(text))
Конечный результат:
new_cat prob_cat text true_cat
bird 0.67 I have wings bird
bird 0.6 Feathers bird
bird 0.51 Metal wings plane
plane 0.8 Airport plane
Я нашел пару примеров, используя classify_many и prob_classify_many, но поскольку я новичок в Python, у меня возникли проблемы с переводом его на мою проблему. Я не видел, чтобы он использовался с пандами где угодно.
Я хочу, чтобы это выглядело так:
df_new = pandas.DataFrame({'text': pandas.Categorical(["I have wings","Metal wings","Feathers","Airport"]),'true_cat': pandas.Categorical(["bird","plane","bird","plane"]), 'new_cat1': pandas.Categorical(["bird","bird","bird","plane"]), 'new_cat2': pandas.Categorical(["plane","plane","plane","bird"]), 'prob_cat1': pandas.Categorical(["0.67","0.51","0.6","0.8"]), 'prob_cat2': pandas.Categorical(["0.33","0.49","0.4","0.2"])})
new_cat1 new_cat2 prob_cat1 prob_cat2 text true_cat
-----------------------------------------------------------------------
bird plane 0.67 0.33 I have wings bird
bird plane 0.51 0.49 Metal wings plane
bird plane 0.6 0.4 Feathers bird
plane bird 0.8 0.2 Airport plane
Любая помощь будет оценена по достоинству.