【发布时间】:2018-11-01 05:11:24
【问题描述】:
我一直在尝试在 Clojure 中实现垃圾邮件分类器。我一直在使用的参考书是集体智慧。下面是训练分类器的train方法:
(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 方法只用最后一个项目或句子“the quick brown fox jumps”分类为“好”来训练我的分类器。最后,我的分类器如下所示: {"the" {"good" 1}, "quick" {"good" 1}, "brown" {"good" 1}, "fox" {"good" 1}, "jumps" {"good" 1} }。如您所见,它仅使用最后一项进行训练。为了避免这种情况,我用“do”语句包装了所有内容,但我不知道为什么只执行了最后一次调用“train”方法。
【问题讨论】: