数据采样与特征工程(数值型特征 类别型特征 时间型特征 文本型特征)介绍

论坛 期权论坛 脚本     
匿名技术用户   2020-12-23 05:08   16   0

特征工程

一:特征工程介绍

俗话说,“巧妇难为无米之炊”。在机器学习中,数据和特征便是“米”,模型和算法便是“巧妇”。没有充足的数据、合适的特征,再强大的模型也是没有任何作用的。对于一个机器学习问题,数据和特征往往决定了结果的上限,而模型,算法只是逐步接近这个上限。

所谓特征工程,就是对最原始的数据(数字,文本,图像等)进行一系列的处理,将其提炼为特征,作为输入供算法和模型使用。

二:数据清洗

数据清洗能够去除脏数据,在这个过程中,会让你对业务的理解更加深刻。这是非常重要的一步,就好比练习题里边如果有错题,那么模型的学习效果肯定是不好的。脏数据也就是异常数据,比如说:

  • 某人身高3米多
  • 某地气温100度以上
  • 其它……

这类数据一般可以通过箱线图来发现。

三:数据采样

在分类问题中,很多情况下,正负样本数量是不均衡的。比如:

  • 唯品会用户中的男女比例
  • 某种疾病的患病人数与不患病人数
  • ……

而大部分分类模型对正负样本比例都是敏感的。这种时候就需要对数据进行采样处理。

  • 如果正负样本的数量都很大,但是正样本数量远远大于负样本数量(反之亦然),那么就需要进行下采样,取一部分正样本,使得正负样本数量相当。
  • 如果正负样本的数量都不大,但是正样本数量远远大于负样本数量(反之亦然),那么就需要进行过采样(有过拟合的风险),或者想办法采集更多的数据(数据的作用是非常明显的)。

一般来讲,一定要注意分层采样,**保证采样后的数据分布和原始数据分布一致,**尽量避免直接随机采样。

四:数值型特征

数值型特征的常见处理方法:

  • 归一化
  • 统计值
  • 离散化(分箱/分桶)
  • log变化
  • 高次与四则运算特征

4.1 归一化

1. 为什么需要对数值型特征做特征归一化?

  1. 特征归一化能够消除不同特征之间量纲的影响,将所有特征都统一到一个大致相同的数值区间内。这样就使得不同特征之间具有可比性。
  2. 当通过梯度下降法进行模型求解时,可以降低迭代次数,更快的收敛到最小值。
  3. 树模型并不需要归一化。

2. 最常用的特征归一化的方法有什么?

  1. 线性函数归一化(Min-Max Scaling)。对原始数据进行线性变化,将特征规约到[0,1]之间。公式如下:
    Xnorm=XXminXmaxXmin X_{norm}=\frac{X-X_{min}}{X_{max}-X_{min}}

  2. 零均值归一化(Z-Score Normalization)。讲原始数据映射到均值为0,标准差为1的分布上。假设原始特征数据的均值为μ\mu,标准差为σ\sigma,则归一化公式为:
    z=xμσ z=\frac{x-\mu}{\sigma}

1.png

4.2 统计值

可以计算出特征的均值,最大值,最小值等,利用这些信息构造出新的特征。比如,要想判断某人是否购买某一部手机,可以计算出他以往购买的手机的价格最大值(或均值),然后与现在这部手机的价格进行比较,得到一个新的特征。

4.3 离散化

什么是离散化?

离散化是指将一个数值型的特征分成多个小的区间。然后将每个区间作为一个特征(one-hot)进行表示。

为什么进行离散化?

离散化可以将一个线性的问题表示为非线性的问题。可以举个例子:

在公交车上,上来一个人,你到底让不让座?分析这个问题,有一个特征是年龄(age),当年龄较小或年龄较大时,比如说小于7岁或者大于60岁,你会选择让座。假设我们使用逻辑回归模型来进行预测,那么如果年龄前面的系数是正数,模型会偏爱年龄大的人,就是说年龄越大,让座的可能性越大。反之,当系数为负数时,模型会认为年龄越小,让座的可能性越大。显然这种处理方法是不对的。在这种情况下,我们可以采用离散化的方法来对年龄特征进行处理。

将年龄特征分成多组,比如说“1-7岁”,“8-15岁”……“70岁以上”等,然后将每一个组作为一个特征。经过这样操作之后,每一个人的年龄都可以表示为一个向量。比如6岁的人,表示为[1,0,0,0,0],75岁的人表示为[0,0,0,1],然后,可以将“1-7岁”前的系数设置为负数,表示年龄越小越应该让座。“70岁以上”前的系数设置为正数,表示年龄越大越应该让座。

等距划分和等频划分怎么理解?

