独热编码 (One-Hot Encoding) 介绍及MATLAB实现
1 独热编码 (One-Hot Encoding)介绍
- 独热编码又叫一位有效 (One-Hot) 编码,是机器学习中常用的一种标签编码方式。对于M个样本的N种状态,通过建立 N × M N \times M N×M维度的寄存器数组来实现编码,并且每个编码向量只有一位有效。
示例:
% 状态
>> [1 2 2 1]
% 编码
>> 1 0 0 1
0 1 1 0
- 编码数组的每个列向量只有若干0和一个1,1表示有效位。
例如风险评级,[‘低’, ‘较低’, ‘一般’, ‘较高’, ‘高’],需要将该文本类型量化,最简单的方法是用序号[1 2 3 4 5]表示,但这样的处理结果不能直接放到BP神经网络中,如下所示:
% % % 输入向量
P = [0.1 0.85 0.65 0.12;
0.05 0.24 0.25 0.03];
% 输出向量
T = [1 2 2 1];
% % % newff函数构建BP,隐含层节点为10
net = newff([0 1;0 1], [10 1]);
% 用排序方式的数据,训练网络
net = train(net, P, T);
% 仿真输入
Y = sim(net, P)
运行结果:
>> 0.99998 2 1 0.99995
得到的结果中,会有连续型数字,从而使得无法辨别风险等级。
2. MATLAB命令
当含有大量的等级数据时, 如果手动编码,会比较繁琐,MATLAB中提供的ind2vec()函数可实现对状态数组的编码.
示例:
% 输入编码命令
>> ind2vec([1 2 2 1])
% 编码结果
>> ans =
(1,1) 1
(2,2) 1
(2,3) 1
(1,4) 1
该结果为稀疏数组形式,通过full()函数,可显示完整的编码内容:
>> full(ind2vec([1 2 2 1]))
>> ans =
1 0 0 1
0 1 1 0