首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >KNN算法中的最佳k值

KNN算法中的最佳k值
EN

Data Science用户
提问于 2020-05-03 10:36:54
回答 1查看 316关注 0票数 0

因此,我正在学习KNN算法,在那里我学习了交叉验证来寻找k.Now的一个最优值,我想应用网格搜索来获得最优值。我在堆栈溢出上发现了一个回答,其中standardScaler和KNN都被作为估计器传递。

代码语言:javascript
复制
 pipe = Pipeline([
        ('sc', StandardScaler()),     
        ('knn', KNeighborsClassifier(algorithm='brute')) 
    ])
    params = {
        'knn__n_neighbors': [3, 5, 7, 9, 11] # usually odd numbers
    }
    clf = GridSearchCV(estimator=pipe,           
                      param_grid=params, 
                      cv=5,
                      return_train_score=True) # Turn on cv train scores
    clf.fit(X, y)

我的问题

  1. 在传递给KNN之前,我已经在应用标准定标器对数据进行标准化。那么在这里,我还需要在估计量中通过标准标度器吗?
  2. 假设x和y是独立的因变量,为什么X和Y被传递而不是x_train和y_train,而x_train、y_train是在train_test_split操作后形成的?

这类代码的任何示例都将被附加。

EN

回答 1

Data Science用户

回答已采纳

发布于 2020-05-03 11:27:01

查看链接的答案,似乎他们正在直接培训Xy,因为他们使用的是GridSearchCV,这已经包括了k折叠交叉验证(默认情况下是5倍)。因此,基本上,通过使用定义的管道调用GridSearchCV,您已经为分类器获得了一个评分。

尽管如此,我仍然认为,在没有最终测试步骤的情况下,直接执行此操作从来都不是推荐的方法,即在未见数据上评估经过训练的模型的性能。因此,即使您做了k-折叠交叉验证,最好留下一个测试集,以获得最后的分数,特别是当k-折叠过程涉及一个超参数调优时,就像在这种情况下。在这种情况下,您需要另一个独立于调优的验证步骤。

关于第二点,不,如果数据已经正常化,则不需要包含StandardScaler。不过,由于您使用的是管道,为了简单起见,您最好将所有转换逻辑都包含在管道中。

票数 1
EN
页面原文内容由Data Science提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://datascience.stackexchange.com/questions/73445

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档