等距划分:找出该特征的最大值和最小值,然后平均分成n份。这种方法潜在的问题在于:如果数据在某个区间内很集中,那么会导致划分的结果中存在某个区间中样本数量很多,而某些区间中样本数量很少的情况。比如说,一件衣服的价格在50-1000元之间,但是大部分衣服的价格在100-300之间,这时候如果进行等距划分,就会造成不同区间中样本数量不一致的情形。

等频划分:将某个特征的数据按照从小到大的顺序排列好,假如要分成4份,那么从小到大,总数的25%组成第一份,总数的25%-50%组成第二份,总数的50%-75%组成第三份,剩下的组成第四份。这样可以保证每个划分区间内样本的数量基本一致。但是容易造成数值相近的样本被分到不同区间的情况。

4.4 log变换

在进行线性回归时,前提假设是预测变量服从正态分布,但是实际中的数据往往不是这样子的,因此,我们需要对预测变量进行log变换,将其变为正态分布。

4.5 高次与四则运算

高次:这个很好理解,比如:将xx变为x2,x3,x4x^2,x^3,x^4

四则运算:比如说:计算两个日期的间隔。预测一个人在网上是否买化妆品,可以将“上一次购买时间与现在时间的差值”作为一个特征来进行预测,时间越长,可能购买的概率越高。

五:类别型特征

首先需要说明的是,除决策树等少数模型能直接处理字符串形式的输入,对于逻辑回归,SVM等模型,类别型特征必须要转换为数值型才能使用。

1. 在对数据进行预处理时,应该怎么处理类别型特征?

  1. 序号编码。**序号编码通常用来处理类别间具有大小关系的数据。**例如,成绩分为‘高,中,低’三档,将其转换为序号后,序号编码会依据大小关系对类别型特征赋予一个数值ID。例如高表示为3,中表示为2,低表示为1。转换后依然保留了大小关系。

  2. 独热向量编码。当类别间不存在大小关系时,可以采用独热向量编码。比如特征“颜色”有“红,黄,蓝”三种,转换为独热向量之后,红表示为(1,0,0),黄表示为(0,1,0),蓝表示为(0,0,1)。经过这样的变换之后,不同类别之间具有同等的地位。但是,如果采用序号编码,将三种颜色表示为1,2,3的话,就会有问题。因此这种编码方式默认了蓝色比其它颜色的数值要大,这是不合理的,这三种颜色应该是平等的。对于类别特别多的特征,在使用独热向量编码时,需注意如下问题:

    ① 使用稀疏向量存储来节省空间。(因为特征向量只有某一维度取1,其余维度均为0)

    ② 使用独热向量编码,能够显著的增加特征空间的维度,容易带来过拟合问题。可以配合降维方法来进行特征选择。(一般来讲只有部分特征对分类,预测结果是有帮助的)

  3. 二进制编码。二进制编码分为两步。首先进行序号编码。给每个类别一个ID,然后再将该ID转换为二进制。这种做法的本质在于利用二进制对ID进行映射,最终也得到0/1向量,但是维度显著小于独热向量编码,节省了存储空间。

六:时间型特征

时间型特征既可以看作连续值也可以看作是离散值。

连续值

  • 持续了多长时间
  • 间隔了多长时间
  • ……

离散值

  • 一周中的第几天
  • 一年中的第几周,第几个月,第几天
  • 是否是节假日
  • ……

七:文本型特征

词袋模型(bag of words)与N-Gram模型

**词袋模型:**忽略词的顺序,将每篇文章表示为一个长向量,元素的值代表着某个单词的权重。通常使用TF-IDF来计算权重。
TFIDFt,d)=TF(t,d)×IDF(t) TFIDF(t,d)=TF(t,d) \times IDF(t)

  • TF代表单词t在文档d中出现的频率。

  • IDF=log(单词t在所有文档中出现频率的倒数),公式如下,分母加1是为了防止分母为0。

    IDF(t)=logt+1 IDF(t)=log \frac{文档总数}{包含单词t的文档的数量+1}

  • TF-IDF代表的是一个单词对一个文档集或者语料库中的一个文档的重要程度。

  • 对TF-IDF的个人理解:如果某个单词在某个文档中出现的频率很高,但是在所有其它文档中出现的频率很低,那么就可以认为该词具有很高的区分度,因此为该词设置更高的权重。

**N-Gram模型:**在词袋模型的基础上,将N个相连的单词进行组合构成一个新的元素,并赋予相应的权重。这种方法就考虑到了词和词之间的顺序,是一种经常被采用的方法。

八:参考资料

  • 《百面机器学习》
  • 网易云课堂《机器学习工程师微专业》
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:7942463
帖子:1588486
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP