2016-11-16 83 views
4

我试图使用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(或类似的东西)来微调参数。

在此先感谢

回答

5
  1. 是,你可以在你的整个数据集的简历是可行的,但我还是建议您将数据至少分成2组一个CV,一个用于测试。

  2. .score功能应该根据documentation这是best estimator的得分(这是最好的得分估计你适合您GridSearchCV得到)在给定的X返回一个float值,Y

  3. 如果你看到最好的参数是14,那么你可以继续在你的模型中使用它,但如果你给它更多的参数,你应该设置它们。 ( - 我说因为你没有给出你的参数列表)而且是的,再次检查你的简历是合理的,以防万一这个模型是否应该如此。

希望,使事情更清晰:)

+0

所以真的,当我在第2点是实现使用clf.score(X,Y)我想要的东西 - 使用所有数据的交叉验证分类。如果我继续使用cross_val_score(knn2,X,Y,cv = 5)和最好的参数(是的,只有一个),这将会重复检查CV,正如您在第3点中指出的那样。 – browser

+0

这意味着两个我的观点2和观点3是合法的方法? – browser

+0

@browser是的,这是正确的:) – nitheism