当我们做监督学习时,有一系列的带有标签的数据,通常我们把它们分成三部分。Training Data,Cross Validation Data,Testing Data.占比通常是60%,20%,20%.确定好具体用哪个算法后,Training Data用来训练算法的参数,Validation Data用来选择具体的模型(比如the degree of polynomial,the parameter of regularization,防止underfitting(high bias) or overfitting(high variance)),模型和参数都确定并训练完之后,最后用Testing Data去验证算法的精度。
Training Data训练算法的参数,通常用的是对Cost Function 使用梯度下降类的算法实现,大部分数据处理语言如MATLAB/Python等都会提供相应的API,我们只需提供Cost Function和对应的Gradient即可。
Validation Data选择模型,简单来讲,就是判断模型是否underfitting(high bias) 或者 overfitting(high variance),可以用Learning Curves来直观的判断。Learning Curves横轴为样本数,纵轴位the Error of Training Data 和 the Error of Cross validation Data。
如下图,图一显然为欠拟合,图二为图一的Learning Curves,观察图二,很直观的可以看到,随着样本数m的增加,the Error of Training Data在增加,the Error of Cross validation Data在下降,两个Error都趋于同一个值,且该值较大。可以得出结论,如果模型是欠拟合,增加样本数效果不大,此时可减小正则化参数、增加样本特征、多项式组合等方式让模型不再欠拟合。
图三显然为过拟合,图四为图三的Learning Curves,观察图四,很直观的可以看到,随着样本数m的增加,the Error of Training Data几乎不变,the Error of Cross validation Data在下降。可以得出结论,如果模型是过拟合,增加样本数是有效的,此外,还可增加正则化参数、减少样本特征等方式让模型不再过拟合。
通过Training Data 和 Cross Validation Data获得确定的学习算法后,最后需要用Testing Data 进行Error Analysis。
用训练得到的参数,对Testing Data 进行标签预测,得到一系列的Predict Class,再和Testing Data实际的标签Actual Class进行对比,计算精度。最简单的精度计算,比如实际中y=1的有100个,而预测出来的y=1只有90个,此时得精度是90%。但面对skewed class便不准了。比如Testing Data中,总共有100个样本,实际95个为y=1,5个为y=0,此时就算你什么都不干,直接预测100个样本全为y=1,它的精度也高达95%.
于是需要用到Precision/Recall,一般对样本稀少的那一类进行分析,分为四部分,True Pos,False Pos,True Neg,False Neg,计算方式如下
但是,针对不同的算法模型,这样得出来的有两组数据,Precision和Recall,不方便我们去判断这个算法好不好,需要把这两个数据整合成一个,如果这个大,就代表算法好,小,就代表算法不好。于是定义F1Score=2*PR/(P+R)。F1Score大,算法好,F1Score小,算法不好。
总结:将样本数据分为三部分:
Training Data用来训练算法的参数
Cross-Validation Data用来选择算法的模型
Testing Data用来计算算法的精度