特征工程指的是把原始资料转变为模型的训练资料的过程,它的目的就是获取更好的训练资料特征,使得机器学习模型逼近这个上限。

简单来说就是演算法的前期处理阶段,经过特征工程处理后的资料是无法直接通过肉眼辨别处理的好换,只有通过演算法的结果反推特征工程处理的好坏,如果模型任何效果不好,任何一个模型的效果都不好,八成是特征工程不好,需要重新做特征工程。
需要什么样的资料
一般公司内部做机器学习的资料来源:
使用者行为日志资料:记录的使用者在系统上所有操作所留下来的日志行为资料
业务资料:商品/物品的资讯、使用者/会员的资讯……
第三方资料:爬虫资料、购买的资料、合作方的资料……
资料如何储存
一般情况下,用于后期模型建立的资料都是存在在本地磁盘、关系型数据库或者一些相关的分散式资料储存平台的。
本地磁盘MySQL、Oracle、Hbase、HDFS、Hive。
资料清洗
资料清洗(datacleaning)是在机器学习过程中一个不可缺少的环节,其资料的清洗结果直接关系到模型效果以及最终的结论。
资料清洗的步骤:

预处理
在资料预处理过程主要考虑两个方面,如下:
选择资料处理工具:关系型数据库或者Python检视资料的元资料以及资料特征:一是检视元资料,包括字段解释、资料来源等一切可以描述资料的资讯;
另外是抽取一部分资料,通过人工检视的方式,对资料本身做一个比较直观的了解,并且初步发现一些问题,为之后的资料处理做准备。
资料清洗–格式内容错误资料清洗
一般情况下,资料是由使用者/访客产生的,也就有很大的可能性存在格式和内容上不一致的情况,所以在进行模型构建之前需要先进行资料的格式内容清洗操作。格式内容问题主要有以下几类:
资料清洗–逻辑错误清洗
主要是通过简单的逻辑推理发现资料中的问题资料,防止分析结果走偏,主要包 含以下几个步骤:
资料清洗–去除不需要的资料
一般情况下,我们会尽可能多的收集资料,但是不是所有的字段资料都是可以应 用到模型构建过程的,也不是说将所有的字段属性都放到构建模型中,最终模型 的效果就一定会好,实际上来讲,字段属性越多,模型的构建就会越慢,所以有 时候可以考虑将不要的字段进行删除操作。在进行该过程的时候,要注意备份原 始资料。
资料清洗–关联性验证
如果资料有多个来源,那么有必要进行关联性验证,该过程常应用到多资料来源合 并的过程中,通过验证资料之间的关联性来选择比较正确的特征属性,比如:汽 车的线下购买资讯和电话客服问卷资讯,两者之间可以通过姓名和手机号进行关 联操作,匹配两者之间的车辆资讯是否是同一辆,如果不是,那么就需要进行数 据调整。
资料不平衡
在实际应用中,资料往往分布得非常不均匀,也就是会出现“长尾现象”,即绝 大多数的资料在一个范围/属于一个类别,而在另外一个范围或者另外一个类别 中,只有很少的一部分资料。那么这个时候直接使用机器学习可能效果会不太少, 所以这个时候需要我们进行一系列的转换操作。
EasyEnsemble:
采用不放回的资料抽取方式抽取多数类别样本资料,然后将抽取出来的资料和少数类别 资料组合训练一个模型;多次进行这样的操作,从而构建多个模型,然后使用多个模型 共同决策/预测。
BalanceCascade:
利用Boosting这种增量思想来训练模型;先通过下采样产生训练集,然后使用 Adaboost演算法训练一个分类器;然后使用该分类器多对所有的大众样本资料进行预测, 并将预测正确的样本从大众样本资料中删除;重复迭代上述两个操作,直到大众样本数 据量等于小众样本资料量。
过取样/上取样(Over Sampling):因为在上取样过程中,是进行是随机有放回 的抽样,所以最终模型中,资料其实是相当于存在一定的重复资料,为了防止这 个重复资料导致的问题,我们可以加入一定的随机性,也就是说:在抽取资料后, 对资料的各个维度可以进行随机的小范围变动,eg: (1,2,3) –> (1.01, 1.99, 3); 通过该方式可以相对比较容易的降低上取样导致的过拟合问题。
特征转化
特征转换主要指将原始资料中的字段资料进行转换操作,从而得到适合进行演算法型构建的输入资料(数值型资料),在这个过程中主要包括但不限于以下几种资料的处理:
第一步:分词
定义:通过某种技术将连续的文字分隔成更具有语言语义学上意义的词。这个过 程就叫做分词
方法:
按照文字/单词特征进行划分:对于英文档案,可以基于空格进行单词划分。
词典匹配:匹配方式可以从左到右,从右到左。对于匹配中遇到的多种分段可能性, 通常会选取分隔出来词的数目最小的。
基于统计的方法:隐马尔可夫模型(HMM)、最大熵模型(ME),估计相邻汉字 之间的关联性,进而实现切分
基于深度学习:神经网络抽取特征、联合建模
Jieba分词:
定义:中文分词模组
原理:
第二步:转换
常用方法:词袋法(BOW/TF)、TF-IDF、HashTF、Word2Vec
单词的重要性随着它在文字中出现的次数成正比增加,也就是单词的出现次数越多, 该单词对于文字的重要性就越高。 同时单词的重要性会随着在语料库中出现的频率成反比下降,也就是单词在语料库
中出现的频率越高,表示该单词越常见,也就是该单词对于文字的重要性越低。
2. 预设值填充
主要步骤:
重点是填充预设值内容的填充。
在进行确定预设值范围的时候,对每个字段都计算其缺失比例,然后按照缺失比例和字段重要性分别指定不同的策略。

在进行去除不需要的字段的时候,需要注意的是:删除操作最好不要直接操作与 原始资料上,最好的是抽取部分资料进行删除字段后的模型构建,检视模型效果, 如果效果不错,那么再到全量资料上进行删除字段操作。总而言之:该过程简单 但是必须慎用,不过一般效果不错,删除一些丢失率高以及重要性低的资料可以 降低模型的训练复杂度,同时又不会降低模型的效果。
填充预设值内容是一个比较重要的过程,也是我们常用的一种预设值解决方案, 一般采用下面几种方式进行资料的填充:
如果某些指标非常重要,但是缺失率有比较高,而且通过其它字段没法比较精准 的计算出指标值的情况下,那么就需要和资料产生方(业务人员、资料收集人员 等)沟通协商,是否可以通过其它的渠道获取相关的资料,也就是进行重新获取 资料的操作。
4. 哑编码
哑编码(OneHotEncoder):对于定性的资料(也就是分类的资料),可以采用N位 的状态暂存器来对N个状态进行编码,每个状态都有一个独立的暂存器位,并且 在任意状态下只有一位有效;是一种常用的将特征数字化的方式。
比如有一个特征属性:[‘male’,’female’],那么male使用向量[1,0]表示,female使用[0,1]表示。
本文由 @SincerityY 原创释出于人人都是产品经理。未经许可,禁止转载
题图来自Unsplash,基于CC0协议





























