[机器学习工程总结] 特征工程

数据清洗

参考:2017年,你还在用用户画像和协同过滤做推荐系统吗?
参考:美团推荐算法实践:机器学习重排序模型成亮点

  • 把日志数据处理成格式化数据
  • 清除噪声

清除作弊、刷单、代购等噪声数据。这些数据的存在会严重影响算法的效果,因此要在第一步的数据清洗中就将这些数据剔除。

  • 修复数据
    用于训练和预测的样本数据,有可能口径是不一致的,如果不加以修复,可能会会导致线下效果很好,在线预测gg的惨剧。

数据首先要注意的就是,用于训练和预测的是两条数据流,这两条数据流是不是一致的,因为只要是人开发的系统,即使你自己重新写两遍,因为上下游依赖的种种东西,它就可能不一致,就可能出毛病。这是最重要的,一致性的问题是最重要的。另外你用于训练的数据,是否符合他要预测的场景的那个时空状态下采集到的状态情况?我们见过一些客户自己做推荐系统,用了错误的方法,采集了错误的数据,尽管线下训练效果很好,线上实施的结果却远远低于预期。这是最大的风险之一。

组合特征

参考:2017年,你还在用用户画像和协同过滤做推荐系统吗?
参考:美团推荐算法实践:机器学习重排序模型成亮点

  • 作用:
    如果有两个特征,它们都不是强特征,对预测没有很大的帮助。例如对于分类问题,单靠这两个单独的特征不能准确分类,使用这两个特征的分类跟抛硬币猜一样差。如果把这两个特征组合起来,得到第三个特征,这就可能是个强特征,对此样本的描述能力很强,对预测帮助非常大。例如:

比如说有两个特征,一个是性别,另一个是新闻的色情等级。我们可能会注意到,男同志比较喜欢火爆的新闻,女同志可能正好相反。我把色情等级作为一个特征,可能两边的喜好不同导致最终这个特征整体对点击率的影响和一个随机数一样,它就不是好的特征,没有预测能力。
但如果我把这些特征组合起来,我就对这些空间有更细致的分割能力,我就会做出很好的效果。性别、用户 ID 和新闻色情等级组合起来,是新闻推荐非常有用的特征。

连续值分段离散化
  • 作用1:为了适应某些模型的输入类型要求
    有些模型只能输入离散值,例如朴素贝叶斯、c4.5、ID3
  • 作用2:加入对业务逻辑的理解
    对某些连续特征,如果能加入对此字段的业务理解,可以提高特征的作用,提高预测效果。
    例如对时间这个特征,可以分段为工作时段、睡眠时段、休闲时段,对于购物转化率预测一定有帮助,因为大多数购物都发生在休闲时段。
  • 作用3:把非线性的连续特征分段线性化
    某些特征与预测量虽然整体不是线性关系,但是有分段线性关系。这样的特征如果分段恰当的话,可以提高预测效果。例如:

就是如果年龄是一个你可以取到的特征,那么我们这个模型就应该能描述年龄对于点击率的影响。如果你直接把年龄作为特征,那么对于线性模型来说只能够学习到线性的关系。所以你会把年龄分段,就是你认为年龄 =18 岁有 w1 的影响,年龄 =19 岁有 w2 的影响,以此类推。而分段怎么分,会决定你的这个特征是否能够有很好的预测能力。

  • 作用4:去掉噪声,模型会更稳定
    如果一个连续特征值多1和少1的意义其实差不多,那不应该把多1和少1区分为两类。在这里多1和少1属于噪声,是没有用的。特别是对于不稳定的模型(有多重共线性的模型)某个特征的细微改变都会导致非常巨大的预测差别,如果把这种连续特征值放入模型训练或者预测,只会加剧模型的不稳定性。
    例如年龄这个特征,20岁其实跟21岁差别不大,因此可以根据经验分段(幼儿、少年、青年、中年、老年),把类似的归为一类。
注意多重共线性

多重共线性是指自变量之间存在一定程度的线性相关,会给变量对模型的贡献性带来影响。即若有两个变量存在共线性,在相互作用计算后,其一的变量的影响会相对减弱,而另一个变量的作用却会相对增强。

参考这篇
还有这篇

一些小问题

第二个是半显式的组合,主要基于的是树模型。为什么说是“半显式”呢?因为大家可能认为树模可解释或者做特征组合是很自然的事情,但其实并不是:叶子节点的每一个分支并不是一种显式、直接的特征组合,而是这些特征在特定取值区间的组合。所以从结果上来说我们做到了特征组合,有一定可解释性,但是同样也没有办法直接看特征相关性或者特征之间组合关系。

  • PCA与DNN、特征筛选在减少特征维度的区别
    PCA:求出来的各个主成分之间互不线性相关,特征不会冗余,主要用于去除多余的线性相关的特征组合,因为这些冗余的特征组合不会对模型训练有更多贡献,属于降维,但是经常无法解释重建之后的特征
    DNN:主要是抽象特征,而不是降维
    特征筛选:不存在对特征值的修改,从而更加侧重于寻找那些对模型的性能提升较大的少量特征
    参考:特征提升之特征筛选
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值