基于规则而非算法的二元分类

问题陈述大致如下:

给定一个网站,我们需要将其分类到两个预定义类别之一(例如,是否为电子商务网站?)

我们已经尝试使用朴素贝叶斯算法,并结合多种预处理技术(如停用词删除、词干提取等)以及适当的特征来解决这个问题。

我们希望将准确率提高到90%或接近这个水平,但目前的方法未能达到这一目标。

问题在于,在手动评估准确率时,我们会寻找网页上的几个标识符(例如,结账按钮、购物/购物、PayPal等),这些标识符有时会被我们的算法遗漏。

我们考虑,如果我们对这些标识符非常确定,为什么不创建一个基于规则的分类器,根据一组规则(这些规则将基于某些优先级编写)来对页面进行分类呢?

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

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

使用基于规则的方法我们可能会面临哪些潜在问题?或者这种方法是否更适合我们的用例?

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


回答:

决策树算法可以处理你的数据,并返回一组用于预测未标记实例的规则。

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

许多决策树实现会明确生成一组规则,但这不是必须的,因为只需查看代表训练好的决策树分类器的树,就可以轻松看到规则(包括规则的内容和规则在决策流程中的位置)。

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

例如,假设每行数据中的一个特征描述了应用程序缓存的类型;进一步假设该特征有三种可能的值,memcacherediscustom。那么一条规则可能是应用程序缓存 | memcache,或者这个数据实例的应用程序缓存是否基于redis?

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

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

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

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

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

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

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