问题陈述有点像这样:
鉴于一个网站,我们必须将其分类为两个预定义类别中的一个(比如它是否是一个电子商务网站?)
我们已经使用多种预处理技术(停止词删除,词干等)和适当的功能尝试了Naive Bayes算法。
我们希望将准确度提高到90或更接近,这是我们没有从这种方法中获得的。
这里的问题是,在手动评估准确性的同时,我们会在网页上查找一些标识符(例如Checkout按钮,商店/购物,PayPal等等),这些标识有时会在我们的算法中遗漏。
我们在想,如果我们对这些标识符非常肯定,为什么我们不创建rule based classifier
我们将根据一组规则对页面进行分类(将根据某些规则编写)优先级)。
e.g。如果它包含商店/购物并有结帐按钮,那么它是一个电子商务页面。 以及一些优先顺序中的许多类似规则。
根据一些规则,我们也会访问该网站的其他页面(目前,我们只访问主页,这也是未达到很高准确度的原因)。
基于规则的方法我们将面临哪些潜在问题?或者对我们的用例更好?
使用复杂的算法(例如FOIL, AQ
等)创建这些规则是个好主意吗?
答案 0 :(得分:2)
The issue here is, while evaluating the accuracy manually, we look for a few identifiers on web page (e.g. Checkout button, Shop/Shopping,paypal and many more) which are sometimes missed in our algorithms.
那么为什么不将这些信息包含在您的分类方案中呢?在html中找到付款/结帐按钮并不难,因此这些按钮的存在绝对应该是功能。一个好的分类器依赖于两件事 - 良好的数据和良好的功能。确保你们两个都有!
如果您必须执行基于规则的分类器,那么将其视为决策树或多或少。如果你使用的是函数式编程语言,这很容易做到 - 基本上只需要递归到你的终点,然后给你一个分类。
答案 1 :(得分:1)
决策树 算法可以获取您的数据并返回规则集,以预测未标记的实例。
实际上,决策树实际上只是一个递归下降分区器,由一组规则组成,其中每个规则都位于树中的一个节点上,并将该规则应用于未标记的数据实例,将此实例向左下叉或右叉发送。
许多决策树实现明确生成一个规则集,但这不是必要的,因为通过查看树很容易看到规则(规则是什么以及规则在决策流中的位置)表示经过训练的决策树分类器。
特别是,每个规则只是对特定要素(数据列或字段)中特定值的布尔测试。
例如,假设每个数据行中的一个功能描述了应用程序缓存的类型;进一步假设此功能有三个可能的值, memcache , redis 和自定义。然后规则可能是Applilcation Cache | memcache或这个数据实例是否有基于redis的应用程序缓存?
从决策树中提取的规则是布尔 - 无论是真还是假。按照惯例,False由左边缘(或下面的子节点的链接以及该父节点的左侧)表示;和True由右侧边缘表示。
因此,新的(未标记的)数据行从根节点开始,然后向右或向左发送,具体取决于根节点处的规则是回答为True还是False。应用下一个规则(至少在树层次结构中为级别),直到数据实例达到最低级别(没有规则的节点或叶节点)。
一旦数据点被过滤到叶节点,那么它实质上是分类的,因为每个叶节点都有与之关联的训练数据实例的分布(例如,25%Good | 75%Bad,如果好与坏是类标签)。这种经验分布(在理想情况下由只有一个类标签的数据实例组成)确定未知数据实例的估计类标签。
免费&开源库, Orange ,有decision tree module(特定ML技术的实现在Orange中被称为“小部件”)成为C4.5的可靠实现,这可能是最广泛使用的,也许是最好的决策树实现。
O'Reilly网站有一个tutorial on decision tree construction and use,包括 python 中工作决策树模块的源代码。