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

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

chanchan666

2020-01-27

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

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

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

写回答

1回答

liuyubobobo

2020-01-28

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
2
liuyubobobo
回复
慕用0058068
可能会高点儿。但关键是获得这样“高一点”的准确度不是我们的目的。因为这样高一点,得到的结果不可信。test 的意义是获得“可信”的评测结果,而不是获得“最高”的评测结果。否则,我们其实很容易让 test 的结果是 100%。这一点,在课程后续,具体讲 validation 的时候,会再强调:)
2020-06-12
共2条回复

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

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

5893 学习 · 2454 问题

查看课程