我正在尝试使用SciKit-Learn执行我的第一个KNN分类器。我一直在遵循用户指南和其他在线示例,但有几件事我不确定。在此帖子中,让我们使用以下内容:
X = 数据,Y = 目标
在我阅读的大多数机器学习入门页面中,似乎都说您需要训练集、验证集和测试集。从我的理解来看,交叉验证允许您将训练集和验证集合并以训练模型,然后您应该在测试集上进行测试以获得分数。然而,我在论文中看到,在很多情况下,您可以在整个数据集上进行交叉验证,然后将CV分数报告为准确性。我知道在理想情况下,您会想要在单独的数据上进行测试,但如果这是合法的,我想在整个数据集上进行交叉验证并报告那些分数。
所以开始这个过程
我将我的KNN分类器定义如下:
knn = KNeighborsClassifier(algorithm = 'brute')
我使用以下方法搜索最佳的n_neighbors
clf = GridSearchCV(knn, parameters, cv=5)
现在如果我说
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模型进行交叉验证?
- 我理解应该按照以下方式进行:
将数据分为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)
在这种情况下,得分是使用最佳参数计算的吗?
我希望这有意义。我一直在尝试寻找尽可能多的信息而不必发布,但是我已经到了认为获取一些直接答案会更容易的地步。
在我的脑海中,我正在尝试使用整个数据集来获取一些交叉验证分数,同时使用网格搜索(或类似的东西)来微调参数。