Какой алгоритм классификации следует использовать для классификации документов с этими переменными?
Я пытаюсь классифицировать страницы, в частности поиск страницы, в документах, основанных на сумме слов, макете страницы, содержать таблицы или нет, имеет жирные заголовки и т. Д. С этой предпосылкой я создал pandas.DataFrame
вот так, для каждого документа:
pageCharCount совпадений OfWordX совпадений OfWordY hasFeaturesX hasFeaturesY hasTable счет 0 0,0 608,0 0,0 2,0 0,0 0,0 0,0 0,0 1 1,0 3292,0 1,0 24,0 7,0 0,0 0,0 0,0 2 2,0 3302,0 0,0 15,0 1,0 0,0 1,0 0,0 3 3,0 26,0 0,0 0,0 0,0 1,0 1,0 1,0 4 4,0 1851,0 3,0 25,0 20,0 7,0 0,0 0,0 5 5,0 2159,0 0,0 27,0 6,0 0,0 0,0 0,0 6 6,0 1906,0 0,0 9,0 15,0 3,0 0,0 0,0 7 7,0 1825,0 0,0 24,0 9,0 0,0 0,0 0,0 8 8,0 2053,0 0,0 20,0 10,0 2,0 0,0 0,0 9 9,0 2082,0 2,0 16,0 3,0 0,0 0,0 10 10,0 2206,0 0,0 30,0 1,0 0,0 0,0 0,0 11 11,0 1746,0 3,0 31,0 3,0 0,0 0,0 0,0 12 12,0 1759,0 0,0 38,0 3,0 0,0 0,0 0,0 13 13,0 1790,0 0,0 21,0 0,0 0,0 0,0 0,0 14 14,0 1759,0 0,0 11,0 6,0 0,0 0,0 0,0 15 15,0 1539,0 0,0 20,0 3,0 0,0 0,0 0,0 16 16,0 1891,0 0,0 13,0 6,0 1,0 0,0 0,0 17 17,0 1101,0 0,0 4,0 0,0 1,0 0,0 0,0 18 18,0 2247,0 0,0 16,0 5,0 5,0 0,0 0,0 19 19,0 598,0 2,0 3,0 1,0 1,0 0,0 0,0 20 20,0 1014,0 2,0 1,0 16,0 3,0 0,0 0,0 21 21,0 337,0 1,0 2,0 1,0 1,0 0,0 0,0 22 22,0 258,0 0,0 0,0 0,0 0,0 0,0 0,0
Я смотрю на наивные алгоритмы Байеса и SVM, но я не уверен, какой из них лучше подходит для этой проблемы. Переменные независимы. Некоторые из них должны присутствовать, чтобы увеличить оценку, а некоторые соответствуют частоте обратных документов, например totalCharCount
,
Любая помощь?
Большое спасибо!
2 ответа
Из-за постоянной оценки, которая, как я полагаю, является вашим лейблом, это проблема регрессии. SVM более распространены для задач классификации. Существует множество возможных алгоритмов. Логистическая регрессия была бы довольно распространена, чтобы решить что-то вроде этого.
редактировать
Теперь, когда вы отредактировали свой пост, ваша проблема стала проблемой классификации:-)
Классификация = некоторые классы, которые вы хотите, чтобы ваши данные классифицировали как логические (True, False) или полиномиальные (Big, Middle, Small, Very Small)
Регрессия = непрерывные значения (все действительные числа от 0 до 1)
Теперь вы можете попробовать SVM и посмотреть, достаточно ли он работает для ваших данных.
Смотри ответ Максима, у него есть хорошие моменты (балансировка, масштабирование)
Как правило, трудно сказать, какой метод будет работать лучше всего: я предполагаю, что у вас гораздо больше данных, и вопрос во многом зависит от данных. Но все же, вот некоторые идеи:
Хотя вы говорите, что функции независимы, похоже,
totalCharCount
а такжеmatchesOfWordY
являются зависимыми. Я думаю, что разумно предположить, что чем больше символов в документе, тем больше совпадений. Это сильный знак против наивного Байеса.Бинарная логистическая регрессия выглядит намного лучше и станет моим первым кандидатом. Одно из предложений - нормализовать
totalCharCount
особенность, потому что ее масштаб, кажется, намного больше, чем другие функции.Если у вас есть гораздо больше учебных примеров класса
1
Ваши данные не сбалансированы. Если это так, вы, вероятно, вступите в постоянную проблему прогнозирования. Возможным решением является использование взвешенной функции кросс-энтропийной потери.В дополнение к классификатору SVM, рассмотрим также
xgboost.XGBClassifier
, Оба они могут дать очень хорошую точность.