数据挖掘--数据探索与数据预处理

文章目录

  • 数据探索与数据预处理
    • 数据理解
    • 清除变量
    • 分类型自变量
    • 处理时间变量
    • 异常值
    • 极值
    • 数据分箱
    • 缺失数据
    • 降维
    • 过抽样与欠抽样
  • 参考

黑体字为预处理相关的模型,即在使用这些模型时,需要关注到这些预处理

数据探索与数据预处理

数据理解

抽样偏差

数据粒度

  • 个人认为,数据粒度可以用于分箱

数据的精确含义

变量类型:

  • 名义变量、类别变量、属性变量
  • 定序变量
  • 定距变量
  • 定比变量

冗余变量

  • 变量重复(多个变量之间的取值相同)
  • 某一个变量/多个变量可以由其它变量推出
  • 会造成多重共线性:线性回归,SVM,朴素贝叶斯(要求在某一类确定下,变量之间是相互独立的)

完整性:

  1. 取值范围

    从常识进行判断,比如概率,只能够取值 [ 0 , 1 ] [0, 1] [0,1]

  2. 取值一致性

    北大、北京大学

  3. 异常值

    超出常规边界,

    有些异常值是正确的

  4. 整体完整性

    但看是正确的,整体不正确

缺省值:

  • 缺省的情况
  • 缺省值的处理

清除变量

需要删除的变量:

  1. 取值变化不大,且,于因变量的取值没有较大的关系,删除
  2. 变量缺失值超过一定的阈值,删除
  3. 时间序列:在未来进行预测的时候,当前特征变量都能够获取到取值

分类型自变量

只能数值变量:线性回归、神经网络

定序自变量:–> 数值自变量

名义自变量:—> 哑变量

