采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
我理解的比较模型accuray,需要先根据X_train,y_train数据fit,然后根据X_test, y_test数据来predict,才能得到score。然后比较每一组超参数的score.
但是视频中只有一步fit.就得到了score.所以实际上这个fit内部包含度对数据集的train_test_split操作吗?
还有一个问题?为啥我使用scikit-learn中的网格搜索,结果很奇怪呢? 我把你的代码本地运行一遍,结果和上述一样。是scikit-learn的版本不一样吗?
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。
继续加油!:)
bobo老师,如果不将原始数据 train_test_split,直接进行 GridSearchCV, 训练出来的选择器的准确度是不是会高一点?
可能会高点儿。但关键是获得这样“高一点”的准确度不是我们的目的。因为这样高一点,得到的结果不可信。test 的意义是获得“可信”的评测结果,而不是获得“最高”的评测结果。否则,我们其实很容易让 test 的结果是 100%。这一点,在课程后续,具体讲 validation 的时候,会再强调:)
登录后可查看更多问答,登录/注册
Python3+sklearn,兼顾原理、算法底层实现和框架使用。
2.5k 19
3.5k 17
2.9k 15
1.6k 15
1.4k 14