Machine learning 使用基于规则的方法而不是适当的算法进行二元分类

Machine learning 使用基于规则的方法而不是适当的算法进行二元分类,machine-learning,rules,classification,bayesian,Machine Learning,Rules,Classification,Bayesian,问题陈述有点像这样: 给定一个网站,我们必须将其划分为两个预定义的类别之一(比如是否为电子商务网站?) 我们已经为此尝试了朴素贝叶斯算法,并使用了多种预处理技术(停止字删除、词干分析等)和适当的功能 我们希望将精度提高到90或更接近,这不是我们通过这种方法得到的 这里的问题是,在手动评估准确性的同时,我们在网页上查找一些标识符(例如,结帐按钮、商店/购物、paypal等),这些标识符在我们的算法中有时会被遗漏 我们在想,如果我们对这些标识符太确定,为什么不创建一个基于规则的分类器呢?在这个分类器

问题陈述有点像这样:

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

我们已经为此尝试了朴素贝叶斯算法,并使用了多种预处理技术(停止字删除、词干分析等)和适当的功能

我们希望将精度提高到90或更接近,这不是我们通过这种方法得到的

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

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

e、 g.如果它包含商店/购物,并且有结帐按钮,那么它就是一个电子商务页面。 还有许多类似的规则,它们的优先级顺序是一样的

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

使用基于规则的方法,我们将面临哪些潜在问题?或者它更适合我们的用例

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

那么你为什么不把这些信息包括在你的分类方案中呢?在html中不难找到付款/结帐按钮,因此这些按钮的存在肯定是一些特性。一个好的分类器依赖于两件事——好的数据和好的特征。确保两者都有

如果你必须做一个基于规则的分类器,那么把它想象成一个决策树。如果您使用的是函数式编程语言,那么很容易做到这一点——基本上就是递归,直到您到达一个端点,在该端点处,您将得到一个分类。

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

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

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

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

例如,假设每个数据行中的一个特性描述了应用程序缓存的类型;进一步假设这个特性有三个可能的值:memcache、redis和custom。那么规则可能是Application Cache | memcache,或者该数据实例是否具有基于redis的应用程序缓存

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

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

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

免费的开源库,,有一个(特定ML技术的实现在橙色中被称为“widgets”),这似乎是C4.5的一个可靠实现,它可能是使用最广泛的,也可能是最好的决策树实现


O'Reilly网站有一个,包括python中工作决策树模块的源代码,即使在添加了这些功能后,有时由于噪音或更多非电子商务类功能,它也被归类为非电子商务。是的,我同意基于规则的部分。很有趣。也许值得尝试一下基于决策树的分类器的问题。这可能会消除您所看到的噪音,因为它在功能之间引入了一些依赖关系。而且,规则可以以更好的方式创建,并提供比功能更多的信息(有时)。我们可以用多个'and'/'or'子句创建一个规则,但该特性并没有提供类似的功能。如果我错了,请纠正我。理论上,你可以有一个功能“foo_AND_bar”,“foo_OR_bar”,但这就是功能选择开始变得深奥的时候。几年前,我在一个系统上工作,管理层决定使用基于规则的版本,因为尽管它很糟糕(典型的基于规则的系统),但对于非数学的人来说,它很容易理解,这很有价值。在像您这样一个非常狭窄的用例中,基于规则的工作应该是可以接受的;对于更大的场景,它很快变得难以管理。SVM严重依赖于内核和参数选择,因此需要进行大量调整。不幸的是,Java中的许多机器学习软件包都很痛苦——我建议使用Mallet的maxent,但
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.