APP下载

机器学习|特征工程

消息来源:baojiabao.com 作者: 发布时间:2026-05-24

报价宝综合消息机器学习|特征工程

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

简单来说就是算法的前期处理阶段,经过特征工程处理后的资料是无法直接通过肉眼辨别处理的好换,只有通过算法的结果反推特征工程处理的好坏,如果模型任何效果不好,任何一个模型的效果都不好,八成是特征工程不好,需要重新做特征工程。

需要什么样的资料

一般公司内部做机器学习的资料来源:

使用者行为日志资料:记录的使用者在系统上所有操作所留下来的日志行为资料

业务资料:商品/物品的资讯、使用者/会员的资讯……

第三方资料:爬虫资料、购买的资料、合作方的资料……

资料如何储存

一般情况下,用于后期模型建立的资料都是存在在本地磁盘、关系型数据库或者一些相关的分散式资料储存平台的。

本地磁盘MySQL、Oracle、Hbase、HDFS、Hive。

资料清洗

资料清洗(datacleaning)是在机器学习过程中一个不可缺少的环节,其资料的清洗结果直接关系到模型效果以及最终的结论。

资料清洗的步骤:

预处理

在资料预处理过程主要考虑两个方面,如下:

选择资料处理工具:关系型数据库或者Python检视资料的元资料以及资料特征:一是检视元资料,包括字段解释、资料来源等一切可以描述资料的资讯;

另外是抽取一部分资料,通过人工检视的方式,对资料本身做一个比较直观的了解,并且初步发现一些问题,为之后的资料处理做准备。

资料清洗–格式内容错误资料清洗

一般情况下,资料是由使用者/访客产生的,也就有很大的可能性存在格式和内容上不一致的情况,所以在进行模型构建之前需要先进行资料的格式内容清洗操作。格式内容问题主要有以下几类:

时间、日期、数值、半全形等显示格式不一致:直接将资料转换为一类格式即可,该问题一般出现在多个数据源整合的情况下。内容中有不该存在的字元:最典型的就是在头部、中间、尾部的空格等问题,这种情况下,需要以半自动校验加半人工方式来找出问题,并去除不需要的字元。内容与该字段应有的内容不符:比如姓名写成了性别、身份证号写成手机号等问题。资料清洗–逻辑错误清洗

主要是通过简单的逻辑推理发现资料中的问题资料,防止分析结果走偏,主要包 含以下几个步骤:

资料去重,去除/替换不合理的值去除/重构不可靠的字段值(修改矛盾的内容)资料清洗–去除不需要的资料

一般情况下,我们会尽可能多的收集资料,但是不是所有的字段资料都是可以应 用到模型构建过程的,也不是说将所有的字段属性都放到构建模型中,最终模型 的效果就一定会好,实际上来讲,字段属性越多,模型的构建就会越慢,所以有 时候可以考虑将不要的字段进行删除操作。在进行该过程的时候,要注意备份原 始资料。

资料清洗–关联性验证

如果资料有多个来源,那么有必要进行关联性验证,该过程常应用到多资料来源合 并的过程中,通过验证资料之间的关联性来选择比较正确的特征属性,比如:汽 车的线下购买资讯和电话客服问卷资讯,两者之间可以通过姓名和手机号进行关 联操作,匹配两者之间的车辆资讯是否是同一辆,如果不是,那么就需要进行数 据调整。

资料不平衡

在实际应用中,资料往往分布得非常不均匀,也就是会出现“长尾现象”,即绝 大多数的资料在一个范围/属于一个类别,而在另外一个范围或者另外一个类别 中,只有很少的一部分资料。那么这个时候直接使用机器学习可能效果会不太少, 所以这个时候需要我们进行一系列的转换操作。

设定损失函式的权重,使得少数类别资料判断错误的损失大于多数类别资料判断 错误的损失,即当我们的少数类别资料预测错误的时候,会产生一个比较大的损 失值,从而导致模型引数往让少数类别资料预测准确的方向偏。可以通过scikit- learn中的class_weight引数来设定权重。下采样/欠取样(under sampling):从多数类中随机抽取样本从而减少多数类别 样本资料,使资料达到平衡的方式。整合下采样/欠取样:采用普通的下采样方式会导致资讯丢失,所以一般采用集 成学习和下采样结合的方式来解决这个问题;主要有两种方式:EasyEnsemble:

采用不放回的资料抽取方式抽取多数类别样本资料,然后将抽取出来的资料和少数类别 资料组合训练一个模型;多次进行这样的操作,从而构建多个模型,然后使用多个模型 共同决策/预测。

BalanceCascade:

利用Boosting这种增量思想来训练模型;先通过下采样产生训练集,然后使用 Adaboost算法训练一个分类器;然后使用该分类器多对所有的大众样本资料进行预测, 并将预测正确的样本从大众样本资料中删除;重复迭代上述两个操作,直到大众样本数 据量等于小众样本资料量。

