采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
上面通过交叉验证已经得到模型了啊,还有必要再次对整体fit一下吗
交叉验证没有得到“一个”模型!交叉验证得到的结果是最佳的参数组合和在这组参数组合上计算出的一个分数!
回忆一下,k-fold交叉验证做的事情是:把数据分成k份,分别用k-1份做训练数据,1份作测试数据,我们就能得到k个模型,以及k个模型的分数。将这些模型分数的平均分,作为衡量这组参数的得分。对于不同的参数,我们能得到不同的得分。我们选择得分最高的那组参数,作为我们最终训练模型的参数。
k-fold之后,我们没有得到一个模型。这个过程中,我们针对每一组参数,都训练出了k个模型,用于计算那个分数。这k个模型没有结合所有的数据信息,是一个中间计算过程的产物,不是我们最重要是用的模型!
我们最终,要用交叉验证获得的最佳参数,训练出新的模型!
在你给的截图中,In[7] 就使用交叉验证的得到的参数,创建了新的knn实例;In[8]完成使用这组参数训练出我们最终要使用的模型:)
那也就是说在网格搜索中我们用best_knn_clf = grid_search.best_estimator_,这里我们没有手动去fit(X_train,y_trian).应该是网格搜索自动帮我们执行了这个操作.在引申一个问题,这个fit我执行两遍会有副作用吗?
如果逻辑正确肯定没有副作用(除了重新fit了一遍)。关键你要搞清楚网格搜索和交叉验证的逻辑过程。网格搜索和交叉验证不一样!网格搜索却是留下了一个模型。加查验证以后没有留下一个模型!如果有需要,从底层把网格搜索和交叉验证分别实现一下,体会一下:)
登录后可查看更多问答,登录/注册
Python3+sklearn,兼顾原理、算法底层实现和框架使用。
2.4k 19
3.4k 17
2.9k 15
1.6k 15
1.4k 14