3

问题陈述有点像这样:

给定一个网站,我们必须将其分类为两个预定义的类别之一(比如它是否是电子商务网站?)

我们已经使用多种预处理技术(停用词删除、词干提取等)和适当的特征尝试了朴素贝叶斯算法。

我们希望将准确度提高到 90 或更接近,但我们无法从这种方法中获得。

这里的问题是,在手动评估准确性时,我们会在网页上寻找一些标识符(例如结帐按钮、商店/购物、贝宝等),这些标识符有时会在我们的算法中被遗漏。

我们在想,如果我们对这些标识符太确定,为什么不创建一个rule based classifier我们将根据一组规则(将根据某些优先级编写)对页面进行分类的位置。

例如,如果它包含商店/购物并且有结帐按钮,那么它就是一个电子商务页面。以及许多按优先级顺序排列的类似规则。

根据一些规则,我们也会访问网站的其他页面(目前,我们只访问主页,这也是精度不高的一个原因)。

基于规则的方法我们将面临哪些潜在问题?还是对我们的用例更好?

FOIL, AQ用复杂的算法(例如等)创建这些规则是个好主意吗?

4

2 回答 2

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 中找到付款/结帐按钮并不难,因此这些功能的存在绝对应该是功能。一个好的分类器依赖于两件事——好的数据和好的特征。确保你有两个!

如果你必须做一个基于规则的分类器,那么或多或少地把它想象成一个决策树。如果你使用的是函数式编程语言,这很容易做到——基本上只是递归,直到你到达一个端点,此时你会得到一个分类。

于 2012-05-08T18:26:59.947 回答
1

决策树算法可以获取您的数据并返回用于预测未标记实例的规则集

实际上,决策树实际上只是一个递归下降分区器,由一组规则组成,其中每个规则位于树中的一个节点上,并将该规则应用于未标记的数据实例,将该实例发送到左叉或右叉。

许多决策树实现显式生成规则集,但这不是必需的,因为规则(规则是什么以及该规则在决策流中的位置)很容易通过查看表示训练有素的决策树分类器。

特别是,每个规则只是对特定特征(数据列或字段)中特定值的布尔测试。

例如,假设每个数据行中的一个特征描述了Application Cache的类型;进一步假设这个特性有三个可能的值,memcacherediscustom。那么规则可能是应用缓存 | memcache,还是这个数据实例有基于redis的Application Cache?

从决策树中提取的规则是布尔值——真或假。按照惯例,False 由左边缘表示(或链接到下面的子节点和该父节点的左侧);True 由右侧边缘表示。

因此,一个新的(未标记的)数据行从根节点开始,然后根据根节点处的规则被回答为 True 还是 False 向下发送到右侧或左侧。应用下一个规则(至少在树层次结构中的级别),直到数据实例到达最低级别(没有规则的节点或叶节点)。

一旦数据点被过滤到一个叶节点,那么它本质上就被分类了,因为每个叶节点都有一个与之关联的训练数据实例的分布(例如,25% 好 | 75% 坏,如果好和坏是类标签)。这种经验分布(在理想情况下由只有一个类标签的数据实例组成)确定了未知数据实例的估计类标签。

免费和开源库Orange有一个决策树模块(特定 ML 技术的实现在 Orange 中称为“小部件”),这似乎是 C4.5 的可靠实现,这可能是使用最广泛的也许是最好的决策树实现。

一个 O'Reilly 站点有一个关于决策树构造和使用的教程,包括Python中工作决策树模块的源代码。

于 2012-05-09T14:44:50.070 回答