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

Я пытаюсь классифицировать страницы, в частности выполнять поиск страницы, в документах на основе набора слов, макета страницы, содержать таблицы или нет, иметь полужирные заголовки и т. Д. С этой предпосылкой я создал такой pandas.DataFrame для каждого документ:

    page  totalCharCount  matchesOfWordX  matchesOfWordY          hasFeaturesX     hasFeaturesY   hasTable      score
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              2.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              1.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.

Любая помощь?

Большое спасибо!


person rePack    schedule 19.10.2017    source источник


Ответы (2)


Как правило, трудно сказать, какой метод подойдет лучше всего: я предполагаю, что у вас намного больше данных, и вопрос во многом зависит от данных. Но все же вот несколько идей:

  • Хотя вы говорите, что функции независимы, кажется, что totalCharCount и matchesOfWordY зависимы. Думаю, разумно предположить, что чем больше символов в документе, тем больше совпадений может быть. Это сильный знак против наивного Байеса.

  • Бинарная логистическая регрессия выглядит намного лучше и будет моим первым кандидатом. Одно из предложений - нормализовать totalCharCount функцию, потому что ее масштаб кажется намного больше, чем у других функций.

  • Если у вас нет гораздо большего количества обучающих примеров класса 1, ваши данные не сбалансированы. В этом случае вы, вероятно, столкнетесь с проблемой постоянного прогнозирования. Возможное решение - использовать функцию потерь взвешенной кросс-энтропии.

  • Помимо классификатора SVM, рассмотрите также _ 5_. Оба они могут дать очень хорошую точность.

person Maxim    schedule 19.10.2017

Из-за непрерывной оценки, которая, как я полагаю, является вашим лейблом, это проблема регрессии. SVM чаще используются для задач классификации. Есть много возможных алгоритмов. Логистическая регрессия довольно распространена для решения чего-то подобного.

Изменить

Теперь, когда вы отредактировали свой пост, ваша проблема стала проблемой классификации :-)

Классификация = некоторые классы, которые вы хотите, чтобы ваши данные классифицировались как логические (True, False) или полиномиальные (Big, Middle, Small, Very Small)

Регрессия = непрерывные значения (все действительные числа от 0 до 1)

Теперь вы можете попробовать свой SVM и посмотреть, достаточно ли он работает с вашими данными.

См. Ответ @Max, у него есть хорошие моменты (балансировка, масштабирование)

person Florian H    schedule 19.10.2017
comment
Оценка столбца - это то, что я пытаюсь предсказать. Значения могут быть 0 или 1, соответствовать странице, которую я пытаюсь найти, или нет. Я отредактировал сообщение. Я взгляну на алгоритм логистической регрессии. Спасибо, Флориан, за ответ! - person rePack; 19.10.2017