Machine learning 垃圾邮件分类器Clojure

Machine learning 垃圾邮件分类器Clojure,machine-learning,clojure,Machine Learning,Clojure,我一直在尝试在Clojure中实现垃圾邮件分类器。我一直在用的参考书是《集体智慧》。以下是训练分类器的训练方法: (defn train [t cat] (incc cat) (let [ws (keys (getwords t))] (for [w ws] (incf w cat)))) 这是我写的sampletrain方法,我只是想把一些训练数据转储到分类器中,这样我就不必每次都手动训练它了 (defn sampletrain [] (do (train

我一直在尝试在Clojure中实现垃圾邮件分类器。我一直在用的参考书是《集体智慧》。以下是训练分类器的训练方法:

(defn train
  [t cat]
 (incc cat)
 (let [ws (keys (getwords t))]
 (for [w ws] (incf w cat))))
这是我写的sampletrain方法,我只是想把一些训练数据转储到分类器中,这样我就不必每次都手动训练它了

(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")))
不幸的是,sampletrain方法只能用最后一项或最后一句被归类为“好”的“棕色狐狸快速跳跃”来训练分类器。最后,我的分类器如下所示:
{“good”1},“quick”{“good”1},“brown”{“good”1},“fox”{“good”1},“跳跃”{“good”1}。如你所见,它只接受了最后一项训练。为了避免这种情况,我用“do”语句包装了所有内容,但我不明白为什么只执行了“train”方法的最后一次调用。

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")])