https://github.com/bel-gleb/datamining/tree/master/_bayes
Пример использования в example.php - там он учится отличать "спам" от "хороших сообщений".
Еще пример - в auto_tour.php, там учится отличать новости про автомобили от новостей про туризм.
Сам алгоритм взят из
этой книги.
Вкратце, как работает.
Классификатор оперирует документами (в виде наборов признаков) и категориями. Набор признаков - это массив данных, который характеризует документ. Например, для текста это может быть совокупность его слов (в идеале приведенных к основной форме и очищенных от мусора). Для товаров - название, производитель, описание (опять же разбитое на слова), прочие характеристики.
2 основных метода классификатора - train (обучение) и classify (классификация).
train() принимает массив с признаками документа и название категории, к которой, как нам известно, относится документ.
classify() принимает массив признаков и возвращает категорию, к которой классификатор отнёс документ.
Соответственно, создаем классификатор, тренируем на тестовом наборе данных, после чего пробуем классифицировать документы.
Классификаторов там два: наивный и по методу Фишера. Можно попробовать оба и сравнить, какой даст результаты лучше.
Для тонкой настройки можно рулить пороговыми значениями вероятностей, но начать можно и с дефолтными настройками.
Что стоит учитывать, по опыту:
- Важен хороший выбор признаков. Чем точнее они характеризуют конкретный документ, тем лучше.
- Лучше, если в разных категориях количество документов (и количество ключевых признаков, как мне кажется, но подробно не исследовал) будут как можно ближе друг к другу. Особенно для наивного классификатора.