请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

GridSearchCV中对训练数据集进行fit后,为什么就可以得到最佳超参数了?

我理解的比较模型accuray,需要先根据X_train,y_train数据fit,然后根据X_test, y_test数据来predict,才能得到score。然后比较每一组超参数的score.

但是视频中只有一步fit.就得到了score.所以实际上这个fit内部包含度对数据集的train_test_split操作吗?

还有一个问题?为啥我使用scikit-learn中的网格搜索,结果很奇怪呢?
图片描述图片描述
我把你的代码本地运行一遍,结果和上述一样。是scikit-learn的版本不一样吗?

正在回答 回答被采纳积分+3

1回答

liuyubobobo 2020-01-28 08:13:31

1

是的,你可以理解成 fit 内部做了 train_test_split,然后对某一组参数进行试验,记录结果,然后换一组参数,继续实验,记录结果,以此类推,最后找到了最好的那组参数。这个过程封装在了 fit 函数中。


不过,其实,GridSearchCV 内部做的不是 train_test_split,而是交叉验证(Cross Validation),对于什么是交叉验证,这个课程后续会介绍。也可以参考这里:http://coding.imooc.com/learn/questiondetail/160246.html


2

我测试了一下,是的,新的版本,对于这个数据,搜索结果是 n_neighbors 为 1 了。

对此,可以参考这里:http://coding.imooc.com/learn/questiondetail/153015.html

在课程后续,也会介绍模型复杂度的概念。整体,对于 knn 算法,k 参数建议从 3 甚至是 5 开始搜索。而新版的 sklearn 中的 KNN 算法,在封装上,默认的 k 值也从 3 变成了 5。


继续加油!:)

1 回复 有任何疑惑可以回复我~
  • bobo老师,如果不将原始数据 train_test_split,直接进行 GridSearchCV, 训练出来的选择器的准确度是不是会高一点?
    回复 有任何疑惑可以回复我~ 2020-06-11 15:11:48
  • 可能会高点儿。但关键是获得这样“高一点”的准确度不是我们的目的。因为这样高一点,得到的结果不可信。test 的意义是获得“可信”的评测结果,而不是获得“最高”的评测结果。否则,我们其实很容易让 test 的结果是 100%。这一点,在课程后续,具体讲 validation 的时候,会再强调:)
    回复 有任何疑惑可以回复我~ 2020-06-12 02:56:05
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信