多分类任务

  • 多分类神经网络

多分类神经网络

如果我们要训练一个神经网络算法来识别路人、汽车、摩托车和卡车,在输出层我们应该有 4 个值。例如,第一个值为 1 或 0 用于预测是否是行人,第二个值用于判断是否为汽车。 输入向量 x 有三个维度,两个中间层,输出层 4 个神经元分别用来表示 4 类,也就是每一个数据在输出层都会出现$[a,b,c,d]^T$ ,且 a,b,c,d 中仅有一个为 1,表示当前类。下面是该神经网络的可能结构示例:

训练集的形式如下,注意使用one-hot方式表示y:

补充说明

分类问题的Label(即y)编码问题:

one-hot的基本思想:将离散型特征的每一种取值都看成一种状态,若你的这一特征中有N个不相同的取值,那么我们就可以将该特征抽象成N种不同的状态,one-hot编码保证了每一个取值只会使得一种状态处于“激活态”,也就是说这N种状态中只有一个状态位值为1,其他状态位都是0。

如果分类问题有四个结果,
我们不会将y的取值为:0,1,2,3 而是会将y表示为一个1*4的向量,如上图。

牛刀小试

实现one-hot编码函数

import numpy as np
import tqdm
def onehot(x):
    unique_values = list(set(x))
    number_of_dimension = len(unique_values)
    onehot_features = np.zeros(shape=(len(x), number_of_dimension))
    for row in tqdm.tqdm(range(len(x))):
        onehot_features[row, unique_values.index(x[row])] = 1
    return onehot_features

y = np.array([1, 2, 3, 4, 5, 1, 2])
onehot(y)
array([[1., 0., 0., 0., 0.],
       [0., 1., 0., 0., 0.],
       [0., 0., 1., 0., 0.],
       [0., 0., 0., 1., 0.],
       [0., 0., 0., 0., 1.],
       [1., 0., 0., 0., 0.],
       [0., 1., 0., 0., 0.]])