因此,我正在学习KNN算法,在那里我学习了交叉验证来寻找k.Now的一个最优值,我想应用网格搜索来获得最优值。我在堆栈溢出上发现了一个回答,其中standardScaler和KNN都被作为估计器传递。
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)这类代码的任何示例都将被附加。
发布于 2020-05-03 11:27:01
查看链接的答案,似乎他们正在直接培训X和y,因为他们使用的是GridSearchCV,这已经包括了k折叠交叉验证(默认情况下是5倍)。因此,基本上,通过使用定义的管道调用GridSearchCV,您已经为分类器获得了一个评分。
尽管如此,我仍然认为,在没有最终测试步骤的情况下,直接执行此操作从来都不是推荐的方法,即在未见数据上评估经过训练的模型的性能。因此,即使您做了k-折叠交叉验证,最好留下一个测试集,以获得最后的分数,特别是当k-折叠过程涉及一个超参数调优时,就像在这种情况下。在这种情况下,您需要另一个独立于调优的验证步骤。
关于第二点,不,如果数据已经正常化,则不需要包含StandardScaler。不过,由于您使用的是管道,为了简单起见,您最好将所有转换逻辑都包含在管道中。
https://datascience.stackexchange.com/questions/73445
复制相似问题