Я пытался внедрить классификатор спама в Clojure. Справочник, который я использовал, - Коллективный разум. Вот метод поезда для обучения классификатора:
(defn train
[t cat]
(incc cat)
(let [ws (keys (getwords t))]
(for [w ws] (incf w cat))))
А вот мой метод выборки, который я написал только для того, чтобы выгрузить некоторые тренировочные данные в классификатор, чтобы мне не приходилось тренировать их каждый раз вручную.
(defn sampletrain
[]
(do
(train "Nobody owns the water." "good")
(train "the quick rabit jumps fences" "good")
(train "buy pharmaceuticals now" "bad")
(train "make quick money at the online casino" "bad")
(train "the quick brown fox jumps" "good")))
К сожалению, метод выборки обучает мой классификатор только последнему пункту или предложению «быстрые прыжки бурой лисы», классифицированным как «хороший». В конце мой классификатор выглядит следующим образом:
{"the" {"good" 1}, "quick" {"goood" 1}, "brown" {"good" 1}, "fox" {"good" 1}, "jumps" {"good" 1} }. Как видите, он был обучен только с последним предметом. Чтобы избежать этого, я все обернул оператором do, но не могу понять, почему был выполнен только последний вызов метода train.