特征工程
归一化
归一化就是将数据经过某种算法限制在一定范围内,一是为了处理数据的方便,二也可以保证程序运行时收敛速度加快(比如梯度下降算法),精度加高,本质上似乎为了使得各个特征维度对目标函数的影响权重是一致的
标准化
和归一化看上去十分地类似,不过其实和归一化也没有必要区分地特别清楚,标准化是对特征维度大小的伸缩,使得特征之间具备可比性,其实没有必要和归一化划分地过于清晰
特征离散化
一些特征是分类的特征,这部分特征我们要进行离散化处理,这种我们比较好理解。对于另外一些特征,虽然是数值型的,但是这些特征的取值相加减是没有实际意义的,那么该数值新特征也要看成离散特征,采用离散化的技术:比如年龄20岁和年龄30岁往往对一个广告的兴趣差距不会那么大,这种时候我们也要进行特征离散化。
特征交叉
交叉从理论上而言是为了引入特征之间的交互,即为了引入非线性,这也便是特征交叉的意义。知乎上有一个最简单的例子,性别和年龄,可以组成性别_年龄的一个新特征,即可以得到新的特征属性,然后再对这个特征做one-hot编码,即可以得到新的特征属性值。
不同特征类型的不同处理方式
- 连续特征,除了归一化(去中心,方差归一),不用做太多特殊处理,可以直接把连续特征扔到模型里使用。
- 无序特征,可以使用one-hot的方法把每个无序特征转化为一个数据向量。实际上这种方法在NLP中用的很多,就是所谓的词向量模型。变换后的向量长度对于词典长度,每个词对应于向量中的一个元素。
- 无序特征,有些特征虽然也像无序特征那样只取限定的几个值,但是这些值之间有顺序的含义,比如状态有三种取值,bad、normal、good,显然我们有关系bad< normal< good。这时最简单的处理方式就是忽略其中的顺序关系,把它看做是无序的,这样我们就可以使用处理无序特征的方式来处理它,这样的处理方式也使用得很多,而又写问题里面有序可能会很重要,这个时候就不应该把其中的顺序关系丢掉,这个时候可能我们就不会简单的使用one-hot,而是简单地改一下,