特征工程与数据预处理

在机器学习和数据挖掘中,数据处理相关的工作时间往往占据整个项目的70%以上。数据的质量,决定了模型预测和泛化能力的上限,训练过程只是在逼近这个上限。

数据的质量涉及多个方面,包括准确性、完整性、一致性、时效性、可解释性等。在真实数据中,往往包含了大量缺失值,噪声,以及人为因素导致的误差或异常点。这样的数据很不利于训练得到好的模型。

特征工程和数据预处理就是要得到干净的、有价值的数据,提供给数据挖掘使用。

特征方案

一般讨论数据预处理,往往比较强调如何由采集的数据提取或组合得到新的特征。从数据中获取主要成分,或因子。但这一定程度上忽视了明确分析问题所需的特征对数据采集的指导意义。

在解决任何问题前,首先离不开对问题的建模分析。明确什么特征能帮助分析和解决问题,什么数据中含有这些特征。这些都是建立在对业务的理解和数学建模的基础之上的。

在明确了需要的特征,再去有目的性的采集数据,而不是盲目的从采集的数据中寻找特征。目标特征决定要采集的数据,有了采集到的数据再去思考如何进行数据处理来得到有用的特征。两者是相互影响,相互决定的。

此外在决定特征及采集的数据时,还要考虑数据在可获得性、采集、存储性能方面的问题,兼顾采集可行性、采集效率、时效性。

特征处理

可以把对采集数据的特征处理分为数据清洗和数据预处理两个部分。

数据清洗

就数据清洗而言,主要任务就是通过处理缺失值和离群点来解决数据不一致的问题。

1、缺失值处理
采集的数据中某些变量的值常常可能缺失。最好的策略当然是把含有缺失值的观测数据一同丢弃。但一般我们没有那么大的数据样本来允许我们这么做。针对缺失的数据,主要根据变量的分布特性和重要性采取不同的方法。

删除变量:如果某个特征变量缺失率很高,并且重要性较低,可以直接去掉这个变量。

统计值填充:如果特征变量的缺失率较低,则可以根据数据分布的情况进行填充。对于数值变量,如果数据符合均匀分布,可以用现有数据的均值来代替缺失值;如果数据分布存在倾斜的情况,则可以采用中位数进行填充。对于离散变量,用最可能出现的值,或常出现的值来代替缺失值。

插值填充:线性插值、拉格朗日插值、牛顿插值。

模型填充:通过已知的其他变量来预测缺失变量,根据数据类型,定义相应的回归或分类问题。

有一些具有特殊含义的数据,不能简单视为离散或数值变量的,采用一些标量值表示缺失含义即可。

2、离群点检验
离群点是一个实例,它与样本中其他实例非常不同。可能表示系统的异常行为。离群点检测一般不设计成监督的、将典型实例和离群点分开的分类任务。因为通常只有少数实例会被标记为离群点,而且它们并不拟合一个可以很容易被一个二类分类器捕获的模式。

相反,被建模的是典型实例,有时称为一类分类。一旦对典型实例建模,那么不拟合典型实例模型的任何实例都是离群点。但需要意识到,训练数据集也是未标记的,可能包含离群点和典型实例。

离群点检验就是要发现那些不正常的实例。也就是说它是密度估计,并检查估计密度下的小概率实例。在参数模型下,可以使用高斯模型拟合整个数据,并且任何具有低概率的实例,都是一个离群点的候选。在版参数的情况下,可以拟合混合高斯分布,选出具有小概率的实例。

但当用于拟合模型的数据本身就包含离群点时,非参数密度估计更有意义。因为模型的参数越多,对离群点的出现就越不鲁棒。

在非参数密度估计中,附近有越多实例的地方,估计密度越高。令d_k(\mathbf{x})是实例x 与它的第k个最近邻实例间的距离,N(\mathbf{x})是x 的邻域中训练实例的集合。对\mathbf{s}\in N(\mathbf{x}),计算
LOF(\mathbf{x})=\frac{d_k(\mathbf{x})}{\sum_{\mathbf{s}\in N(x)}d_k(\mathbf{s})/|N(\mathbf{x})|}
如果LOF(x) 接近1,表示 x 周围的密度较均衡,x不是离群点;随着LOF(x)变大,x是离群点的概率提高。

数据预处理

数据预处理可分为数据变换和数据规约。

数据变换

数据变换只对单个特征变量在数值上的处理,包括规范化、离散化、稀疏化。

1、规范化处理
也就是数据的归一化和标准化。数据中不同的特征由于量纲往往不同,数值间差距可能非常大,会影响到数据分析的结果。需要对数据按照一定比例进行缩放,保持数据所反映的特征信息的同时,使之落在合理范围内,便于进行综合分析。

一般基于样本间距离的机器学习方法,都离不开对数据的规范化处理。而基于概率模型的方法,由于其不关心变量的值,只关心分布情况,故不需要进行规范化处理。

常用方法包括:

  • 线性归一化:\frac{x-\min}{\max-\min}
  • 非线性归一化:对数函数、指数函数、三角函数
  • 标准化(z-score):\frac{x-\mu}{\sigma},使数据服从标准正态分布

2、离散化处理
指将连续的数据进行分段,称为离散化的区间。分段的原则有基于等距离、等频率等方法。

离散化的原因是因为一些模型是基于离散的数据的,如决策树。有效的离散化能减少算法的空间时间开销,提高系统对样本的分类聚类能力和抗噪声能力。

3、稀疏化处理
对于离散型标签数据,通常将其做0、1哑变量的稀疏化,将非数值数据数值化。如果变量的不同值较多,则根据频数,所有出现次数较少的值可以归为同一类。

数据规约

数据规约用来得到数据集的规约表示,使数据集更小,同时接近原数据的完整性。实现维度的减低,可以从现有维度中选取(特征选择),或组合现有维度来实现(维度规约)。组合维度提取特征的内容可见《维度规约(特征的提取和组合)》

而特征选择意在删除不重要的属性,来减少数据量,同时保持信息的损失最小。可以分为三类方法。

1、filter过滤法
按照发散性或者相关性对各个特征进行评分,设定阈值或者待选择阈值的个数,选择特征。通过卡方检验、皮尔逊相关系数、互信息等指标判断哪些维度重要,剔除不重要的维度。

2、wrapper包装法
使用一个基模型进行多轮训练,每次选择若干特征,或者排除若干特征。根据目标函数(通常是预测效果评分),来决定各特征是否重要。通常结合遗传算法或模拟退火算法等搜索方法来对选取特征。

3、embedded嵌入法
该方法基于机器学习的算法和模型进行训练,学习器通过训练自动对特征进行选择。
如使用L1范数作为惩罚项的线性模型(例如lasso回归)会得到稀疏解,大多数特征对应的系数为0。从而实现了特征选择。

附注:【机器学习】数据预处理与特征工程中使用scikit-learn对不同数据处理方法做了比较全面的介绍,推荐大家参考学习。

https://www.jianshu.com/p/e0031953e3d5

「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!
0 条回复 A 作者 M 管理员
    所有的伟大,都源于一个勇敢的开始!
欢迎您,新朋友,感谢参与互动!欢迎您 {{author}},您在本站有{{commentsCount}}条评论