Docs
数据预处理

数据预处理

机器学习笔记 (三)监督学习一般流程

https://blog.csdn.net/qq_27114397/article/details/82946109

特征工程入门与实践

https://blog.csdn.net/oyall520/article/details/106985167/

xgboost使用之前是否需要对数据进行归一化处理 或者 ONEHOT处理?

对xgboost中是否使用归一化 和onehot作为两个问题来进行回答。

1、xgboost是否需要对数据进行归一化

答案是不需要。首先,归一化是对连续特征来说的。那么连续特征的归一化,起到的主要作用是进行数值缩放。数值缩放的目的是解决梯度下降时,等高线是椭圆导致迭代次数增多的问题。而xgboost等树模型是不能进行梯度下降的,因为树模型是阶越的,不可导。树模型是通过寻找特征的最优分裂点来完成优化的。由于归一化不会改变分裂点的位置,因此xgboost不需要进行归一化。

2、xgboost是否需要进行onehot

xgboost支持离散类别特征进行onehot编码,因为xgboost只支持数值型的特征。但是不提倡对离散值特别多的特征通过one-hot的方式进行处理。因为one-hot进行特征打散的影响,其实是会增加树的深度。针对取值特别多的离散特征,我们可以通过embedding的方式映射成低纬向量,这样不是一种更好的解决方式么。

在使用机器学习

模型之前,通常我们会对数据进行预处理,来消除noise、提升模型表现。通常,根据不同模型的不同性质,需要进行的预处理也不尽相同。

那么,对于当下数据分析竞赛中非常火的XGBoost来说,转化为正态分布

、去除极端值、Normalization等数据预处理是否有必要呢?本文就来具体地分析一下。

一、XGBoost需要去除异常值

异常值是现实生活中不太可能取到的值,通常是人为原因导致的数据记录错误。

有一些值我们明显发现是错误的、异常的。例如一个人的身高不可能是10m,一个人的体重不可能是875kg。对于异常的数据,现实中不太可能发生的,我们需要删除。

二、基于决策树的模型与线性回归的区别

在一些经济学文献中经常用到的数据预处理方法,在决策树模型中是不需要的。

主要原因是:

经济学文献中经常用到的是参数模型,它们会提前假设数据的分布,例如线性(最常见的)、指数(科布道格拉斯生产函数)、logistic(二分类问题)等等,这一分布在模型学习之前就假设为已知的、确定的、不可变的,模型学习过程中可以变的只是各个自变量的系数,也就是参数。模型回归的过程,就是找到一组参数,让这个预先假定的分布去拟合数据。因此我们对于自变量的分布、极端值等情况会有很高的要求。

但是,决策树模型

并不会预先假设数据的分布,而是直接学习features和label时间的关系,直接从数据中学习。虽然决策树模型也要调整参数,但是这个是算法的参数,而不是关于数据的参数。它使得我们的注意力从数据的特点转移到算法的属性上了。

三、XGBoost不要求数据是正态分布的

基于决策树的算法对数据的分布没有要求,因为它的原理是做分段的常数预测

。因此,基于决策树的算法对于features的值不敏感,它仅仅利用features的大小顺序进行预测。因此,我们不需要担心有一些features不是正态分布的。当然了,我们是可以对X进行单调变换,但是这不会影响决策树的预测。

四、XGBoost不要求去除极端值或者winsorize

对于线性模型来说,数据集的长尾特性带来的噪音确实是会影响模型表现的。但是对于基于决策树

的模型来说这就不是问题了,删除那些较大或者较小的值反而会使我们的模型产生偏差。因此我们不应该去除极端值或者winsorize,否则有可能把对于分类有帮助的信息删除了。

*winsorize的含义:例如一个数据集里面某一个x的值,95%的样本都是小于100的,那么剩下5%的也就是大于100%的数全部用100表示,来去除极端值影响。

如果我们实在是担心长尾问题,那么建议通过做单调变换

来解决这个问题,这样我们数据的scale就会很好看,同时也不会改变数据的顺序。例如我们可以用下面的方法来变换某一个feature:

对于比较小的x,例如_-_α<x<α,这个函数接近于恒等式;对于比较大的x,这个函数会将其缩小到接近于0;与此同时,这个函数还保证了单调性不变,因此不会带来信息损失。

如果我们去除极端值,我们确实可以阻止模型在很高或者很低的点分割数据及,但是这种限制不会使得模型更好地拟合训练集。

当我们的数据集比较大的时候(例如超过10万条),只要我们控制好模型的复杂度(例如tree size、number of trees),模型是不容易受到过拟合的影响的。在这种情况下,限制模型在较高或者较低的点分割数据集,甚至会导致在test data set上面的表现。

五、XGBoost不需要Normalization

XGBoost不需要Normalization,这一点已经由XGBoost算法的发明者陈天奇(tqchen)亲自确认

注:

*Normalization可以理解为“归一化”,通常等同于Min-Max scale。具体公式为:

具体效果是,把一个feature的取值范围,均匀地压缩到[0,1]之间。

*另外一个比较相近的概念是standardization,可以理解为“标准化”。具体公式为:

具体效果为,把一个feature转换成均值为0、方差为1的分布。

*比较容易混淆的点在于,宽泛地说,normalization是可以包含standardization的。standardization的另一个名字就是Z-score normalization。因此,standardization 可以理解为一种特殊的 normalization。