离散特征:
-
1.无序离散特征:one-hot encoding,比如所属国家、城市
- (1)无序离散特征:one-hot encoding,比如所属国家,城市。(1)如果one-hot之后unique值不多可以不用做Embedding, (2)但是如果该特征unique值过多,比如所属国家、城市,onehot产生的矩阵过宽,这种情况下,我们的通常做法就是将其转换为embedding。
- (2)也可以先做LabelEncoder将特征的不同取值区分开,然后再embedding
-
2.有序离散特征:label encoding,比如年龄 (类似分桶)
-
3.单值离散特征:做Embedding映射成1*K维向量,然后与其他特征拼接
-
4.多值离散特征:做Embedding映射成3K维,然后MeanPooling 成1K维,比如某人的爱好有3个这种特征。
总结:
- 特征用于FM一次项wi*xi:
- 原值:比如1、2、3等级
- Onehot:比如性别,省份,城市
- LabelEncoder:有序离散特征 年龄
- 特征用于FM二次项的隐向量
- OneHot --> Embedding
- LabelEncoder --> Embedding
连续特征:
- 1.归一化:去除不同维度数据的量纲以及量纲单位 服从均匀分布
- 2.标准化: 标准化成正态分布之后,可以更加容易地得出最优参数目标函数的最小值,从而达到加速收敛的效果。服从高斯分布,一般数据服从高斯分布,所以标准化用的比较多。
区别:两者都可以对特征做幅度缩放,两者的效果差不多,选择其中一个即可。
- 分桶:
- (1)连续特征可以通过分桶实现离散化成[0,1,2,3,…9]
- (2)大量离散特征比如 每个用户观看的视频数,也可以分桶
应用于FM一次项时:先通过标准化/分桶 --> 乘以权重系数wixi 再与其他特征拼接。 例如1个连续特征先通过Dense(1) (wixi)得到1个数,再与其他特征拼接。
应用于FM二次项时:先通过标准化/分桶 -->Embedding得到K个数,在通过RepeatVector 得到1K维向量,再与其他特征相乘。例如1个连续特征先通过Dense(1)(类似一个Embedding) 得到K个数,在通过RepeatVector 得到1K维向量,再与其他特征相乘。(Ref: DeepFM-keras 实现中FM二次项)
离散/连续特征 总结:
- 第一步:原值,标准化,OneHot,LabelEncoder,分桶
- 第二步:如果需要得到隐向量的话 就再做Embedding
正则化:
- 常见的有正则项有 L1 正则 和 L2 正则 以及 Dropout
更详细内容请参考:ML 入门:归一化、标准化和正则化