垃圾邮件分类器 Clojure

我一直在尝试用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方法只用最后一项或句子“the quick brown fox jumps”训练了我的分类器,分类为“good”。最后,我的分类器看起来如下:{“the” {“good” 1}, “quick” {“goood” 1}, “brown” {“good” 1}, “fox” {“good” 1}, “jumps” {“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")])

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注