机器学习——特征工程篇

参考:七月在线ML第九期-特征工程

目录

1.数据清洗

2.采样

2.特征工程

数值型:

(1) 幅度缩放(最大最小值缩放,归一化。。。)

(2)离散化/分箱分桶(等距pd.cut ,等频pd.qcut)(非线性,加速,特征交叉,健壮性)

(3)统计值:(max,min ,quantile,均值,中位数,众数,分位数)

(4)四则运算:(加减乘除)

(5)幅度变化:(有一些模型对于输入数据有分布假设,LR假设输入连续值特征符合正态分布,log1p/exp)

(6)监督学习分布(用决策树建模,用决策树学习连续值划分方式,把决策树中间节点取出来作为组合特征)

类别型

(1)label encoding

(2)Onehot encoding(哑变量)

 

(3)哈希技巧

(4)Histogram映射 

 

时间型

文本型

统计型

组合特征

3.特征选择




 

我们为什么要做特征工程?

给我们一些数据,我们首先要了解这部分数据,然后对数据进行学习,得到我们想要的结果。

但是,给我们的数据适合我们学习吗,是不是所有的数据都要用?特征工程就是对数据进行一些处理,提取有效信息,使数据符合模型的输入要求,得到更好的结果。其实我们大部分时间都花在特征工程上面,一个好的特征工程,也许并不需要特别复杂的模型,就能得到很好的效果。

原材料 +  机器 = 产品

一个好的产品需要好的原材料和机器,特征工程类似于原材料的加工过程,机器类似于我们的算法模型。

1.数据清洗

在进行特征工程之前,先对数据进行清洗:

  • 分析数据的分布模式--发现异常值(噪声)(一般用箱线图boxplit; 分位法quantile)
  • pandas的一些工具库:数据类型(时间型读成字符串),数字形态的类别型(userid,没有大小关系),数据类型优化
  • 缺失值(数值型/类别型,确实比例)
  • 时间序列:趋势分析
  • 单维度(连续值distplot,类别型countplot/valueplot),关联维度(corr,heatmap):单维度中可能有一些值跟大部分值不一样,一般用箱线图把99%分位数以外的值删除,(掐头去尾留中间)
  • 业务数据中做建模:最有效的特征通常是统计特征(怎样做统计,有哪些类别型的列可以作为groupby的对象,有哪些数值型的列可以用于统计聚合),特别留意置信度(总数很小的时候,统计值不稳定,统计型特征稳定度高于绝对值)

2.采样

为什么需要采样?

对于一些分类问题,有时候数据中正负样本是不均衡的,而有些模型对于正负样本比较敏感,(比如说逻辑回归,正样本多于负样本,那么正样本的概率就大于负样本概率,决策边界可能会拉向正样本)

常见的采样方法:随机采样 分层采样

怎样解决正负样本不均衡的问题?

  • 正样本大于负样本,并且量都很大:下采样/欠采样(假如说正负样本10:1,正样本取十分之一)
  • 正样本大于负样本,但是量比较小:采集更多数据   过采样(比如图像数据,旋转一下就是新的数据) 修改损失函数的所占权重

2.特征工程

数值型,类别型,时间型,文本型,统计型,组合特征型

  • 数值型:

(1) 幅度缩放(最大最小值缩放,归一化。。。)

为什么需要幅度缩放?

假如说一个用逻辑回归训练模型,但是每个样本不同属性下的数值范围差异很大(年龄:1-60  薪资:5000-10000)这样的话根据逻辑回归,不同的属性下要配备不同的权重,可能薪资的权重就很大,这样符合实际吗?不一定吧。有可能年龄对最终的结果影响更大。所以我们要把这些属性的值都划归到一个数量级,有利于权重的划分。

上图为例:具有两个特征的逻辑回归梯度下降,如果不进行归一化,量纲不一样,就会形成左图瘦长圆,梯度下降时,沿着等高线垂直下降,就会形成之字形,走很多弯路,浪费时间。右图是归一化之后,训练较快,加快梯度下降求最优解的速度。

常见的缩放方式(离散标准化):(实际值-min)/(max-min)           前提是单维数据符合正态分布,数值比较集中

适用场景:(1)概率模型不需要归一化,因为概率模型不关心变量的的取值,而是关心变量的分布和变量之间的条件概率

                  (2)SVM,线性回归类的最优化问题需要归一化,是否归一化取决于是否关心变量的取值

                  (3)神经网络模型需要标准化,是为了弱化某些变量的值较大对结果产生影响

                  (4)在K近邻算法中,如果不对解释变量进行标准化,那么具有小数量级的解释变量的影响就会微乎其微

(2)离散化/分箱分桶(等距pd.cut ,等频pd.qcut)(非线性,加速,特征交叉,健壮性)

为什么需要离散化?连续值不好吗?

对于一些连续值来说,它们每部分的重要程度是不一样的,不能够等同看待,这就需要把连续值离散化。比如说,年龄3-66岁的连续值,要给老人孩子让座,我们该怎么让座,10岁以下的让座,11-60岁的不需要,60岁以上的需要让座,假如使用逻辑回归模型,那么10岁以下不需要让座,60以上需要让座,不符合常理,所以离散化,10岁以下的一个特征,11-60岁的不需要,60岁以上的一个特征,这样才符合实际。

树模型:不需要离散化,树模型可以产生区间和规则。

神经网络:需要离散化。

常见的离散化方式有:(1)等距切分       只考虑边界,最大与最小之间按照一定的比例切成几段,比如0-100岁,等距切分:0-10 11-20                                                21-30. ...

                                      (2)等频切分:不考虑边界,每段区间中的样本点数量相同      比如比如0-100岁,等频切分:每50人分一组

缺点:落在正确区间的偶然性比较大

(3)统计值:(max,min ,quantile,均值,中位数,众数,分位数)


(4)四则运算:(加减乘除)

(5)幅度变化:(有一些模型对于输入数据有分布假设,LR假设输入连续值特征符合正态分布,log1p/exp)

(6)监督学习分布(用决策树建模,用决策树学习连续值划分方式,把决策树中间节点取出来作为组合特征)

  • 类别型

(1)label encoding

        比方说,红黄蓝绿,计算机是读不懂的,所以给他们编码(label encoding)为1,2,3,4,这样计算机就能知道了,

(2)Onehot encoding(哑变量)

     但是颜色应该相等的,不应该有大小区别,这就有了one-hot 编码。

 绿
1000
0100
绿0010
0001

 

(3)哈希技巧

(4)Histogram映射 

 

  • 时间型

  1. 时间点/时间段(星期几,几点钟)
  2. 时间分组/时间分段(工作日,周末,法定节假日)
  3. 时间间隔(距离当前为止。。。)
  4. 和数值型一起做统计特征的时候,会会选取不同的时间窗
  5. 组合
  • 文本型

(1)词袋模型

(2)tf-idf

(3)lda(主题模型)

(4)word2vec/word embedding(是一个稠密向量)

  • 统计型

加减平均,分位线,次序,比例

  • 组合特征

简单的特征组合:根据实际情况,自己拼接

模型特征组合:用GBDT产生组合路径,组合特征和原始特征一起放进LR训练

3.特征选择

原因:

  • 冗余:部分特征相关性太高,消耗计算性能
  • 噪声:部分特征对预测结果有负影响

方式:

  • 过滤型(filter)

  • 包裹型(wrapper)

  • 嵌入型基于树模型判断特征的重要度

参考:七月在线课程

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值