04 特征工程 - 特征转换 - 文本特征属性转换
缺省值是数据中最常见的一个问题,处理缺省值有很多方式,主要包括以下四个步骤进行缺省值处理:
1、确定缺省值范围。
2、去除不需要的字段。
3、填充缺省值内容。
4、重新获取数据。
注意:最重要的是缺省值内容填充。
一、确定缺省值范围
在进行确定缺省值范围的时候,对每个字段都计算其缺失比例,然后按照缺失比例和字段重要性分别指定不同的策略。
二、去除不需要的字段
在进行去除不需要的字段的时候,需要注意的是:删除操作最好不要直接操作与原始数据上,最好的是抽取部分数据进行删除字段后的模型构建,查看模型效果,如果效果不错,那么再到全量数据上进行删除字段操作。总而言之:该过程简单但是必须慎用,不过一般效果不错,删除一些丢失率高以及重要性低的数据可以降低模型的训练复杂度,同时又不会降低模型的效果。
三、填充缺省值内容
填充缺省值内容是一个比较重要的过程,也是我们常用的一种缺省值解决方案,一般采用下面几种方式进行数据的填充:
1、以业务知识或经验推测填充缺省值。
2、以同一字段指标的计算结果(均值、中位数、众数等)填充缺省值。
3、以不同字段指标的计算结果来推测性的填充缺省值,比如通过身份证号码计算年龄、通过收货地址来推测家庭住址、通过访问的IP地址来推测家庭/公司/学校的家。
四、重新获取数据
如果某些指标非常重要,但是缺失率有比较高,而且通过其它字段没法比较精准的计算出指标值的情况下,那么就需要和数据产生方(业务人员、数据收集人员等)沟通协商,是否可以通过其它的渠道获取相关的数据,也就是进行重新获取数据的操作。
scikit中通过Imputer类实现缺省值的填充
对于缺省的数据,在处理之前一定需要进行预处理操作,一般采用中位数、均值或者众数来进行填充,在scikit中主要通过Imputer类来实现对缺省值的填充。
如m行n列 axis = 0 对第0个位置进行填充, 即对m进行填充,保持n不变。
axis = 1 对第1个位置进行填充, 即对n进行填充,保持m不变。
思考:按行填充好,还是按列填充好?
当然是按列填充好。 因为每列表示的都是属性,我要填充,自然需要和同一个属性内的各个值进行对比。如果按行填充,那么一个身高,一个体重的值,我们怎么分析都不知道该填充什么。
哑编码
哑编码(OneHotEncoder):对于定性的数据(也就是分类的数据),可以采用N位的状态寄存器来对N个状态进行编码,每个状态都有一个独立的寄存器位,并且在任意状态下只有一位有效;是一种常用的将特征数字化的方式。比如有一个特征属性:['male','female'],那么male使用向量[1,0]表示,female使用[0,1]表示。
二值化
二值化(Binarizer):对于定量的数据(特征取值连续)根据给定的阈值,将其进行转换,如果大于阈值,那么赋值为1;否则赋值为0。
标准化、区间缩放法(归一化)、正则化
1、标准化(z-score)
标准化:基于特征属性的数据(也就是特征矩阵的列),获取均值和方差,然后将特征值转换至服从标准正态分布。计算公式如下:
2、区间缩放法(归一化)
区间缩放法:是指按照数据的取值范围特性对数据进行缩放操作,将数据缩放到给定区间上,常用的计算方式如下:
3、正则化
正则化:和标准化不同,正则化是基于矩阵的行进行数据处理,其目的是将矩阵的行均转换为“单位向量”,l2规则转换公式如下:
标准化、区间缩放法(归一化)、正则化
标准化的目的是为了降低不同特征的不同范围的取值对于模型训练的影响;比如对于同一个特征,不同的样本的取值可能会相差的非常大,那么这个时候一些异常小或者异常大的数据可能会误导模型的正确率;另外如果数据在不同特征上的取值范围相差很大,那么也有可能导致最终训练出来的模型偏向于取值范围大的特征,特别是在使用梯度下降求解的算法中;通过改变数据的分布特征,具有以下两个好处:1. 提高迭代求解的收敛速度;2. 提高迭代求解的精度。
归一化 对于不同特征维度的伸缩变换的主要目的是为了使得不同维度度量之间特征具有可比性,同时不改变原始数据的分布(相同特性的特征转换后,还是具有相同特性)。和标准化一样,也属于一种无量纲化的操作方式。
正则化 则是通过范数规则来约束特征属性,通过正则化我们可以降低数据训练处
来的模型的过拟合可能,和之前在机器学习中所讲述的L1、L2正则的效果一样。在
进行。
备注:广义上来讲,标准化、区间缩放法、正则化都是具有类似的功能。在有一些书籍上,将标准化、区间缩放法统称为标准化,把正则化称为归一化操作。
PS:如果面试有人问标准化和归一化的区别:标准化会改变数据的分布情况,归一化不会,标准化的主要作用是提高迭代速度,降低不同维度之间影响权重不一致的问题。
数据多项式扩充变换
多项式数据变换主要是指基于输入的特征数据按照既定的多项式规则构建更多的输出特征属性,比如输入特征属性为[a,b],当设置degree为2的时候,那么输出的多项式特征为[1, a, b, a^2, ab,b^2]
GBDT/RF+LR
认为每个样本在决策树落在决策树的每个叶子上就表示属于一个类别,那么我们可以进行基于GBDT或者随机森林的维度扩展,经常我们会将其应用在GBDT将数据进行维度扩充,然后使用LR进行数据预测,这也是我们进行所说的GBDT+LR做预测。
先通过GBDT,将原来样本中的维度进行扩展,然后将新生成的特征放到逻辑回归或线性回归中进行模型构建。