针对不同训练集,算法参数的问题

来源:4-6 网格搜索与k近邻算法中更多超参数

king437117

2018-01-19

老师您好,我在分离训练数据与测试数据的时候,没有固定随机种子。我发现每次网格搜索出的最优参数都不一样,貌似也没有一个收敛的趋势。对于算法的参数,我有几个问题想咨询老师:

  1. 是不是针对每组不同的训练集,都有必要进行一次搜参?或者说当训练集有变动的时候,要重新搜参?如果我使用固定一组参数,对不同训练集,表现的结果都还不错,是否还有必要进行搜参?

  2. 网格搜出的最优参数,针对训练集来说是最优解。那么对预测的数据来说,它一定是准确率最高的参数么?我该怎么看待这组搜索出来的参数呢?

  3. 在解决某个问题时,几种算法耗时相似的情况下,我是否要只通过搜索不同模型的最优参数,然后比较相应的评分,来决定使用的算法?


写回答

1回答

liuyubobobo

2018-01-19

非常好的问题!其实对于你的大多数问题,在课程后续会有所解答,在这里简单先提一下:)


1)实际上使用train_test_split做参数搜索,是有局限性的。主要问题就是你说的这个问题,每次随机产生的训练集是变化的。所以实际在参数搜索的时候要使用交叉验证的方式。这也是我们使用的这个网格搜索的类GridSearchCV中CV两个字母的意思——Cross Validation。关于交叉验证,在这个课程的第八章会详细介绍的。他的目的就是解决train_test_split中的随机性问题。


2)不一定!这是机器学习领域非常重要的话题。针对训练数据集得到准确率高,很有可能产生了过拟合。如何检测过拟合的发生也是第八章的话题:)非常巧,刚刚有同学提问了如何解决过拟合的问题,可以参考这里:http://coding.imooc.com/learn/questiondetail/39781.html


另外,如果之前没有接触过机器学习的思想,能提出这个问题,说明你的逻辑思维能力极强!天生的科学家资质!


3)决定使用何种算法,是非常复杂的问题。比如课程的第十章,会介绍更多的分类算法的评价指标。你会发现针对不同的应用场景,很可能你需要使用不同的评价指标,而不是有一个万能的指标来衡量算法的好坏。还有一些算法有它自己独特的指标。第十三章介绍的随机森林的oob就是一个很好的例子。另一方面,如前所述,所谓的“最优参数”也不一定是真正的最好的参数。之前有一名同学问指标平分一样的话如何选择模型。我的回答在这里:https://coding.imooc.com/learn/questiondetail/38243.html 其实,在指标评分不一样的时候,这里的很多因素也需要考量进来,来进行一个综合的判断与抉择:)



2
2
king437117
非常感谢!
2018-01-19
共2条回复

Python3入门机器学习 经典算法与应用  

Python3+sklearn,兼顾原理、算法底层实现和框架使用。

5839 学习 · 2437 问题

查看课程