Какой алгоритм классификации следует использовать для классификации документов с этими переменными?

Я пытаюсь классифицировать страницы, в частности поиск страницы, в документах, основанных на сумме слов, макете страницы, содержать таблицы или нет, имеет жирные заголовки и т. Д. С этой предпосылкой я создал 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, Оба они могут дать очень хорошую точность.

Другие вопросы по тегам