20200323零基础入门数据挖掘 - 二手车交易价格预测笔记(3)

三、 特征工程目标

特征工程目标:将数据转换为能更好地表示潜在问题的特征,从而提高机器学习的性能。比如,异常值处理是为了去除噪声,填补缺失值可以加入先验知识等。
特征构造也属于特征工程的一部分,其目的是为了增强数据的表达
特征选择主要有两个功能:

  1. 减少特征数量、降维,使模型泛化能力更强,减少过拟合
  2. 增强对特征和特征值之间的理解

常见的特征工程包括下方内容:

3.1 异常处理:

  • 通过箱线图(或 3-Sigma)分析删除异常值;
  • BOX-COX 转换(处理有偏分布);
  • 长尾截断;

3.2 特征归一化/标准化:

  • 标准化(转换为标准正态分布);
  • 归一化(抓换到 [0,1] 区间);
  • 针对幂律分布,可以采用公式: l o g ( 1 + x 1 + m e d i a n ) log(\frac{1+x}{1+median}) log(1+median1+x)

3.3 数据分桶:

  • 等频分桶;
  • 等距分桶;
  • Best-KS 分桶(类似利用基尼指数进行二分类);
  • 卡方分桶;

3.4 缺失值处理:

  • 不处理(针对类似 XGBoost 等树模型);
  • 删除(缺失数据太多);
  • 插值补全,包括均值/中位数/众数/建模预测/多重插补/压缩感知补全/矩阵补全等;
  • 分箱,缺失值一个箱;

3.5 特征构造:

  • 构造统计量特征,报告计数、求和、比例、标准差等;
  • 时间特征,包括相对时间和绝对时间,节假日,双休日等;
  • 地理信息,包括分箱,分布编码等方法;
  • 非线性变换,包括 log/ 平方/ 根号等;
  • 特征组合,特征交叉;
  • 仁者见仁,智者见智。

3.6 特征筛选

  • 过滤式(filter):先对数据进行特征选择,然后在训练学习器,常见的方法有 Relief/方差选择发/相关系数法/卡方检验法/互信息法;
  • 包裹式(wrapper):直接把最终将要使用的学习器的性能作为特征子集的评价准则,常见方法有 LVM(Las Vegas Wrapper) ;
  • 嵌入式(embedding):结合过滤式和包裹式,学习器训练过程中自动进行了特征选择,常见的有 lasso 回归;

3.7 降维

  • PCA/ LDA/ ICA;
  • 特征选择也是一种降维。
3.1.1 处理异常值
  1. 异常值:远离正常值范围的错误值,可以进行删除或者截尾的操作。
  2. 异常值判断:对于正态分布而言,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 = outliers_proc(Train_data, 'power', scale=3)
3.1.2BOX-COX 转换
  1. 什么是BOX-COX转换?
  • 这是Box和Cox在1964年提出的变换,使得线性回归模型在满足线性性、独立性、方差齐性以及正态性的同时,又不丢失信息。变换后残差也可以更好的满足正态性、独立性等假设前提,降低伪回归的概率。

  • 使用Box-Cox变换一般都可以保证将数据进行成功的正态变换,但在二分变量或较少水平的等级变量的情况下,不能成功进行转换,此时,我们可以考虑使用广义线性模型,如LOGUSTICS模型、Johnson转换等。

  1. 适用于什么情况:因变量y不满足正态分布,自变量x满足正态分布。
    box-cox变换
  2. 其他常规的转换方式
  • log,对数转换,是使用最多的(数据必须大于0)
  • 平方根转换
  • 倒数转换
  • 平方根后取倒数
  • 平方根后再取反正弦
  • 幂转换
3.2.1
  1. 归一化:主要是要把不同度量方式的数据放到同一个度量体系中去比较。
  2. 标准化:将数据按比例缩放,使其落入一个小的特定区间,一般使用z-score的方法,对原始数据的均值和标准差进行数据的标准化。这一过程是不会改变原始数据的分布的。
3.3.1数据分桶
  1. 离散后稀疏向量内积乘法运算速度更快,计算结果也方便存储,容易扩展;
  2. 离散后的特征对异常值更具Robust,如 age>30 为 1 否则为 0,对于年龄为 200 的也不会对模型造成很大的干扰;
  3. LR 属于广义线性模型,表达能力有限,经过离散化后,每个变量有单独的权重,这相当于引入了非线性,能够提升模型的表达能力,加大拟合;
  4. 离散后特征可以进行特征交叉,提升表达能力,由 M+N 个变量编程 M*N 个变量,进一步引入非线形,提升了表达能力;
  5. 特征离散后模型更稳定,如用户年龄区间,不会因为用户年龄长了一岁就变化
3.4.1缺失值处理
  • 在Task 2 的数据分析里面看到bodyType、gearbox、fuelType、notRepairDamage有缺失值。有下面几种处理方式:
  1. 不处理-针对xgboost等树模型, 有些模型有处理缺失的机制,所以可以不处理
  2. 如果数据缺失的太多,可以考虑删除该列
  3. 插值补全(均值,中位数,众数,建模预测,多重插补等)
  4. 分箱处理缺失值,将缺失值放一个箱。

参考网址:

  1. https://blog.csdn.net/wuzhongqiang/article/details/105146150
  2. https://blog.csdn.net/wuzhongqiang/article/details/105012634
  3. https://zhuanlan.zhihu.com/p/110580568?from_voters_page=true
  4. https://www.cnblogs.com/Tree0108/p/12116099.html
  5. http://www.esensoft.com/industry-news/bi-2430.html
  6. https://zhuanlan.zhihu.com/p/36284359
  7. https://blog.csdn.net/sinat_26917383/article/details/77864582
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值