我试图使用SciKit-Learn来执行我的第一个KNN分类器。我一直在关注用户指南和其他在线示例,但有几件事我不确定。对于这篇文章,您使用以下Scikit-learn中KNN分类器中的网格搜索参数和交叉验证数据集
X =数据 Y =目标
1)在大多数的介绍,我读过它似乎在说你想要一个训练集,验证集机器学习的网页,和一套测试装置。根据我的理解,交叉验证允许您将训练和验证集合在一起以训练模型,然后您应该在测试集上对其进行测试以获得分数。但是,我在论文中看到,在很多情况下,您可以在整个数据集上进行交叉验证,然后将CV分数报告为准确性。我在一个理想的世界了解你将要测试在不同的数据,但如果这是合法的,我想在我的整个数据集进行交叉验证和报告这些分数
2)因此,起动过程
我定义我的KNN分类如下
knn = KNeighborsClassifier(algorithm = 'brute')
我使用
clf = GridSearchCV(knn, parameters, cv=5)
现在搜索最好的N_NEIGHBORS如果我说
clf.fit(X,Y)
我可以检查使用
clf.best_params_
的最佳参数,然后我可以得到一个得分
clf.score(X,Y)
但是 - 我的理解是,这并没有交叉验证的模型,因为它只给出1分?
如果我看到clf.best_params_ = 14,现在我能去
knn2 = KNeighborsClassifier(n_neighbors = 14, algorithm='brute')
cross_val_score(knn2, X, Y, cv=5)
现在我知道该数据已交验证,但我不知道这是否是合法使用clf.fit来找到最好的参数,然后用一个新的knn模型使用cross_val_score?
3)据我所知, '适当' 的方式做这将是如下
斯普利特X_train,X_test,Y_train,Y_test, 规模列车组 - >应用变换测试套
knn = KNeighborsClassifier(algorithm = 'brute')
clf = GridSearchCV(knn, parameters, cv=5)
clf.fit(X_train,Y_train)
clf.best_params_
,然后我可以得到一个得分
clf.score(X_test,Y_test)
在这种情况下,是用最好的参数计算的分数?
我希望这是有道理的。我一直在尽力找到尽可能多的信息,但我已经到了可以直接得到答案的地步。
在我的脑海中,我试图使用整个数据集获得一些交叉验证的分数,但也使用了gridsearch(或类似的东西)来微调参数。
在此先感谢
所以真的,当我在第2点是实现使用clf.score(X,Y)我想要的东西 - 使用所有数据的交叉验证分类。如果我继续使用cross_val_score(knn2,X,Y,cv = 5)和最好的参数(是的,只有一个),这将会重复检查CV,正如您在第3点中指出的那样。 – browser
这意味着两个我的观点2和观点3是合法的方法? – browser
@browser是的,这是正确的:) – nitheism