How to create indices for the k-fold cross-validation?

10 visualizzazioni (ultimi 30 giorni)
Hi All,
I'd like to create indices for the k-fold cross-validation using
indices = crossvalind('Kfold',Labels,k);
The "Labels" is a 1-by-1000 cell array which contains 1000 cells, as follows
Labels(1: 10) = 1×10 cell array
Columns 1 through 9
{1×1 cell} {1×1 cell} {1×1 cell} {1×1 cell} {1×1 cell} {1×1 cell} {1×1 cell} {1×1 cell} {1×1 cell}
Column 10
{1×1 cell}
Labels{1}= 1×1 cell array
{'2'}
I got this error
Undefined function 'crossvalind' for input arguments of type 'cell'.
So, I took the following steps to solve the issue
Label_1 = cellfun(@(x) str2double(x), Labels, 'UniformOutput',false);
Label_double = [Label_1{:}]
indices = crossvalind('Kfold',Label_double,10);
And now I am dealing with the following error
Undefined function 'crossvalind' for input arguments of type 'char'.
I'm not sure why I get this error. any idea? Thanks!
  3 Commenti
Megumi Fukuda
Megumi Fukuda il 9 Giu 2021
Could you upload your label variable (you can upload .mat file) so that I can have a look? I assume your label is what-I-call 'nested' and that's why you cannot use crossvalind.
Susan
Susan il 9 Giu 2021
Modificato: Susan il 9 Giu 2021
@Megumi Fukuda Sure thing! The label is attached.Thank you so much in advance for your help.

Accedi per commentare.

Risposta accettata

Megumi Fukuda
Megumi Fukuda il 10 Giu 2021
indices = crossvalind('Kfold',Labels,k);
I am sure this does not work, as the cells in the variable Label are nested and cannot be used for crossvalind without converting the variables.
I have tested this code with MATLAB 2021a and this code looks fine. Would you like to try your code again?
% clear the workspace
load('Label.mat'); % the mat file you uploaded
Label_1 = cellfun(@(x) str2double(x), Giant_bpm, 'UniformOutput',false);
Label_double = [Label_1{:}];
indices = crossvalind('Kfold',Label_double,10);
(... and here is another implementation I came up with. This returns the label as char type)
load('Label.mat');
Giant_bpm_updated = cellfun(@cell2mat, Giant_bpm(:), 'UniformOutput', false);
indices = crossvalind('Kfold',Giant_bpm_updated,10);
Hope this helps!
  1 Commento
Susan
Susan il 10 Giu 2021
Thanks for your response.
Interesting! when I run my code I get the same error as before but your code works fine.

Accedi per commentare.

Più risposte (0)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by