简单来说就是算法的前期处理阶段,经过特征工程处理后的数据是无法直接通过肉眼辨别处理的好换,只有通过算法的结果反推特征工程处理的好坏,如果模型任何效果不好,任何一个模型的效果都不好,八成是特征工程不好,需要重新做特征工程。
一般公司内部做机器学习的数据源:
用户行为日志数据:记录的用户在系统上所有操作所留下来的日志行为数据
业务数据:商品/物品的信息、用户/会员的信息……
第三方数据:爬虫数据、购买的数据、合作方的数据……
一般情况下,用于后期模型创建的数据都是存在在本地磁盘、关系型数据库或者一些相关的分布式数据存储平台的。
本地磁盘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
单词的重要性随着它在文本中出现的次数成正比增加,也就是单词的出现次数越多, 该单词对于文本的重要性就越高。 同时单词的重要性会随着在语料库中出现的频率成反比下降,也就是单词在语料库
中出现的频率越高,表示该单词越常见,也就是该单词对于文本的重要性越低。
主要步骤:
重点是填充缺省值内容的填充。
在进行确定缺省值范围的时候,对每个字段都计算其缺失比例,然后按照缺失比例和字段重要性分别指定不同的策略。
在进行去除不需要的字段的时候,需要注意的是:删除操作最好不要直接操作与 原始数据上,最好的是抽取部分数据进行删除字段后的模型构建,查看模型效果, 如果效果不错,那么再到全量数据上进行删除字段操作。总而言之:该过程简单 但是必须慎用,不过一般效果不错,删除一些丢失率高以及重要性低的数据可以 降低模型的训练复杂度,同时又不会降低模型的效果。
填充缺省值内容是一个比较重要的过程,也是我们常用的一种缺省值解决方案, 一般采用下面几种方式进行数据的填充:
如果某些指标非常重要,但是缺失率有比较高,而且通过其它字段没法比较精准 的计算出指标值的情况下,那么就需要和数据产生方(业务人员、数据收集人员 等)沟通协商,是否可以通过其它的渠道获取相关的数据,也就是进行重新获取 数据的操作。
哑编码(OneHotEncoder):对于定性的数据(也就是分类的数据),可以采用N位 的状态寄存器来对N个状态进行编码,每个状态都有一个独立的寄存器位,并且 在任意状态下只有一位有效;是一种常用的将特征数字化的方式。
比如有一个特征属性:[‘male’,’female’],那么male使用向量[1,0]表示,female使用[0,1]表示。
原文:http://www.woshipm.com/ai/2469370.html
既然来了,说些什么?