特征工程

注:现阶段的理解,不一定正确,各位看官如有不同的见解,欢迎交流,Q:358892790

特征工程个人觉得是数据分析挖掘项目中最难也是最为关键的一步,特征工程的前期基本是基于对业务的了解,有点天马行空,目前还没看到归纳的方法论或执行框架。

第二步是探索性分析,也就是判断提取的特征对最终的目标预测有意义,这个可以看探索性分析章节。

第三步是特征的进一步处理,主要用到的技术:

1、one-hot

   将一个特征的值变为多个二值且互斥的特征,例如星期,取值可能会星期一~星期日,可以转换为7个特征

   1     2     3     4     5     6     7

   1     0     0     0     0     0     0     星期一

   0     0     0     1     0     0     0     星期四


2、离散化

   在值分布不均匀,即在不同区间的值针对预测目标的权重不一致时,其实对于什么时候应该离散化,目前还理解不够深入,获取结合具体项目会理解得更深一点。

 2.1 离散化的优点

    在工业界,很少直接将连续值作为逻辑回归模型的特征输入,而是将连续特征离散化为一系列0、1特征交给逻辑回归模型,这样做的优势有以下几点(https://www.zhihu.com/question/31989952/answer/54184582):

  0. 离散特征的增加和减少都很容易,易于模型的快速迭代;

  1. 稀疏向量内积乘法运算速度快,计算结果方便存储,容易扩展;

  2. 离散化后的特征对异常数据有很强的鲁棒性:比如一个特征是年龄>30是1,否则0。如果特征没有离散化,一个异常数据“年龄300岁”会给模型造成很大的干扰;

  3. 逻辑回归属于广义线性模型,表达能力受限;单变量离散化为N个后,每个变量有单独的权重,相当于为模型引入了非线性,能够提升模型表达能力,加大拟合;

  4. 离散化后可以进行特征交叉,由M+N个变量变为M*N个变量,进一步引入非线性,提升表达能力;

  5. 特征离散化后,模型会更稳定,比如如果对用户年龄离散化,20-30作为一个区间,不会因为一个用户年龄长了一岁就变成一个完全不同的人。当然处于区间相邻处的样本会刚好相反,所以怎么划分区间是门学问;

  6. 特征离散化以后,起到了简化了逻辑回归模型的作用,降低了模型过拟合的风险。

     可以从特征离散化后使模型的搜索空间变小了方面理解

 2.2 离散化的方法

  一种是等距离散化方式:假如特征值的范围是0-10000,如果按1000的间隔离散化就会将0-1000,1000-2000,2000-3000,...,分布映射为离散值1,2,3,...

  一种是等频离散化方式:假如有10000个样本,也就是说该特征有10000个取值,将其排序,第1到第1000个映射为一个值,1001到2000个映射为一个值...

  一般情况等频离散化的方式要优于等距的,因为等频的更贴近特征的概率分布,但等距的貌似更方面人为设计。


3、二值化

   将特征变换为只有1,0值的特征


4、特征交叉

   由于线性模型表达能力有限,非线性需要特征组合去引入,在做这步前,往往需要先二值化和one-hot


5、归一化


6、特征的过滤与修正

 5.1 过滤

  特征过滤比较好理解,按上面的处理可能会演变出上万维特征,可以使用特征选择的算法,或正则项L0,L1等

 5.2 修正

  ·基数较下情况下的概率修正(贝叶斯平滑)

   例如广告的点击率,正常情况下是用点击次数/展现次数,但如果展现次数只有1次,点击了一次,按这样计算点击率为100%,显然真实的广告点击率不可能是100%,5%都达不到,如何这个点击率是比较重要的特征,如何去估计他真实的概率呢?下面介绍下流程。(参考:https://www.zhihu.com/question/30269898,http://blog.csdn.net/mytestmy/article/details/19088519)

   主要是使用beta(a,b)分布来表示先验,而beta分布与二项分布(伯努利分布)是共轭分布,再知道当前点击情况下,调整beta分布,计算当前最有可能的点击率。相信看了两个参考链接大家就明白了。


7、去除共线性


   实际上是否做这些处理还要看后期使用的模型,李沐曾经说过:模型是使用离散特征还是连续特征,其实是一个“海量离散特征+简单模型” 同 “少量连续特征+复杂模型”的权衡。既可以离散化用线性模型,也可以用连续特征加深度学习。就看是喜欢折腾特征还是折腾模型了。通常来说,前者容易,而且可以n个人一起并行做,有成功经验;后者目前看很赞,能走多远还须拭目以待。(链接:https://www.zhihu.com/question/31989952/answer/54184582)也就是说复杂模型自身具有高层次特征表示的功能,可以在训练过程中潜在的完成以上的过程,为什么不直接用复杂模型,一种解释是计算成本比较高,没这么多设备跑,另一方面可解释性差了点。

 


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值