5、如何减小误差 [Stanford - Machine Learning]

来源:互联网 发布:音箱设计软件 编辑:程序博客网 时间:2024/05/29 17:58

下面简要介绍一下我们如何减小误差,使我们的系统具有更高的识别率

1、针对性思考。动用大脑想想有没有更有针对性的解决方法,比如特征的选择,适应性更广(比如不区分单词大小写,在对垃圾邮件的处理中)
2、先实现一个简单的系统。通常我们面对一个新问题时,往往先实现一个快速简单的分类方法(比如不用神经网络而用逻辑回归)然后进行误差分析,error analysis误差分析,就是人工的看看那个地方分类分错了,然后想想为什么分错,在决定我要做什么,比如增加特征等。通常我们会找到一些导致我们误差的原因,比如特征选择不好,或者没有预处理什么的,这些误差对于我用复杂的网络或简单的网络实现是没有关系的,最后我们在用一个复杂的网络去实现,以取得最好的分类效果,我们在没有采用新方法并进行试验之前是没办法知道这个新方法(比如添加了新特征)好不好,或有多好,除非我们实现了它,这里就要引入一个numerical evaluation度量的值(这是很重的,只有有了这个值我们才可以进行比较,这个值往往可以设置成识别的成功率),这样才能评估我前后两种方法到底哪个更好。(这也就是为什么我们通常先实现一个简单的分类器的原因,因为它简单嘛,容易训练,节约时间嘛)
3、选择正确的度量值。这点非常重要(相比于简单的选择预测成功率作为评判标准,我们还有更好的选择),这里针对正偏skewed分类举例说明,假设要对病人是否得了癌症进行预测,我有一个系统预测了99%的病人是健康的,1%的病人是得了癌症的。我的预测的准确率也是接近99%,因为大部分人是健康的,而且我也预测准确了。可是事实上0.5%的人是真正得了癌症的,也就是我多预测了一倍的人数(预测的是1%),这样就显得很不准确了,如果我做一个最简单的预测就是所有人都没有的癌症,也就是预测0%的人得癌症了,我的正确率也很高,而且看样子效果和我预测1%的人得癌症的系统的效果相当,1-0.5%=0.5%-0。那么如何选择正确的评估值呢,这里画了一个图,我们用四分法,如图所示(搞懂什么是Precision什么是Recall)有时候用recall更好。


通常对待这种正偏的分类,或者大小不对等的分类,我们让y=1代表小的那一类(rare class),通常我们都是这么做的,比如在一个多类的分类器,每一个向量都是形如[1 0 0 0] [0 1 0 0]这样的。

4、厥值选择。在进行预测时,针对具体情况,我们要正确选择我们的录取厥值,因为我们的预测函数事实上是把可能性(简单的处理为大于50%就是true,小于50%就是false)但是在我们预测病人是否得癌症的时候,往往我们要通知他当且仅当我们非常确认的时候(threshold大于90%),这个时候预测的正确率可能会上升一点(未必一定),recall会下降。通常我们还会警告病人你有可能得了癌症需要住院观察一段时间(这时候我们选取threshold大于35%),于是预测正确率下降了,recall上升了。
由于我们选择了两个值作为度量值,相比于一个值来说,我如何通过两个值来评价我的度量呢?(因为通常我们需要的是一个值啊两个值如何判断),比较容易想到的就是取他们的平均值,但是这样做显然是不合理的,比如我们有一个网络对于任何x的输出都是y=1,见下面的例子。我们在应用中通常选取一个函数我们称之为F函数或者F1函数,见图片(注意这几种算法algorithm1-3 他们也许只是厥值threshold不同)

5、数据量与参数。人工智能领域有句话就叫做不是谁的算法更好,而是谁的数据更多,这就是大数据时代的特点,为什么facebook要用10亿样本训练imagenet就是这个原因。关于数据量,我们要又要有足够多的特征来反应来让我可以确定预测(比如预测房价,要有很多参数,如面积、位置、新旧、装修等等,如果只有一个面积是预测不出来的),另外还有一个就是要有足够多的样本。足够多的参数可以防止训练偏置(low bias)或者叫训练不足,足够多的样本可以防止过度训练(overfit)同时也(low variance)。



0 0