对于单标签数据,其 label 可能是用一个整数表示,想转化成 one-hot label。注意原 class IDs 可能是 0-base 的,要 +1 转成 1-base。
Code
N_CLASS = 10;
labels = [1 3 2 5 0 4]; % 0-base
% isvector(labels)
% isrow(labels)
% iscolumn(labels)
% isa(int32(labels), 'integer')
% class(labels)
L = onehot(int32(labels + 1), N_CLASS); % shift to 1-base
disp(L);
function L = onehot(vec, n_class)
% convert sparse class IDs to one-hot label vectors
% Input:
% vec: [1, n] row or [n, 1] column vector
% n_class: int, # of classes
% Output:
% L: [n, n_class] one-hot class label vectors
%----------------------------------------------
assert(isvector(vec), "`vec` must be a vector");
assert(isa(vec, 'integer'), "`vec` must be integers");
if isrow(vec)
vec = vec'; % -> column vector
end
I = eye(n_class);
L = I(vec, :);
end

该博客介绍了如何在MATLAB中将单标签数据的整数表示转换为one-hot编码。提供的代码示例展示了如何将0-based的classIDs加1转为1-based,并使用函数onehot进行编码,确保输入向量是行向量或列向量,并检查数据类型为整数。此外,还提供了一个辅助函数onehot用于实现这一过程。
1275

被折叠的 条评论
为什么被折叠?



