广州新闻网
金融理财 当前位置:首页 > 金融理财 > 正文

每天五分钟机器学习:如何使用误差分析帮助我们优化机器学习算法

   19:40:52 小雨玩创新

  误差分析

  我们使用垃圾邮件分类来举例,当我们构建好一个垃圾邮件分类模型之后,会看一看交叉验证数据集,然后看一看哪些邮件被算法错误地分类。因此,通过这些被算法错误分类的垃圾邮件与非垃圾邮件,你可以发现某些系统性的规律:什么类型的邮件总是被错误分类。这个过程能启发你构造新的特征变量,或者告诉你:现在这个系统的短处,然后启发你如何去提高它。具体来说,我们来举一个例子:

  在交叉验证集中有500个实例,假设该算法有非常高的误差率,它错误分类了一百个交叉验证实例,那么我们需要人工检查这100个实例,然后手工为它们进行分类:

  1.这是什么类型的邮件

  2.哪些特征变量能够帮助这个算法来正确分类它们

  

  比如这100个分错的实例中。有53封和钓鱼网站有关,12封和药物有关,那么我们就可以说明算法在垃圾邮件中关于钓鱼网站上表现很差,在这一类别存在较大的预测误差(次数出现的最多),所以我们就需要构建更好的特征变量来解决这个问题,来更好的分类关于钓鱼网站的邮件。

  同时我们还要看哪些特征变量可能会帮助算法正确的分类邮件,比如:

  有意的拼写错误5个

  不寻常的邮件路由的来源6个

  垃圾邮件特有的符号方式32个

  以上这些都是从交叉验证集中得到的各种情况的个数,那么可能说明有意拼写错误出现的频率少。这暂且不值得花费时间解决,而特有符号出现的比较多,那么说明这是一个很好的特征,说明我们应该花费时间取构造基于标签符号的更加复杂的特征变量了。

  所以我们构建一个学习算法可以总结为:

  1. 从一个简单的能快速实现的算法开始,实现该算法并用交叉验证集数据测试这个算法

  2. 绘制学习曲线,决定是增加更多数据,或者添加更多特征,还是其他选择

  3. 进行误差分析:人工检查交叉验证集中我们算法中产生预测误差的实例,看看这些实例是否有某种系统化的趋势,从而构造基于某种趋势的更加复杂的特征变量了

  以上就是误差分析是一种手动检测的过程,检测算法可能会犯的错误,这经常能够帮助我们找到有效的手段,这也解释了为什么推荐先实践一种快速即便不完美的算法,因为对于不同的算法,它们所遇到的问题一般总是一样的,所以我们先通过简单的找到问题所在,比困难的算法找到问题的所在要容易的多,通过简单的算法找到难以处理的样本(分错的样本),这样我们就可以集中精力在这些真正问题上了(如何分类正确这些样本)。

  强烈推荐在交叉验证集上实施误差分析,而不是在测试集上。

  数值评估

  误差分析并不总能帮助我们判断应该采取怎样的行动。有时我们需要尝试不同的模型,然后进行比较,在模型比较时,用数值来判断哪一个模型更好更有效,通常是看交叉验证集的误差。我们在构造机器学习算法的时候,另外一个小窍门就是:保证你自己有一种数值计算的方式来评估你的机器学习算法(一种使用数字来说话的评估算法),他能告诉我们算法究竟有多么好。我们来看一个例子:

  在 我 们 的 垃 圾 邮 件 分 类 器 例 子中 , 对于我们是 否 应 该 将

  discount/discounts/discounted/discounting 处理成同一个词?

  一种方法是检查这些单词的开头的几个字母,如果我们检查开头的这几个字母,我们可以看出来它们就是处理成同一个单词。在自然语言处理中这种方法是通过一种词干提取的软件实现的(Porter Stemmer),它会将上面的单词都视为同一个单词。因为这个软件只会检查开头的几个单词,所以有些时候会出问题,比如universe和university二者意思并不是一样的,但是开头确实一样的,所以很难说清楚词干提取软件到底有没有用,而且误差分析并不能帮助我们做出这类判断。

  我们只能尝试采用和不采用软件这两种不同方案,然后根据数值检验的结果来判断哪一种更好。具体来说就是通过交叉验证集来判断使用这个软件和不使用这个软件的错误率(错误率是一个具体的数据)。

  

  我们可以看出不使用的使用5%的错误率,使用的时候用3%的错误率,所以基本可以说明的一点使用的效果会更好。

  数值评估方法的用处很多:比如Mom和mom是否应该看成一个单词还是看成不同的单词,我们仍然可以使用我们的交叉验证集来验证。

  因此当你在构造学习算法的时候,你总会尝试很多新的想法,如果每次手动的检测这些例子表现好还是表现差(我们并不用管哪些类别的样本分类错误,我们只用管错误的占比多少,也就是错误率),那么会很难让我们做出决定,但是我们通过这样的量化的数值评估的方式,我们可以来看这个误差是变大了,还是变小了,可以方便直观的看出来究竟我们的新想法是否好,这会提高我们实践算法的速度。

  因为我们可以先看看算法造成的错误,通过误差分析,来看看算法在哪些样本上犯了什么错,然后来决定优化的方式。

  另一件事是:假设你有了一个快速而不完美的算法实现,又有一个数值的评估数据,这会帮助你尝试新的想法,快速地发现你尝试的这些想法是否能够提高算法的表现,从而你会更快地做出决定,在算法中放弃什么,吸收什么,误差分析可以帮助我们系统化地选择该做什么。

  本节课将会讲到误差分析的概念。如果你准备研究机器学习的东西,一般不是首先建立一个非常复杂的系统,拥有多么复杂的特征变量。而是先用少的特征变量,构建一个简单的算法,这样我们可以很快地实现这个算法。

  实现好之后我们就先来运行这个算法,即使效果不太好也没有关系。然后通过交叉验证来检验数据,然后做出这个算法的学习曲线,然后通过这个算法的学习曲线以及检验误差来找出你的算法是否有高偏差和高方差的问题,或者别的问题。在这样分析之后,再来决定用更多的数据训练,或者加入更多的特征变量是否有用。

  之所以这样做是因为:一开始我们并不知道我们是应该寻找更多的特征变量还是更多的数据来解决我们遇到的问题,但是当我们快速实践一个不算太完美的算法的时候,我们就知道了我们算法的问题了。

  专栏推荐

  误差分析

  我们使用垃圾邮件分类来举例,当我们构建好一个垃圾邮件分类模型之后,会看一看交叉验证数据集,然后看一看哪些邮件被算法错误地分类。因此,通过这些被算法错误分类的垃圾邮件与非垃圾邮件,你可以发现某些系统性的规律:什么类型的邮件总是被错误分类。这个过程能启发你构造新的特征变量,或者告诉你:现在这个系统的短处,然后启发你如何去提高它。具体来说,我们来举一个例子:

  在交叉验证集中有500个实例,假设该算法有非常高的误差率,它错误分类了一百个交叉验证实例,那么我们需要人工检查这100个实例,然后手工为它们进行分类:

  1.这是什么类型的邮件

  2.哪些特征变量能够帮助这个算法来正确分类它们

  

  比如这100个分错的实例中。有53封和钓鱼网站有关,12封和药物有关,那么我们就可以说明算法在垃圾邮件中关于钓鱼网站上表现很差,在这一类别存在较大的预测误差(次数出现的最多),所以我们就需要构建更好的特征变量来解决这个问题,来更好的分类关于钓鱼网站的邮件。

  同时我们还要看哪些特征变量可能会帮助算法正确的分类邮件,比如:

  有意的拼写错误5个

  不寻常的邮件路由的来源6个

  垃圾邮件特有的符号方式32个

  以上这些都是从交叉验证集中得到的各种情况的个数,那么可能说明有意拼写错误出现的频率少。这暂且不值得花费时间解决,而特有符号出现的比较多,那么说明这是一个很好的特征,说明我们应该花费时间取构造基于标签符号的更加复杂的特征变量了。

  所以我们构建一个学习算法可以总结为:

  1. 从一个简单的能快速实现的算法开始,实现该算法并用交叉验证集数据测试这个算法

  2. 绘制学习曲线,决定是增加更多数据,或者添加更多特征,还是其他选择

  3. 进行误差分析:人工检查交叉验证集中我们算法中产生预测误差的实例,看看这些实例是否有某种系统化的趋势,从而构造基于某种趋势的更加复杂的特征变量了

  以上就是误差分析是一种手动检测的过程,检测算法可能会犯的错误,这经常能够帮助我们找到有效的手段,这也解释了为什么推荐先实践一种快速即便不完美的算法,因为对于不同的算法,它们所遇到的问题一般总是一样的,所以我们先通过简单的找到问题所在,比困难的算法找到问题的所在要容易的多,通过简单的算法找到难以处理的样本(分错的样本),这样我们就可以集中精力在这些真正问题上了(如何分类正确这些样本)。

  强烈推荐在交叉验证集上实施误差分析,而不是在测试集上。

  数值评估

  误差分析并不总能帮助我们判断应该采取怎样的行动。有时我们需要尝试不同的模型,然后进行比较,在模型比较时,用数值来判断哪一个模型更好更有效,通常是看交叉验证集的误差。我们在构造机器学习算法的时候,另外一个小窍门就是:保证你自己有一种数值计算的方式来评估你的机器学习算法(一种使用数字来说话的评估算法),他能告诉我们算法究竟有多么好。我们来看一个例子:

  在 我 们 的 垃 圾 邮 件 分 类 器 例 子中 , 对于我们是 否 应 该 将

  discount/discounts/discounted/discounting 处理成同一个词?

  一种方法是检查这些单词的开头的几个字母,如果我们检查开头的这几个字母,我们可以看出来它们就是处理成同一个单词。在自然语言处理中这种方法是通过一种词干提取的软件实现的(Porter Stemmer),它会将上面的单词都视为同一个单词。因为这个软件只会检查开头的几个单词,所以有些时候会出问题,比如universe和university二者意思并不是一样的,但是开头确实一样的,所以很难说清楚词干提取软件到底有没有用,而且误差分析并不能帮助我们做出这类判断。

  我们只能尝试采用和不采用软件这两种不同方案,然后根据数值检验的结果来判断哪一种更好。具体来说就是通过交叉验证集来判断使用这个软件和不使用这个软件的错误率(错误率是一个具体的数据)。

  

  我们可以看出不使用的使用5%的错误率,使用的时候用3%的错误率,所以基本可以说明的一点使用的效果会更好。

  数值评估方法的用处很多:比如Mom和mom是否应该看成一个单词还是看成不同的单词,我们仍然可以使用我们的交叉验证集来验证。

  因此当你在构造学习算法的时候,你总会尝试很多新的想法,如果每次手动的检测这些例子表现好还是表现差(我们并不用管哪些类别的样本分类错误,我们只用管错误的占比多少,也就是错误率),那么会很难让我们做出决定,但是我们通过这样的量化的数值评估的方式,我们可以来看这个误差是变大了,还是变小了,可以方便直观的看出来究竟我们的新想法是否好,这会提高我们实践算法的速度。

  因为我们可以先看看算法造成的错误,通过误差分析,来看看算法在哪些样本上犯了什么错,然后来决定优化的方式。

  另一件事是:假设你有了一个快速而不完美的算法实现,又有一个数值的评估数据,这会帮助你尝试新的想法,快速地发现你尝试的这些想法是否能够提高算法的表现,从而你会更快地做出决定,在算法中放弃什么,吸收什么,误差分析可以帮助我们系统化地选择该做什么。

  本节课将会讲到误差分析的概念。如果你准备研究机器学习的东西,一般不是首先建立一个非常复杂的系统,拥有多么复杂的特征变量。而是先用少的特征变量,构建一个简单的算法,这样我们可以很快地实现这个算法。

  实现好之后我们就先来运行这个算法,即使效果不太好也没有关系。然后通过交叉验证来检验数据,然后做出这个算法的学习曲线,然后通过这个算法的学习曲线以及检验误差来找出你的算法是否有高偏差和高方差的问题,或者别的问题。在这样分析之后,再来决定用更多的数据训练,或者加入更多的特征变量是否有用。

  之所以这样做是因为:一开始我们并不知道我们是应该寻找更多的特征变量还是更多的数据来解决我们遇到的问题,但是当我们快速实践一个不算太完美的算法的时候,我们就知道了我们算法的问题了。

  专栏推荐

达到当天最大量



广州新闻网 版权所有© www.asapbj.org 技术支持:广州新闻网 | 网站地图