为什么进行one-hot编码
- 对于一些离散的数据如词进行特征处理的时候完全可以使用对特征值进行数字化如:1==>我 2==>你 … 最后对一句话就可以表示为 1 2 10 11 …
带来的问题:
转换之后的值为默认的连续值,这样的值训练模型得不到最好的效果
其次如1 - 1000 那么在回归计算里面1000对于1的权重更加大。 - 在计算的时候使用矩阵的计算方法。
- 使用np进行one-hot编码
import numpy as np if __name__ == '__main__': labels = [1, 3, 4, 8, 7, 5, 2, 9, 0, 8, 7] one_hot_index=np.arange(len(labels))*10+labels one_hot = np.zeros((len(labels), 10)) # 外围多少个 里面多少个 one_hot.flat[one_hot_index] = 1 print(one_hot)
- 嵌入层 Embedding
在使用深度学习训练模式的时候,对于one-hot的数据可以进行减低维度处理,使用
vocab_size:由你的one-hot 编码的列数决定 ,后面的16由你自己决定输出减低维数的多大!model.add(k.layers.Embedding(vocab_size, 16))
- 引用