Predict function in KNN
1 view (last 30 days)
Show older comments
Alberto Azzari
on 19 Apr 2020
Answered: Thiago Henrique Gomes Lobato
on 19 Apr 2020
Hi, I'm trying to implement a Leave One Out using knn. This is the code. I'm reporting the error. Thanks
for i=1:loo_cycles
full_index = 1:rows_X;
index_train = full_index(full_index~=i);
x_set = X(i, :);
x_train = X(index_train, :);
y_train = y(index_train, 1);
fprintf("Running loo step %d of %d\n",i, loo_cycles);
cvp = cvpartition(y_train, 'KFold');
KNN = fitcknn(x_train, y_train,'CVPartition', cvp);
y_pred_test(i, 1) = predict(KNN, x_set);
end
Error:
Check for missing argument or incorrect argument data type in call to function 'predict'.
Error in test_knn (line 40)
y_pred_test(i, 1) = predict(KNN, x_set);
0 Comments
Accepted Answer
Thiago Henrique Gomes Lobato
on 19 Apr 2020
Your KNN is not a single model to make predictions but rather a RegressionPartitionedModel. Which means it has all the statistics of the cross validation and all individual models for each fold. If you want to make predictions you will have to select one of the trained models, as example:
y_pred_test(i, 1) = predict(KNN.Trained{1}, x_set);
I don't really understand why you would need this internal cross-validation since you're already looping to each data point. For me it would make more sense to simply train the model in all training data for each iteration:
KNN = fitcknn(x_train, y_train);
y_pred_test(i, 1) = predict(KNN, x_set);
Then you have only one model and can use the predict function.
0 Comments
More Answers (0)
See Also
Categories
Find more on Classification in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!