重点:特征预处理、特征提取、特征选择和特征降维
特征预处理:数据清洗、归一化、标准化
特征提取:特征离散化、哑编码、独热编码、词袋法、TF-IDF
特征选择:过滤、包装、嵌入选择法
特征降维:PCA、LDA
特征工程概述
- 所有一切为了让模型效果变的更好的数据处理方式都可以认为属于特征工程这个范畴中的一个操作;
- 至于需求做不做这个特征工程,需要我们在开发过程中不但的进行尝试。
- 常规的特征工程需要处理的内容:
- 异常数据的处理 删除、填充
- 数据不平衡处理
- 文本处理:词袋法、TF-IDF
- 多项式扩展、哑编码、标准化、归一化、区间缩放法、PCA、特征选择…
- 将均值、方差、协方差等信息作为特征属性,对特征属性进行对数转换、指数转换…
- 结合业务衍生出一些新的特征属性…
特征工程介绍
为什么需要特征工程(Feature Engineering)
- 机器学习领域的大神Andrew Ng(吴恩达)老师说“Coming up with features is difficult, time-consuming, requires expert knowledge. ‘Applied machine learning’ is basically feature engineering. ”
处理特征是困难的,耗时的,需要专业知识。'将它应用机器学习’是特征工程的基础。
- 业界广泛流传:数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已。
什么是特征工程
- 特征工程是使用专业背景知识和技巧处理数据,使得特征能在机器学习算法上发挥更好的作用的过程。
- 意义:会直接影响机器学习的效果
特征工程步骤
特征预处理
特征预处理包括数据清洗、归一化和标准化。
数据清洗
数据清洗(data learning)是数据预处理的一个步骤,指的是对原始数据进行处理和筛选,以去除无用、重复、错误、缺失或不一致的数据,从而获得干净、可靠、一致的数据集。
数据清洗是数据分析和机器学习的重要步骤,因为原始数据往往存在许多问题,如缺失值、重复值、异常值、不一致的格式等等,这些问题会影响到后续分析和建模的准确性和可靠性。因此,在对数据进行分析和建模之前,需要对原始数据进行清洗,以确保数据的质量和准确性。在实际的工作中,数据清洗通常占开发过程的30%-50%左右的时间。
数据清洗步骤
预处理
在数据预处理过程主要考虑两个方面,如下:
- 选择数据处理工具:关系型数据库或者Python
- 查看数据的元数据以及数据特征:一是查看元数据,包括字段解释、数据来源等一切可以描述数据的信息;另外是抽取一部分数据,通过人工查看的方式,对数据本身做一个比较直观的了解,并且初步发现一些问题,为之后的数据处理做准备。
格式内容错误数据清洗
一般情况下,数据是由用户/访客产生的,也就有很大的可能性存在格式和内容上不一致的情况,所以在进行模型构建之前需要先进行数据的格式内容清洗操作。格式内容问题主要有以下几类:
- 时间、日期、数值、半全角等显示格式不一致:直接将数据转换为一类格式即可,该问题一般出现在多个数据源整合的情况下。
- 内容中有不该存在的字符:最典型的就是在头部、中间、尾部的空格等问题,这种情况下,需要以半自动校验加半人工方式来找出问题,并去除不需要的字符。
- 内容与该字段应有的内容不符:比如姓名写成了性别、身份证号写成手机号等问题。
逻辑错误清洗
主要是通过简单的逻辑推理发现数据中的问题数据,防止分析结
果走偏,主要包含以下几个步骤:
- 数据去重
- 去除/替换不合理的值
- 去除/重构不可靠的字段值(修改矛盾的内容)
去除不需要的数据
一般情况下,我们会尽可能多的收集数据,但是不是所有的字段数据都是可以应用到模型构建过程的,也不是说将所有的字段属性都放到构建模型中,最终模型的效果就一定会好,实际上来讲,字段属性越多,模型的构建就会越慢,所以有时候可以考虑将不要的字段进行删除操作。在进行该过程的时候,要注意备份原始数据。
关联性验证
如果数据有多个来源,那么有必要进行关联性验证,该过程常应用到多数据源合并的过程中,通过验证数据之间的关联性来选择比较正确的特征属性,比如:汽车的线下购买信息和电话客服问卷信息,两者之间可以通过姓名和手机号进行关联操作,匹配两者之间的车辆信息是否是同一辆,如果不是,那么就需要进行数据调整。
数据清洗案例:数据缺省值填充
- python科学计算库
- from sklearn.impute import SimpleImputer
- 均值填充 statistic=‘mean’
- 中值填充 statistic=‘median’
- 众数填充 statistic=‘most_fraquent’
归一化和标准化
- 为什么我们要进行归一化/标准化?
特征的单位或者大小相差较大,或者某特征的方差相比其他的特征要大出几个数量级,容易影响(支配)目标效果,使得一些算法无法学习到其他的特征
我们需要用到一些方法进行去量纲化,是的不同规格的数据转换到统一规格
归一化
- 通过对原始数据进行变换把数据映射到(默认为[0,1])之间
X′=x−minmax−minX′′=X′⋅(mx−ml)+mlX' = \frac{x-min}{max-min} \quad\quad X''=X'\cdot(mx-ml)+mlX′=max−minx−min