仅显示标题浏览

Bati's eHome of Tech

  :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: :: 管理 ::

原文作者:aihorizon.com
原文链接: Machine Learning, Part III: Testing Algorithms, and The "No Free
译者:commondata

·测试机器学习算法

现在你对机器学习算法的分类已经有了一个大体的了解,但在更进一步了解每个算法的细节之前,你还需要对如何测试机器学习算法有一个大体的认识。

在大多数情况下,将会出现以下三类数据:训练数据集(training set data)和测试数据(testing data)将被用于对算法进行训练和评估,但最终的考验是怎样执行真实数据(real data)。我们将会首先关注来自于训练和测试的结论,因为我们通常会假定训练集(test set)合理近似现实世界。(另一方面,一些机器学习技术使用第四种数据集,称为验证集[validation set],它被用来在整个训练期间避免过适合[overfitting]。当我们在后面具体提及决策树时,将会进一步讨论验证集,因为它通常是决策树学习的最优选择。)

·处理不合适的数据

我们已经提到了一点有关算法可能会与训练集过拟合(over-fit)的细节。这个原理的一个推论是,一种学习算法永远不会对它训练集的结果进行评估,因为对于一种未知的事例而言,没有证据表明算法具有概括它们的能力。重要的是必须区分训练集和测试集(或者至少两者要独立的生成,即使它们对于算法有一些共享的输入)。

遗憾的是,当训练数据和测试数据达到一个相对极限的时候会导致一些问题。比如,你现在仅仅只有20个样本,对于训练集和有效的测试集来说,没有太多的数据。解决这个问题的一个方法是把你的算法运行二十次(每次输入都把样本运行一遍),其中任意十九次作为训练数据,另外一次作为测试数据,这样一来在得到你的测试结果之前就可以使用每一个样本进行测试。对每次尝试来说,训练集都非常大,这意味着你的算法有足够的数据进行学习,而且这样一来也提供了足够多的测试次数(20次,而不是5次或10次)。这种手段的缺陷是每次测试的结果都不能独立于其他测试的结果。尽管如此,比起只是简单的使用一个测试集和一个训练集,这种方法可以产生比较低的差异,还算是一个可以说得过去的结果。

·NFL原理(原文为No Free Lunch theorem,即没有免费的午餐定理)和倾向的重要性

到目前为止,众多有关机器学习的文章中一个重要的主题是利用算法对训练数据进行总结归纳,而不是简单的记忆。但是,对于所有的机器学习算法来说,有一个小小的问题困扰它们,这个问题被总结为“没有免费的午餐定理”。这个原理的基本出发点是你不能仅仅通过查看训练实例来“免费的”进行学习。为什么不能?好的,事实是,你所知道的关于数据仅有的事情只是你看到的。

例如,假定我给你两个训练输入(0,0)和(1,1),另外把两个输入的类别都设为“False”,对于这些数据将有两个明显的假设:首先,每一个可能的输入都会造成一个false。另一方面,这两个训练输入的每一次输入都不可能为ture——对于false来说,这些训练输入是仅有的输入样本。总之,对于一个训练集,总是可以归纳出至少两个(形式)近似的,但完全相反的等式。这就意味着,任何学习算法都需要一些“倾向性”,用来区分可能的结果。

一些具有很强倾向性的算法可能仅仅只需要学习某几种函数。例如,某些基本的神经网络,它们的感知器只倾向于学习线形函数(通过划一条线可以把函数输入解析到分类系统中)。在没有可分割的线形输入情况下,这是一个弱点,但如果输入是线形可分的,当更灵活的算法遇到更多的麻烦时,它可以强制学习。

例如,假定给你输入((0,0),false),((1,0),true)和((0,1),true),那么唯一的线形可分函数可能会成为布尔或函数,感知器将会学习。现在,如果true函数是布尔或,那么感知器将从三个训练实例中归纳出所有的实例。另一方面,一个更灵活的算法可能对某些类型的函数不会做出有类似倾向性的概括。

我们通常看到的算法是专门设计来引入与问题域有关的限制,这样是为了为通用算法的具体实例引入细微的倾向以进行更好的归纳,以及更好的学习。这方面的一个例子是,当数字识别系统工作时会创建一个专门的神经网络,用它来模拟眼睛感知数据的方法。这样一来实际上可能会比采用更强大,但是更通用的网络给出更好的结果(事实上是给出了)。

posted on 2008-04-11 20:32  Bati  阅读(2757)  评论(0编辑  收藏  举报