20200323零基础入门数据挖掘|20200323零基础入门数据挖掘 - 二手车交易价格预测笔记(3)
三、 特征工程目标
特征工程目标:将数据转换为能更好地表示潜在问题的特征,从而提高机器学习的性能。比如,异常值处理是为了去除噪声,填补缺失值可以加入先验知识等。【20200323零基础入门数据挖掘|20200323零基础入门数据挖掘 - 二手车交易价格预测笔记(3)】常见的特征工程包括下方内容:
特征构造也属于特征工程的一部分,其目的是为了增强数据的表达。
特征选择主要有两个功能:
- 减少特征数量、降维,使模型泛化能力更强,减少过拟合
- 增强对特征和特征值之间的理解
3.1 异常处理:
- 通过箱线图(或 3-Sigma)分析删除异常值;
- BOX-COX 转换(处理有偏分布);
- 长尾截断;
- 标准化(转换为标准正态分布);
- 归一化(抓换到 [0,1] 区间);
- 针对幂律分布,可以采用公式:l o g ( 1 + x 1 + m e d i a n ) log(\frac{1+x}{1+median}) log(1+median1+x?)
- 等频分桶;
- 等距分桶;
- Best-KS 分桶(类似利用基尼指数进行二分类);
- 卡方分桶;
- 不处理(针对类似 XGBoost 等树模型);
- 删除(缺失数据太多);
- 插值补全,包括均值/中位数/众数/建模预测/多重插补/压缩感知补全/矩阵补全等;
- 分箱,缺失值一个箱;
- 构造统计量特征,报告计数、求和、比例、标准差等;
- 时间特征,包括相对时间和绝对时间,节假日,双休日等;
- 地理信息,包括分箱,分布编码等方法;
- 非线性变换,包括 log/ 平方/ 根号等;
- 特征组合,特征交叉;
- 仁者见仁,智者见智。
- 过滤式(filter):先对数据进行特征选择,然后在训练学习器,常见的方法有 Relief/方差选择发/相关系数法/卡方检验法/互信息法;
- 包裹式(wrapper):直接把最终将要使用的学习器的性能作为特征子集的评价准则,常见方法有 LVM(Las Vegas Wrapper) ;
- 嵌入式(embedding):结合过滤式和包裹式,学习器训练过程中自动进行了特征选择,常见的有 lasso 回归;
- PCA/ LDA/ ICA;
- 特征选择也是一种降维。
- 异常值:远离正常值范围的错误值,可以进行删除或者截尾的操作。
- 异常值判断:对于正态分布而言,0.7%的数据是异常值;3σ 箱线图分析- 99.73%都在(μ-3α,μ+3α)之间,超过这个范围的数据认为是异常的。
def outliers_proc(data, col_name, scale=3):
"""
用于清洗异常值,默认用 box_plot(scale=3)进行清洗
:param data: 接收 pandas 数据格式
:param col_name: pandas 列名
:param scale: 尺度
:return:
"""def box_plot_outliers(data_ser, box_scale):
"""
利用箱线图去除异常值
:param data_ser: 接收 pandas.Series 数据格式
:param box_scale: 箱线图尺度,
:return:
"""
iqr = box_scale * (data_ser.quantile(0.75) - data_ser.quantile(0.25))
val_low = data_ser.quantile(0.25) - iqr
val_up = data_ser.quantile(0.75) + iqr
rule_low = (data_ser < val_low)
rule_up = (data_ser > val_up)
return (rule_low, rule_up), (val_low, val_up)
TIP:test集的异常值不能删,因为那也是验证模型适配度的一部分。
因为前面做EDA时发现power栏位有一些异常值,所以这边开始处理。
Train_data = https://www.it610.com/article/outliers_proc(Train_data,'power', scale=3)
3.1.2BOX-COX 转换
- 什么是BOX-COX转换?
- 这是Box和Cox在1964年提出的变换,使得线性回归模型在满足线性性、独立性、方差齐性以及正态性的同时,又不丢失信息。变换后残差也可以更好的满足正态性、独立性等假设前提,降低伪回归的概率。
- 使用Box-Cox变换一般都可以保证将数据进行成功的正态变换,但在二分变量或较少水平的等级变量的情况下,不能成功进行转换,此时,我们可以考虑使用广义线性模型,如LOGUSTICS模型、Johnson转换等。
- 适用于什么情况:因变量y不满足正态分布,自变量x满足正态分布。
文章图片
- 其他常规的转换方式:
- log,对数转换,是使用最多的(数据必须大于0)
- 平方根转换
- 倒数转换
- 平方根后取倒数
- 平方根后再取反正弦
- 幂转换
- 归一化:主要是要把不同度量方式的数据放到同一个度量体系中去比较。
- 标准化:将数据按比例缩放,使其落入一个小的特定区间,一般使用z-score的方法,对原始数据的均值和标准差进行数据的标准化。这一过程是不会改变原始数据的分布的。
- 离散后稀疏向量内积乘法运算速度更快,计算结果也方便存储,容易扩展;
- 离散后的特征对异常值更具Robust,如 age>30 为 1 否则为 0,对于年龄为 200 的也不会对模型造成很大的干扰;
- LR 属于广义线性模型,表达能力有限,经过离散化后,每个变量有单独的权重,这相当于引入了非线性,能够提升模型的表达能力,加大拟合;
- 离散后特征可以进行特征交叉,提升表达能力,由 M+N 个变量编程 M*N 个变量,进一步引入非线形,提升了表达能力;
- 特征离散后模型更稳定,如用户年龄区间,不会因为用户年龄长了一岁就变化
- 在Task 2 的数据分析里面看到bodyType、gearbox、fuelType、notRepairDamage有缺失值。有下面几种处理方式:
- 不处理-针对xgboost等树模型, 有些模型有处理缺失的机制,所以可以不处理
- 如果数据缺失的太多,可以考虑删除该列
- 插值补全(均值,中位数,众数,建模预测,多重插补等)
- 分箱处理缺失值,将缺失值放一个箱。
- https://blog.csdn.net/wuzhongqiang/article/details/105146150
- https://blog.csdn.net/wuzhongqiang/article/details/105012634
- https://zhuanlan.zhihu.com/p/110580568?from_voters_page=true
- https://www.cnblogs.com/Tree0108/p/12116099.html
- http://www.esensoft.com/industry-news/bi-2430.html
- https://zhuanlan.zhihu.com/p/36284359
- https://blog.csdn.net/sinat_26917383/article/details/77864582
推荐阅读
- 日志打卡
- Python基础|Python基础 - 练习1
- Java|Java基础——数组
- Java基础-高级特性-枚举实现状态机
- 营养基础学20180331(课间随笔)??
- iOS面试题--基础
- HTML基础--基本概念--跟着李南江学编程
- 八零后也已经老了
- typeScript入门基础介绍
- c++基础概念笔记