5.5 决定怎样提升效果
要提升效果,我们基本上有如下选择。
增加更多的数据 也许我们没有为学习算法提供足够的数据,因此增加更多的训练数据即可。
考虑模型复杂度 也许模型还不够复杂,或者已经太复杂了。在这种情况下,我们可以降低k值,使得较少的近邻被考虑进去,从而更好地预测不平滑的数据。我们也可以提高k值,来得到相反的效果。
修改特征空间 也许我们的特征集合并不好。例如,我们可以改变当前特征的范围,或者设计新的特征。又或者,如果有些特征和另外一些是别名关系,我们还可以删除一些特征。
改变模型 也许kNN并不适合我们的问题。无论我们让模型变得有多复杂,无论特征空间会变得多复杂,它永远也无法得到良好的预测效果。
在实际应用中,为了提升当前的效果,人们通常会从上述选项中随机选择一个,然后无序地进行尝试,希望可以偶然找到一个完美的配置。我们在这里也可以这样做,但在做出正确的抉择之前这样一定会花费更长的时间。我们应该采取更明智的路线,这就需要介绍一下偏差-方差折中。
5.5.1 偏差-方差及其折中
在第1章中,我们尝试了通过控制维度参数d 来拟合不同复杂度的多项式,并且发现二维多项式(一条直线)并不能很好地拟合示例数据。因为数据本质上并不是一条线。不管我们如何努力地去拟合,二维模型会把任何东西都当做一条直线。因此,可以认为这个模型偏离数据太远了;也就是欠拟合。
然后,我们试验了一下不同的维度,然后发现100维的多项式其实可以非常好地拟合训练数据。(当时,我们还不知道对训练集和测试集进行分割。)然而,我们很快又发现,它拟合得过于好了,进行了过度拟合。那么如果用不同的样本数据,我们将得到完全不同的100维多项式。因此,可以认为这个模型对给定数据有一个过高的方差,也就是过拟合。
大多数机器学习问题都处在这两个极端之间。在理想情况下,我们既想要低偏差,又想要低方差。但是,我们却生活在一个糟糕的世界里,必须在这两者之间做出权衡。如果我们提升其中一个,那么就可能让另外一个变差。
5.5.2 解决高偏差
假设我们正在深受高偏差之苦。在这种情况下,加入更多的训练数据明显不会有什么帮助。同样,删减特征肯定也没有帮助,因为我们的模型可能已经过于简单化了。
这这种情况下,唯一可行的方式就是增加更多的特征,让模型更为复杂,或者尝试别的模型。
5.5.3 解决高方差
相反,如果我们遇到高方差的问题,这意味着我们的模型对于数据来说太过复杂。在这种情况下,我们只能尝试获得更多数据,或者降低模型复杂度。这意味着要增大k ,使更多的近邻被考虑进来,或者删减一些特征。
5.5.4 高偏差或低偏差
要发现问题到底是什么,我们可以把在不同规模数据上得到的训练和测试误差画出来。
高偏差通常可以这样揭示出来:测试误差在开始时有一些下降,但之后会维持在一个很高的数值上,同时,随着数据集规模的增大,训练误差会与测试误差较为接近。而高方差可以通过两条曲线之间的巨大差距识别出来。
我们针对5NN画出不同数据规模下的误差之后发现,在训练和测试误差之间有一个很大的差距。这暗示了这里存在高方差的问题。参考下图:
从上面这张图中,我们立即就可以看出,由于对应于测试误差的虚线一直在0.4之上,加入更多训练数据不会有什么帮助。我们唯一的选择就是通过增大k 或者削减特征空间,来降低模型复杂性。
但是,尝试一削减特征空间,在这里也没有起到任何作用。我们可以通过画出只包含LinkCount 和NumTextTokens 的简化特征空间,很容易确认这一点。参考下图:
对其他更小规模的特征集合,我们也可以得到类似的图。无论我们选择哪个特征子集,这个图看起来都较为相似。
不过,通过增大k 来降低模型复杂度显现出了一些正面的影响。在下表中可以说明:
K | 均值(分数) | 标准方差(分数) |
90 | 0.628 0 | 0.027 77 |
40 | 0.626 5 | 0.027 48 |
5 | 0.576 5 | 0.035 57 |
但这并不够,它是以较低的实时分类性能作为代价的。例如,采用k =90,我们会有一个非常低的测试误差。但这也意味着,要对一个新帖子分类,我们需要寻找90个最邻近的其他帖子,来决定新帖子的好坏:
很明显,在这个情境中使用最邻近算法的时候,我们就面临着这样一个问题。此外,它还有另一个缺点。随着时间的增加,进入系统的帖子会越来越多。由于最邻近方法是一种基于示例的方法,我们必须在系统中存储所有的帖子。而我们得到的帖子越多,预测性能就会越慢。这跟基于模型的方法是不同的,在那里我们会从数据中得到一个模型。
所以在这里,我们现在有充足的理由抛弃最邻近方法,我们需要在分类算法世界中寻找更好的方法。当然,我们永远也无法知道是否会存在一个我们没想到过的完美特征。但是现在,让我们移步到另一个分类方法吧,这个方法在基于文本的分类情景中做得非常出色。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论