我正在为多类分类器(m个数据点,k个类)构建输入结构。在我的输入中,我将训练数据的标签作为向量y中的整数(即y是m维的,并且y中的每个条目都是1到k之间的整数)。
我想将其转换为m x k矩阵。每行在对应于该数据点标签的索引处具有1,否则具有0(例如,如果数据点具有标签3,则该行看起来像[0 0 1 0 0 0 0 ...])。
我可以通过构造向量a = [1 2 3 4 ... k]然后计算
M_ = y*(1./b)
M = M_ .== 1
(其中./
元素级除法和.==
元素级逻辑等于)。这是通过将中间矩阵中不完全为1到0的所有内容设置来实现的。
但是,这种解决方案似乎很愚蠢和round回。我想念的还有更直接的方法吗?
给定标签向量(y
例如)[1 2 2 1 3 2 3 1]
和许多类(k
例如)3
,您可以将其转换为标签矩阵Y
,如下所示。
function Y = labelmatrix(y, k)
m = length(y);
Y = repmat(y(:),1,k) .== repmat(1:k,m,1);
这个想法是执行以下扩展:
1 1 1 1 2 3
2 2 2 1 2 3
2 2 2 1 2 3
1 1 1 .== 1 2 3
3 3 3 1 2 3
2 2 2 1 2 3
3 3 3 1 2 3
1 1 1 1 2 3
这样产生:
1 0 0
0 1 0
0 1 0
1 0 0
0 0 1
0 1 0
0 0 1
1 0 0
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句