embedding categorical features word2vector
NN类算法中,常需要对类别型变量进行embedding。
embedding就是一种编码方式,就好像one-hot encoding一样,但是one hot encoding会造成维度急剧增加,且数据集很稀疏。
embedding最后也可能会输出多个维度,但会比one-hot少很多。
embedding来自于word2vector模型,把一个word转化成词向量,一个词典50000个词,那么一个词可以转换成50000维的向量,类似于00000100...0000,然后要训练一个三层神经网络(输入层-隐层-输出层),这个隐层就是我们转换成的词向量,根据神经网络训练方式,又有两种主流的模型,一种是skip-gram跳字模型,另一种是CBOW(continuous bag of words)连续词袋模型。
skip-gram模型
skip-gram模型已知一个word,看它的上下文的word,比如左边2个词和右边2个词,如下图
以此类推就得到全部的training samples,输入是50000 one-hot的向量,输出是临近词的one-hot变量,假设embedding维度300,那么网络结构如图:
CBOW和skip-gram类似,就是反转输入和输出,已知临近的词预测中间的词。具体到categorical feature,nunique = 30,那首先可以one-hot编码,那这个时候embedding的时候是以什么作为预测目标呢?
对于categorical feature,还要简单一些,其实就是在input的时候增加一个embedding层,分类变量先转成one-hot编码,然后接一个embedding层,每个categorical variable的embedding层和其它连续变量concat在一起作为输入,embedding的相关权重也是后向转播学习的,就是用真正问题的y来进行的训练
以上就是NN中的categorical embedding,还有一种应用是类似于WOE,先用部分样本训练embedding,embedding的输出作为其它算法如lgbm的变量,embedding成5维,就是5个变量,相同的样本下就类似于WOE了,存在leakage的风险
留言
張貼留言