Clojure классификатора спама - PullRequest
       0

Clojure классификатора спама

0 голосов
/ 31 октября 2018

Я пытался внедрить классификатор спама в 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.

1 Ответ

0 голосов
/ 01 ноября 2018

Clojure использует неявный возврат, как и оператор do, поэтому train вызывается для каждого предложения, но вы возвращаете только значение последнего вычисленного выражения. Вы можете обернуть его в структуру, чтобы вернуть все из них.

Результаты обернуты в вектор:

(defn sampletrain
  []
  [(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")])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...