MATLAB crossvalind函数在单元格数组

时间:2017-06-19 13:24:57

标签: arrays matlab cross-validation cell-array

我正在尝试构建基于离散序列的HMM模型。 意思是我有一个单元格数组,每个单元格包含一个不同长度的序列。

例如:

seqs{1} = 2     3     6     4     7     1     5    13    14    15    16     0     0     0     0    12    
seqs{2} = 2     3     6     4     7     1     5    19    10    11    13  
seqs{3} = 2     3     6     4     7     1     5    19    10  
seqs{4} = 2     3     6     4     7     1     5    19    10    12  

现在,我想使用matlab crossvalind函数进行K折交叉验证。

当我尝试运行indices = crossvalind('Kfold',seqs,2);时出现以下错误:

  

使用grp2idx时出错(第106行)   分组变量必须是分类,数字,逻辑,日期时间或>持续时间向量,字符串的单元格向量或2D   字符数组。

我需要每个细胞(细胞含有序列)属于k组(k-折叠)的组。

例如(k = 2倍):

seqs{1}  - Group 1  
seqs{2}  - Group 2  
seqs{3}  - Group 2  
seqs{4}  - Group 1   

当我使用矩阵时,不会出现此错误,但由于我必须使用单元格数组,因此矩阵不是一个选项。

如何在单元阵列上进行交叉验证?

1 个答案:

答案 0 :(得分:1)

为什么不直接使用seqs的大小来生成索引

indices = crossvalind('Kfold',numel(seqs),2);