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

5 ビュー (過去 30 日間)
Susan
Susan 2021 年 6 月 8 日
コメント済み: Susan 2021 年 6 月 10 日
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 件のコメント
Megumi Fukuda
Megumi Fukuda 2021 年 6 月 9 日
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 2021 年 6 月 9 日
編集済み: Susan 2021 年 6 月 9 日
@Megumi Fukuda Sure thing! The label is attached.Thank you so much in advance for your help.

サインインしてコメントする。

採用された回答

Megumi Fukuda
Megumi Fukuda 2021 年 6 月 10 日
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 件のコメント
Susan
Susan 2021 年 6 月 10 日
Thanks for your response.
Interesting! when I run my code I get the same error as before but your code works fine.

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeJust for fun についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by