【问题标题】:Spam Classifier Clojure垃圾邮件分类器 Clojure
【发布时间】: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”方法。

【问题讨论】:

    标签: machine-learning clojure


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2014-04-21
      • 2016-11-07
      • 2011-01-24
      • 2014-05-19
      • 1970-01-01
      • 1970-01-01
      • 2014-04-29
      • 1970-01-01
      • 2011-07-12
      相关资源
      最近更新 更多