Matlab 交叉验证和 K-NN

Matlab cross validation and K-NN

我正在尝试在 Matlab 中构建一个带有交叉验证的 knn 分类器。由于我的 MATLAB 版本,我使用 knnclassify() 来构建分类器 (classKNN = knnclassify (sample_test, sample_training, training_label))。

我无法使用 crossval()

提前致谢。

有两种方法可以在Matlab中执行K-最近邻。第一个是像您一样使用 knnclassify() 。但是,此函数将 return 预测标签,您不能将 crossval() 与此一起使用。交叉验证是在模型上执行的,而不是在其结果上执行的。在 Matlab 中,模型由 object 描述。

crossval() 仅适用于对象(分类器对象,无论是 K-NN、SVM 等等......)。为了创建所谓的最近邻分类对象,您需要使用fitcknn() 函数。给定训练集和训练标签作为输入(按此顺序),这样的函数将 return 你的对象,你可以在 crossval().
中将其作为输入 不过只剩下一件事了:如何预测验证集的标签?为此,您需要使用 predict() 函数。给定模型(kNN 对象)和验证集作为输入(再次按此顺序),此类函数将 return(如 knnclassify())预测标签向量。