看到有些介绍,“特征分为categorical特征 和 continuous特征“不解,查资料得
单个原始特征(或称为变量)通常属于以下几类之一:
- 连续(continuous)特征;
- 无序类别(categorical)特征;
- 有序类别(ordinal)特征。
##连续特征 除了归一化(去中心,方差归一),不用做太多特殊处理,可以直接把连续特征扔到模型里使用。
##无序特征 可以使用One-hot(也叫One-of-k)的方法把每个无序特征转化为一个数值向量。比如一个无序特征color
有三种取值:red
,green
,blue
。那么可以用一个长度为3的向量来表示它,向量中的各个值分别对应于red
,green
,blue
。如:
color取值 | 向量表示 |
---|---|
red | (1, 0, 0) |
green | (0, 1, 0) |
blue | (0, 0, 1) |
status
有三种取值:
bad
,
normal
,
good
,显然
bad
<
normal
<
good
。
当然有些问题里有序可能会很重要,这时候就不应该把其中的顺序关系丢掉。一般的表达方式如下:
status取值 | 向量表示 |
---|---|
bad | (1, 0, 0) |
normal | (1, 1, 0) |
good | (1, 1, 1) |
上面这种表达方式很巧妙地利用递进表达了值之间的顺序关系。
——————————————————————
以线性分类器Linear Regression (LinearReg)为例,它是通过特征的线性加权来预测因变量 y y:
但大部分实际情况下,
y
y与
x
x都不会是这么简单的线性关系,甚至连单调关系都不会有。那么直接把
x
x扔进LinearReg模型是怎么也得不到好结果的。很多人会想着既然线性分类器搞不定,那就直接找个非线性的好了,比如高斯核的SVM。我们确实可以通过这种简单换算法的方式解决这个简单的问题。但对于很多实际问题(如广告点击率预测),往往特征非常多,这时候时间约束通常不允许我们使用很复杂的非线性分类器。这也是为什么算法发展这么多年,广告点击率预测最常用的方法还是Logistic Regression (LogisticReg)。
【上述问题的解决办法】——就是对原始特征 x x做转化,把原来的非线性关系转化为线性关系。
方法一:离散化
最常用的转化方式是对 x x做离散化(discretization),也就是把原来的值分段,转化成一个取值为0或1的向量。原始值落在某个段里,向量中此段对应的元素就为1,否则为0。
离散化的目标是 y y与转化后向量里的每个元素都保持比较好的线性关系。
比如取离散点{0.5,1.5,2.5},通过判断
x x属于 (−∞,0.5), [0.5,1.5),[1.5,2.5),[2.5,+∞)中哪段来把它离散化为4维的向量。下面是一些例子的离散结果:
原始值 x x | 离散化后的值 |
---|---|
0.1 | (1, 0, 0, 0) |
1.3 | (0, 1, 0, 0) |
3.2 | (0, 0, 0, 1) |
5.8 | (0, 0, 0, 1) |
离散化方法的关键是怎么确定分段中的离散点。下面是常用的选取离散点的方法:
【1】等距离离散:顾名思义,就是离散点选取等距点。我们上面对 x x取离散点{0.5,1.5,2.5}就是一种等距离散
【2】等样本点离散:选取的离散点保证落在每段里的样本点数量大致相同
【3】画图观察趋势:以 x x为横坐标, y y为纵坐标,画图,看曲线的趋势和拐点。通过观察下面的图我们发现可以利用3条直线(红色直线)来逐段近似原来的曲线。把离散点设为两条直线相交的各个点,我们就可以把 x x离散化为长度为3的向量
方法二:函数变换
函数变换直接把原来的特征通过非线性函数做变换,然后把原来的特征,以及变换后的特征一起加入模型进行训练。常用的变换函数见下表,不过其实你可以尝试任何函数。
常用非线性函数 f(x) f(x) | x x的取值范围 |
---|---|
xα xα; α∈(−∞,+∞) α∈(−∞,+∞) | (−∞,+∞) (−∞,+∞) |
log(x) log(x) | (0,+∞) (0,+∞) |
log(x1−x) log(x1−x) | (0,1) (0,1) |
这个方法操作起来很简单,但记得对新加入的特征做归一化。
方法三:决策树离散法
大白话说决策树模型就是一大堆的if else
。它天生就可以对连续特征分段,所以把它用于离散化连续特征合情合理。我称这种方法为决策树离散化方法。例如Gmail在对信件做重要性排序时就使用了决策树离散化方法2。
决策树离散化方法通常也是每次离散化一个连续特征,做法如下:
单独用此特征和目标值 y y训练一个决策树模型,然后把训练获得的模型内的特征分割点作为离散化的离散点。
这种方法当然也可以同时离散化多个连续特征,但是操作起来就更复杂了,实际用的不多。
方法四:核方法
核方法经常作为线性模型的一种推广出现。以线性回归模型为例,它对应的核方法如下:
其中 {xi}ni=1 {xi}i=1n为训练样本点, K(xi,xj) K(xi,xj)为核函数,比如常用的高斯核函数为:
如果我们把上面模型里的 {K(x,xi)}ni=1 {K(x,xi)}i=1n看成特征,而 θ θ看成模型参数的话,上面的模型仍旧是个线性模型。所以可以认为核方法只是特征函数变换的一种方式。
当然,如果把核函数 K(xi,xj) K(xi,xj)看成一种相似度的话,那上面的模型就是kNN模型了,或者叫做加权平均模型也可以。
参考博文:http://breezedeus.github.io/2014/11/15/breezedeus-feature-processing.html