1. 误差分析(Error Analysis)
当研究机器学习时,最好的方法不是使用复杂的系统,而是用简单的算法,最快得到结果。即便运行不完美,但是也要运行一遍,最后通过交叉验证来验证数据。一旦做完,可以画出学习曲线,通过画出学习曲线,以验证检验误差来判断算法是否具有高偏差或者高方差的问题。在分析之后再决定使用更多的数据训练或者加入更多的特征变量。所以构建一个学习算法的推荐方法为:
① 从一个简单的能快速实现的算法,实现该算法并用交叉验证集数据测试这个算法;
② 绘制学习曲线,决定增加更多数据,或者添加更多特征,还是其他选择;
③ 进行误差分析:人工检查交叉验证集中我们算法中产生预测误差的实例,看看这些实例是否有某种系统化的趋势。
有以下几个Tips可以注意一下:
① 强烈推荐在交叉验证集上来实施误差分析,而不是在测试集上;
② 当研究一个新的机器学习问题时,推荐实现一个较为简单快速的算法,当有了初始的实现之后,他会变成一个非常有力的工具来帮助决定下一步的做法。可以先看看算法造成的错误,通过误差分析,来决定优化的方式。
2. 类偏斜的误差度量(Error Metrics for skewed Classes)
当我们遇到这样一种问题时:预测癌症是否为恶性,但是在训练集中,只有0.5%的实例是恶性肿瘤,假设我们编写一个算法,在所有的情况下都预测所有的肿瘤都是良性的,那么误差只有0.5%,然后我们通过训练而得到的神经网络的算法却有1%的误差,显然这时候误差的大小式不能视为评判算法效果的依据的。所以这种问题可以通过查准率(Precision)和查全率(Recall)来衡量类偏斜的误差。
先明白一下几个变量的意义:
① 正确肯定(True Positive, TP): 预测为真,实际为真
② 正确否定(True Negative, TN): 预测为假,实际为假
③ 错误肯定(False Positive, FP): 预测为真,实际为假
④ 错误否定(False Negative, FN): 预测为假,实际为真
查准率P=TP/(TP+FP),即在所有的预测为正例的样本中,真正是正例的比例。例如,在所有实际上有恶性肿瘤的病人中,成功预测有恶性肿瘤的病人的百分比。
查全率R=TP/(TP+FN),即在所有的正例中,预测正确的比例。例如,在所有实际上有恶性肿瘤的病人中,成功预测有恶性肿瘤病人的百分比。
那么查准率和查全率怎么取舍呢,假设我们的算法输出结果在0到1之间,我们使用阈值为0.5来经预测真和加的判断。如果我们希望在非常确信的情况下预测为真(肿瘤为恶性),即我们希望更高的查准率,我们可以使用更大的阈值,比如0.7,这样做我们会减少错误预测病人为恶性肿瘤的情况,同时却会增加未能成功预测肿瘤为恶性的情况;如果我们希望提高查全率,尽可能让所有有可能是恶性肿瘤的病人都得到进一步的检查和诊断,我们应该使用比0.5更小的阈值,比如0.3.
在不同的阈值下,查全率和查准率的关系可以由一下图来表示:
有一个可以帮助选择阈值的方法,就是计算F1值(FI score),其计算公式为:
这样我们可以选择是F1更高的阈值,依次来权衡查全率和查准率之间的关系。
3. 关于机器学习中的数据(Data for Machine Learning)
① 关于机器学习系统的数据,不要盲目地开始,要花大量的时间来收集大量的数据,因为数据有时候是唯一能起到实际作用的。
② 关于数据量和机器学习算法性能之间的关系了,可以由下图表示出来:
该图表示的含义为,总体趋势上,数据量越大,算法(不管好的算法还是劣的算法)的性能越好。在数据量少的时候,好的算法的性能要优于劣的算法,但是随着数据量的增大,劣的算法的性能可能会赶超好的算法。