准确率结果相同时,不同超参数值的选择偏向
来源:4-5 超参数
奔跑的小女子
2018-01-07
在第4-5课程中,搜索明科斯基距离相应的p时,由于我的算法与老师的略有不同,如下图,因best参数更新在于当前分数大于最好分数,则其只记录一组最好分数的记录
则 当最好分数为0.988888888889存在多组记录,如 我的bset_p=1,best_k=5 而老师的是bset_p=2,best_k=3
那么带来的问题是对于这两种结果一样,但参数数值不同的超参数应该怎么选取,应系统考虑哪些条件?(算法运行时间?)
1回答
-
由于sklearn中的数据相对还是比较toy的,数据量也不够,所以会出现这种情况。真实数据其实蛮少出现这种情况的。如果出现了个人经验可以考虑如下的几个因素:
1)万金油的方式:加大样本量,让结果更可靠。样本越大,出现“平局”的概率越低,结果也越可靠。而且这个方法很可能是最重要,最直接,最有效的解决问题的方法。
2)如果准确率很高的话,可以考虑降低train的样本量,增大test的样本量。test的样本量越大,平局概率越低。
3)应该偏向于使用使模型更加简单的参数。对于knn来说,k越大,模型越简单。所以我倾向使用k=5的模型。关于模型复杂度的话题,我们会在第八章再进行介绍。届时也会再回顾knn模型的简单与复杂的问题。
4)使用可以有更加合理解释的参数。比如对于明可夫斯基举例来说,我个人就不喜欢p >= 3的参数,因为在我看来p>=3的明可夫斯基距离缺少直观的数学解释。除非p>=3时候得到了性能的巨大提升,我才会选用。不过此时我也会关注一下为什么有一个p>=3的参数,优于p=1或p=2那么多,这背后可能隐藏了我们没有发现的特征关系。很可能要回到数据整理阶段,看看我们是不是可以收集或者计算出更好的特征。我们在这个课程讲PCA,多项式回归和SVM的时候,都将关注在算法的层面生成新的特征的话题。但是数据的整理包括特征工程是一个很大的话题,我们在这个课程中主要介绍机器学习算法,对这方面涉及不多。
5)要注意:使用train_test_split评测最终算法的结果,和训练测试数据集是怎样划分的有很大的关系。而这个划分是随机划分的。所以可以考虑对于每一组参数多次对数据进行随机划分,用多次平均值的结果作为最终结果以尽量消除随机的影响。
6)其实使用train_test_split的方式进行调参是有系统性的问题的。我们在这个课程的第八章将具体讲解这个问题。使用Cross Validation的方式进行调参将更好,极端情况下使用LOOCV的方式(会非常耗时)。这些内容都会在第八章进行介绍。
7)考虑除准确度以外的其他性能指标。在这个课程的第十章,将对分类还有什么指标进行介绍。包括精准率,召回率,F1 Score,PR曲线,ROC曲线等。
8)直接在生产环境中进行AB测试。两组参数都表现很好,所以也不一定非要在实验环境分出个高下,直接上生产环境没什么问题。当然了如果两组参数都一样烂,我们也就不用费劲给他们分出个高下了。
暂时想到这么多。
512018-01-07
相似问题