李燕

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

Error analysis--让我们系统的去判断我们接下来要做什么,而不是随机的,凭直觉地选择一个去做

我们在设计机器学习应用时,刚开始使用简单(简单的features)的算法来很快的完成它,它可能并不完美,不能很好的解决我们的问题。然后在交叉验证集上来检验这个算法。

然后通过画出学习曲线(判断是high bias还是high variance问题)来决定下一步怎么做(是增加更多的数据,还是增加features),这样做可以避免过早优化,因为我们不可能事先知道怎么去优化我们的算法,我们需要证据来显示我们该如何优化,该接下来做什么。

我们也可以通过误差分析来进行,在交叉验证集上检查那些被误分的邮件有没有系统化的规律,从中得出启发,我们应该增加哪些features来提高算法的性能。

例子:

如假设我们有500个examples在交叉验证集里面,算法将100封邮件误分了,我们手动检查这100封邮件,确定这些邮件的类型(卖药的,推销假品,钓鱼邮件或者其它的),通过算出每种类别中不同的邮件数,你会发现算法在区分钓鱼邮件时表现很差,这说明你应该花更多的时间来研究怎么区分这种类型的邮件,然后看是否能构建出更合适的features来区分这种类型的邮件。

同时也看看哪些features可帮助算法更好的分类。假设我们有右边三种方法来帮助我们。然后手动的检查被误分的邮件,看每种方法分别有多少封邮件。误拼写只有5封,说明我们没有必要去花大力气去编写算法来检测这种错误;如果我们发现大量的邮件都有不一般的标点符号规律,这是一个很强的特征,说明你应该花费时间去构造基于标点符号的更复杂的features。

误差分析是一种手动检查的过程,检查算法所犯的错误来帮助你找到更有效的方法去提高算法。因为大多数的机器学习的算法是类似的,先实行一种快速但是不完美的算法,然后通过分析错误来告诉我们应该集中在哪儿来提高算法的性能

 

另一个小窍门是保证有一个可以在数值上进行分析(一种用数字说话的方法)的方法来评估我的算法。

如我们要否要将discount/discounts/....这些看作同一个词,在自然语言处理中,这种方法是通过一种叫做“词干提取”的软件来实现的(Porter Stemmer波特词干提取法),这个软件会将discount discounts看做一个单词。但是这种词干提取软件只会检查开头的几个字母,可能会造成一个问题(如universe与university被视为同一个单词)。所以在你决定是否要使用词干提取软件来进行分类时,是很难决定的。

特别的是当我们用Error analysis也很难决定是否要使用词干提取软件时,最好的办法是快速来实现一下词干提取是否有效。

通过交叉验证错误率来评估词干提取是否有用。

是否要区分大小写?-----通过验证,如不区分则错误率为3.2%,然后来决定是否要区分。

在交叉验证集上进行误差分析

总结

  1. 首先实现一个快速简单不完美的算法
  2. 通过学习曲线(是bias还是variance)误差分析(应集中在哪一块)来看它犯了些什么错误来决定优化的方式
  3. 数值分析能通过量化来帮助你快速地发现你尝试的这些想法是否能提高算法的表现

 

posted on 2016-01-25 17:43  李燕  阅读(500)  评论(0编辑  收藏  举报