Edited Nearest Neighbor(ENN):对于多数类别样本资料而言,如果这个样本 的大部分k近邻样本都和自身类别不一样,那我们就将其删除,然后使用删除后 的资料训练模型。Repeated Edited Nearest Neighbor(RENN):对于多数类别样本资料而言, 如果这个样本的大部分k近邻样本都和自身类别不一样,那我们就将其删除;重 复性的进行上述的删除操作,直到资料集无法再被删除后,使用此时的资料集据 训练模型Tomek Link Removal:如果两个不同类别的样本,它们的最近邻都是对方,也 就是A的最近邻是B,B的最近邻也是A,那么A、B就是Tomek Link。将所有 Tomek Link中多数类别的样本删除。然后使用删除后的样本来训练模型过取样/上取样(Over Sampling):和欠取样采用同样的原理,通过抽样来增加 少数样本的数目,从而达到资料平衡的目的。一种简单的方式就是通过有放回抽 样,不断的从少数类别样本资料中抽取样本,然后使用抽取样本+原始资料组成 训练资料集来训练模型;不过该方式比较容易导致过拟合,一般抽样样本不要超过50%。过取样/上取样(Over Sampling):因为在上取样过程中,是进行是随机有放回 的抽样,所以最终模型中,资料其实是相当于存在一定的重复资料,为了防止这 个重复资料导致的问题,我们可以加入一定的随机性,也就是说:在抽取资料后, 对资料的各个维度可以进行随机的小范围变动,eg: (1,2,3) –> (1.01, 1.99, 3); 通过该方式可以相对比较容易的降低上取样导致的过拟合问题。

特征转化

特征转换主要指将原始资料中的字段资料进行转换操作,从而得到适合进行算法型构建的输入资料(数值型资料),在这个过程中主要包括但不限于以下几种资料的处理:

文字资料转换为数值型资料预设值填充定性特征属性哑编码定量特征属性二值化特征标准化与归一化

1. 文字资料转换为数值型资料第一步:分词

定义:通过某种技术将连续的文字分隔成更具有语言语义学上意义的词。这个过 程就叫做分词

方法:

按照文字/单词特征进行划分:对于英文文件,可以基于空格进行单词划分。

词典匹配:匹配方式可以从左到右,从右到左。对于匹配中遇到的多种分段可能性, 通常会选取分隔出来词的数目最小的。

基于统计的方法:隐马尔可夫模型(HMM)、最大熵模型(ME),估计相邻汉字 之间的关联性,进而实现切分

基于深度学习:神经网络抽取特征、联合建模

Jieba分词:

定义:中文分词模组

原理:

字串匹配:把汉字串与词典中的词条进行匹配,识别出一个词理解分词法:通过分词子系统、句法语义子系统、总控部分来模拟人对句子的理解。统计分词法:建立大规模语料库,通过隐马尔可夫模型或其他模型训练,进行分词第二步:转换

常用方法:词袋法(BOW/TF)、TF-IDF、HashTF、Word2Vec

词袋法(Bag of words, BOW)是最早应用于NLP和IR领域的一种文字处理模型, 该模型忽略文字的语法和语序,用一组无序的单词(words)来表达一段文字或者 一个文件,词袋法中使用单词在文件中出现的次数(频数)来表示文件词集法(Set of words, SOW)是词袋法的一种变种,应用的比较多,和词袋法的 原理一样,是以文件中的单词来表示文件的一种的模型,区别在于:词袋法使用 的是单词的频数,而在词集法中使用的是单词是否出现,如果出现赋值为1,否 则为0。TF-IDF:在词袋法或者词集法中,使用的是单词的词频或者是否存在来进行表示文件特征, 但是不同的单词在不同文件中出现的次数不同,而且有些单词仅仅在某一些文件 中出现(eg:专业名称等等),也就是说不同单词对于文字而言具有不同的重要性, 那么,如何评估一个单词对于一个文字的重要性呢?单词的重要性随着它在文字中出现的次数成正比增加,也就是单词的出现次数越多, 该单词对于文字的重要性就越高。 同时单词的重要性会随着在语料库中出现的频率成反比下降,也就是单词在语料库

中出现的频率越高,表示该单词越常见,也就是该单词对于文字的重要性越低。

2. 预设值填充主要步骤:

确定预设值范围去除不需要的字段填充预设值内容、重新获取资料重点是填充预设值内容的填充。

在进行确定预设值范围的时候,对每个字段都计算其缺失比例,然后按照缺失比例和字段重要性分别指定不同的策略。

在进行去除不需要的字段的时候,需要注意的是:删除操作最好不要直接操作与 原始资料上,最好的是抽取部分资料进行删除字段后的模型构建,检视模型效果, 如果效果不错,那么再到全量资料上进行删除字段操作。总而言之:该过程简单 但是必须慎用,不过一般效果不错,删除一些丢失率高以及重要性低的资料可以 降低模型的训练复杂度,同时又不会降低模型的效果。

填充预设值内容是一个比较重要的过程,也是我们常用的一种预设值解决方案, 一般采用下面几种方式进行资料的填充:

以业务知识或经验推测填充预设值 以同一字段指标的计算结果(均值、中位数、众数等)填充预设值以不同字段指标的计算结果来推测性的填充预设值,比如通过身份证号码计算年龄、 通过收货地址来推测家庭住址、通过访问的IP地址来推测家庭/公司/学校的家庭住址 等等如果某些指标非常重要,但是缺失率有比较高,而且通过其它字段没法比较精准 的计算出指标值的情况下,那么就需要和资料产生方(业务人员、资料收集人员 等)沟通协商,是否可以通过其它的渠道获取相关的资料,也就是进行重新获取 资料的操作。

4. 哑编码哑编码(OneHotEncoder):对于定性的资料(也就是分类的资料),可以采用N位 的状态暂存器来对N个状态进行编码,每个状态都有一个独立的暂存器位,并且 在任意状态下只有一位有效;是一种常用的将特征数字化的方式。

比如有一个特征属性:[‘male’,’female’],那么male使用向量[1,0]表示,female使用[0,1]表示。

本文由 @SincerityY 原创释出于人人都是产品经理。未经许可,禁止转载

题图来自Unsplash,基于CC0协议

2019-12-13 04:51:00

相关文章