特征工程——categorical特征 和 continuous特征

    xiaoxiao2021-12-14  20

    看到有些介绍,“特征分为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=wTx

    但大部分实际情况下, 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α α(,+) α∈(−∞,+∞) (,+) (−∞,+∞) log(x) log⁡(x) (0,+) (0,+∞) log(x1x) log⁡(x1−x) (0,1) (0,1)

    这个方法操作起来很简单,但记得对新加入的特征做归一化。

    方法三:决策树离散法

    大白话说决策树模型就是一大堆的if else。它天生就可以对连续特征分段,所以把它用于离散化连续特征合情合理。我称这种方法为决策树离散化方法。例如Gmail在对信件做重要性排序时就使用了决策树离散化方法2

    决策树离散化方法通常也是每次离散化一个连续特征,做法如下:

    单独用此特征和目标值 y y训练一个决策树模型,然后把训练获得的模型内的特征分割点作为离散化的离散点。

    这种方法当然也可以同时离散化多个连续特征,但是操作起来就更复杂了,实际用的不多。

    方法四:核方法

    核方法经常作为线性模型的一种推广出现。以线性回归模型为例,它对应的核方法如下:

    fθ(x)=i=1nθiK(x,xi)   fθ(x)=∑i=1nθiK(x,xi)  ,

    其中 {xi}ni=1 {xi}i=1n为训练样本点, K(xi,xj) K(xi,xj)为核函数,比如常用的高斯核函数为:

    K(xi,xj)=exp(xixj222h2)   K(xi,xj)=exp⁡(−‖xi−xj‖222h2)  。

    如果我们把上面模型里的 {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

    转载请注明原文地址: https://ju.6miu.com/read-967985.html

    最新回复(0)