如果分类变量取值过多,则造成强稀疏,会造成过拟合(变量个数过多会造成过拟合,比如变量个数 > 样本数。解决办法,NLP中有FM:机器学习之FM与FFM(Factorization Machines)

例如:对于观测比较多的生成哑变量,较少的归类为其它

处理时间变量

转换:

  1. 转换为距离可重复穿线的某个基准时间的时间长度,例如距离六一多少天,距离下一次春节的天数(淘宝购物中可以添加此特征)
  2. 转化为季节信息,因变量的取值跟季节相关,相当于是衍生变量。例如:一年中第几个季度、第几个越,每个季度或越对应于一个哑变量。
  3. 某些视频的购买量,跟季节和节日有关。比如粽子、暖宝宝、冰淇淋

异常值

异常值会对有些模型产生很大的影响

异常值识别:

  • 3Sigma
  • 箱线图
  • 聚类:少数观测自成一类

异常值的原因

处理:

  1. 删除,同时明确模型的应用范围
  2. 不删除异常值,但使用不受异常值影响的稳健模型(KNN,树模型

注:在进行模型融合的时候,最好不要使用KNN,因为KNN是比较稳健的模型。Bagging的基分类器是弱分类器;反之、Boosting的基分类器是强分类器

极值

应用:当线性回归时,因为假定随机项是服从正态分布的,预测的表达式左边是确定,所以最后的因变量 y y y是要求服从正态分布的。

自变量、因变量的分布会呈现出偏斜有极值的线性(收入、销售额)

处理:

  1. Box-Cox变换

z = { ( u + r ) λ − 1 λ λ ≠ 0 log ⁡ ( u + r ) λ = 0 z=\left\{ \begin{aligned} \frac{(u+r)^\lambda - 1}{\lambda} \quad & \lambda \ne 0 \\ \log(u+r) \quad & \lambda = 0 \end{aligned} \right. z=λ(u+r)λ1log(u+r)λ=0λ=0

​ 其中 r r r是一个常数,对于 u u u的所有可能取值都满足 u + r > 0 u+r>0 u+r>0。注:对数变换是Box-Cox变换的特殊情形。

  1. 转化成秩。比如可以分组,100组,每组里面从0-99取值。

    疑问:这里的组是怎么分的,里面取值是怎样取值的?

数据分箱

适用情形:

  1. 数字自变量在测量时存在随机误差。需要对数值进行平滑以消除噪声
  2. 有些数值自变量有大量不重复的取值,对于>, <, =等基本操作符算法,决策树,可以减少这些取不重复数的个数。
  3. 有些自变量只能处理分类自变量,需要把数值离散化。例如,线性回归,神经网络、SVM

分箱之后的处理:

  1. 可以取中位数、众数、均值作为当前组的观测值。

分箱常用的方法(如何分箱?分箱两要素:取值范围,每个范围内取值的个数

  1. 无监督

    • 等频,每组内的数相等
    • 等宽,每组的宽度相等
    • 给予k均值聚类的分箱,分为K箱,箱与箱之间要相互比较–有序性(可以比较大小,在分类时就需要注意
  2. 有监督分箱

    类似于决策树(CART)的找最优切分点

    在分箱时,考虑因变量的取值,使得分箱后达到最小熵或者最小描述长度。

    最小熵:

    • 假设因变量为分类变量,取值 y = 1 , 2 , ⋯   , J y =1,2, \cdots, J y=1,2,,J, 分组为 l = 1 , 2 , ⋯   , k l = 1, 2, \cdots, k l=1,2,,k

      分箱使得每一个箱内:熵值为 ∑ j = 1 J [ − p l ( j ) ⋅ log ⁡ ( p l ( j ) ) ] \sum_{j=1}^J[-p_l(j) \cdot \log(p_l(j))] j=1J[pl(j)log(pl(j))]

      当每组内,所有类比的比例相等,此时熵值最大

      当每组内,全部都是某一类别,熵值最小

    • 分箱之后的熵值为: ∑ l = 1 k { r l ⋅ ∑ j = 1 J [ − p l ( j ) log ⁡ ( p l ( j ) ) ] } \sum_{l=1}^k \{r_l \cdot \sum_{j=1}^J[-p_l(j) \log(p_l(j))]\} l=1k{rlj=1J[pl(j)log(pl(j))]}

缺失数据

处理:

  1. 忽略缺失数据

    XGBoost不处理缺失数据,在生成树找最优切分点时,将缺失值作为变量单独的一个值

  2. 给缺失值赋值

但是,这些处理缺失值的方法会造成数据分析结果的偏差

降维

造成的问题:

  1. 模型拟合速度慢

  2. 容易过拟合

  3. 自变量维数变多,数据在整个输入空间的分布越系数,越难以获得对整个输入空间中有代表的样本。

    FM

简单变量选择方法:

  1. 因变量为二分类

    • 数值自变量,可以使用两样本 t t t检验考察因变量取一种值时,自变量的均值与因变量取另一个值时,均值是否相等。选择不相等的变量,即检验不显著的变量
    • 分类自变量,可以将因变量取值两两配对,针对取值进行$t$检验,或者$\chi^2$检验。选择结果显著的
  2. 因变量:分类变量

    因变量两两配对,进行t检验或者$\chi^2$检验

  3. 因变量:数值变量

    • 将因变量离散化之后(使用中位数,将数据分组),再使用 t t t检验,或者 χ 2 \chi^2 χ2检验

    • 相关系数法:剔除与因变量相关系数小,或不显著的变量

    • 分类自变量,取值两两配对,针对没对取值使用t检验考察因变量的均值是否相等。

      只要是对任何一对取值检验结果显著,就选择该自变量

逐步选择

  1. 向前选择(forward selection)

    从不包含任何自变量的零模型开始,逐个添加(能够帮助预测因变量的自变量加入模型)

    直到模型外的任何一个自变量对于预测因变量的贡献值都低于某个临界值,或者模型中已经包含所有自变量。

  2. 后向选择

    从包含所有变量的全模型开始,逐个删除(不能。。。

    直到没有变量可以删除(所有自变量对于预测因变量的贡献值都大于某个临界值)

    或者模型中没有变量

  3. 向前选择与向后选择结合

    从零模型开始,先选择一个,再查看是否需要剔除

    直到,模型中不能够删除变量,也不能添加变量

Lasso, Elastic Net, 决策树都可以用于变量选择

也可以使用变量构成(组合)来创建新的变量,PCA, FA, 多维标度法

过抽样与欠抽样

样本不平衡

过抽样:从占比比较小的类别中,随机抽取(复制),作为新的样本,使得1:0达到1/3, 1/4等

欠抽样:从占比比较多的类别中,随机抽取「部分」变量,作为样本

样本合成(组合):SMOTE,对现有数据进行随机扰动,「生成」新数据作为样本

参考

[1]张俊妮.数据挖掘与应用[M].北京:北京大学出版社,2018:18-50.

你可能感兴趣的:(数据挖掘,数据挖掘,数据分析)