如何处理?
展开全部
缺失值处理,是每个数据分析人都避不开的沉重话题。正如那句经典的:“数据分析中的大部分时间,花在了数据预处理上。”数据预处理做得好,往往让我们的数据分析工作事半功倍。其中,正确处理缺失值,更是重中之重。
本文建立在分析了多个kaggle项目关于缺失值处理的基础上,同时参考了网上关于缺失值的相关文档,针对缺失值的分类、成因及解决方法进行剖析。主要内容如下:
下面,正文开始~
一、理论及部分概念介绍
1、完全变量和不完全变量
在数据集中,我们常将不含缺失值的变量称为完全变量,数据集中含有缺失值的变量称为不完全变量。
如下图,‘born’列就属于不完全变量,另外两列属于完全变量。
2、缺失数据的类型
(1)随机丢失(MAR,Missing at Random)
随机丢失意味着数据丢失的概率与丢失的数据本身无关,而仅与部分已观测到的数据有关。也就是说,数据的缺失不是完全随机的,该类数据的缺失依赖于其他完全变量。
(2)完全随机丢失(MCAR,Missing Completely at Random)
数据的缺失是完全随机的,不依赖于任何不完全变量或完全变量,不影响样本的无偏性。简单来说,就是数据丢失的概率与其假设值以及其他变量值都完全无关。
(3)非随机丢失(MNAR,Missing not at Random)
数据的缺失与不完全变量自身的取值有关。分为两种情况:缺失值取决于其假设值(例如,高收入人群通常不希望在调查中透露他们的收入);或者,缺失值取决于其他变量值(假设女性通常不想透露她们的年龄,则这里年龄变量缺失值受性别变量的影响)。
在前两种情况下可以根据其出现情况删除缺失值的数据,同时,随机缺失可以通过已知变量对缺失值进行估计。
在第三种情况下,删除包含缺失值的数据可能会导致模型出现偏差,同时,对数据进行填充也需要格外谨慎。
正确判断缺失值的类型,能给我们的工作带来很大的便利,但目前还没有一套规范的缺失值类型判定标准。大多是依据经验或业务进行判断。
3、造成缺失值的原因
信息暂时无法获取。如某种产品的收益等具有滞后效应。
数据因人为因素没有被记录、遗漏或丢失,这个是数据缺失的主要原因。
数据采集设备的故障、存储介质、传输媒体故障而造成数据丢失。
获取这些信息的代价太大。
有些对象的某个或某些属性是不可用的;如:未婚者的配偶姓名、儿童的固定收入状况等。
系统实时性能要求较高,即要求得到这些信息前迅速做出判断或决策。
4、缺失值在数据分析(挖掘)中存在哪些影响
使系统丢失大量的有用信息;
使系统中所表现出的不确定性更加显著,系统中蕴涵的确定性成分更难把握;
包含空值的数据会使数据挖掘过程陷入混乱,导致不可靠的输出。
二、缺失值处理方法
大纲:
在之前的文章中,我们也通过实例,介绍了关于几类关于缺失值处理的方法,包括:删除、利用众数等统计数值进行填充、随机森林回归等方法,感兴趣的小伙伴可以看看:
下面我们对这些缺失值处理方法进行逐一介绍:
(1)删除
将存在遗漏信息属性值的样本(行)或特征(列)删除,从而得到一个完整的数据表。
具体做法:
优点:简单易行,在对象有多个属性缺失值、被删除的含缺失值的对象与初始数据集的数据量相比较小的情况下非常有效。
缺点:当缺失数据所占比例较大,特别当遗漏数据非随机分布时,这种方法可能导致数据发生偏离,从而引出错误的结论。
(补充:什么是成对删除)
在重要变量存在的情况下,成对删除只会删除相对不重要的变量行。这样可以尽可能保证充足的数据。该方法的优势在于它能够帮助增强分析效果,但是它也有许多不足。它假设缺失数据服从完全随机丢失(MCAR)。如果你使用此方法,最终模型的不同部分就会得到不同数量的观测值,从而使得模型解释非常困难。
(2)插补(重点)
1、人工填写(filling manually)
当你对自己手头的数据集足够了解时,可以选择自己填写缺失值。然而一般来说,该方法很费时,当数据规模很大、空值很多的时候,该方法是不可行的。一般不推荐。
2、特殊值填充(Treating Missing Attribute values as Special values)
将空值作为一种特殊的属性值来处理,它不同于其他的任何属性值。如所有的空值都用“unknown”填充。一般作为临时填充或中间过程。有时可能导致严重的数据偏离,一般不推荐。
3、平均值填充(Mean/Mode Completer)
将初始数据集中的属性分为数值属性和非数值属性来分别进行处理。
如果空值是数值型的,就根据该属性在其他所有对象的取值的平均值来填充该缺失的属性值; 如果空值是非数值型的,就根据统计学中的众数原理,用该属性在其他所有对象的取值次数最多的值(即出现频率最高的值)来补齐该缺失的属性值。
与其相似的另一种方法叫条件平均值填充法(Conditional Mean Completer)。在该方法中,用于求平均的值并不是从数据集的所有对象中取,而是从与该对象具有相同决策属性值的对象中取得。这两种数据的补齐方法,其基本的出发点都是一样的,以最大概率可能的取值来补充缺失的属性值,只是在具体方法上有一点不同。与其他方法相比,它是用现存数据的多数信息来推测缺失值。
4、热卡填充(Hot deck imputation,或就近补齐)
对于一个包含空值的对象,热卡填充法在完整数据中找到一个与它最相似的对象,然后用这个相似对象的值来进行填充。不同的问题可能会选用不同的标准来对相似进行判定。该方法概念上很简单,且利用了数据间的关系来进行空值估计。这个方法的缺点在于难以定义相似标准,主观因素较多。
5、K最近距离邻法(K-means clustering)
先根据欧式距离或相关分析来确定距离具有缺失数据样本最近的K个样本,将这K个值加权平均来估计该样本的缺失数据。
在本方法中,先根据某种距离度量选择出k个“邻居”,他们的均值就被用于插补缺失数据。这个方法要求我们选择k的值(最近邻居的数量),以及距离度量。KNN既可以预测离散属性(k近邻中最常见的值)也可以预测连续属性(k近邻的均值)。
根据数据类型的不同,距离度量也不尽相同:
1、连续数据:最常用的距离度量有欧氏距离,曼哈顿距离以及余弦距离。
2、分类数据:汉明(Hamming)距离在这种情况比较常用。对于所有分类属性的取值,如果两个数据点的值不同,则距离加一。汉明距离实际上与属性间不同取值的数量一致。
KNN算法最吸引人的特点之一在于,它易于理解也易于实现。其非参数的特性在某些数据非常“不寻常”的情况下非常有优势。
KNN算法的一个明显缺点是,在分析大型数据集时会变得非常耗时,因为它会在整个数据集中搜索相似数据点。此外,在高维数据集中,最近与最远邻居之间的差别非常小,因此KNN的准确性会降低。
6、使用所有可能的值填充(Assigning All Possible values of the Attribute)
用空缺属性值的所有可能的属性取值来填充,能够得到较好的补齐效果。但是,当数据量很大或者遗漏的属性值较多时,其计算的代价很大。一般不推荐。
7、回归(Regression)
基于完整的数据集,建立回归方程,或利用机器学习中的回归算法。对于包含空值的对象,将已知属性值代入方程来估计未知属性值,以此估计值来进行填充。当变量不是线性相关时会导致有偏差的估计。较常用。
但是要注意!!!防止过拟合。
8、期望值最大化方法(Expectation maximization,EM)
EM算法是一种在不完全数据情况下计算极大似然估计或者后验分布的迭代算法。在每一迭代循环过程中交替执行两个步骤:E步(Excepctaion step,期望步),在给定完全数据和前一次迭代所得到的参数估计的情况下计算完全数据对应的对数似然函数的条件期望;M步(Maximzation step,极大化步),用极大化对数似然函数以确定参数的值,并用于下步的迭代。算法在E步和M步之间不断迭代直至收敛,即两次迭代之间的参数变化小于一个预先给定的阈值时结束。该方法可能会陷入局部极值,收敛速度也不是很快,并且计算很复杂。
9、多重插补(Multiple Imputation,MI)
多重填补方法分为三个步骤:
(1)插补:将不完整数据集缺失的观测行估算填充m次(图中m=3)。请注意,填充值是从某种分布中提取的。模拟随机抽取并不包含模型参数的不确定性。更好的方法是采用马尔科夫链蒙特卡洛模拟(MCMC,Markov Chain Monte Carlo Simulation)。这一步骤将生成m个完整的数据集。
(2)分析:分别对(m个)每一个完整数据集进行分析。
(3)合并:对来自各个填补数据集的结果进行综合,产生最终的统计推断,这一推断考虑到了由于数据填补而产生的不确定性。该方法将空缺值视为随机样本,这样计算出来的统计推断可能受到空缺值的不确定性的影响。
10、C4.5方法
通过寻找属性间的关系来对遗失值填充。它寻找之间具有最大相关性的两个属性,其中没有遗失值的一个称为代理属性,另一个称为原始属性,用代理属性决定原始属性中的遗失值。这种基于规则归纳的方法只能处理基数较小的名词型属性。
(在上述方法中,比较推荐是的多重插补和回归;同时,针对某项特征数据大量缺失时,随机森林回归十分有效;当数据存在明显的线性关系时,线性回归也有很好的效果。)
(3)不处理缺失值
不处理缺失值,直接在包含空值的数据上进行数据挖掘的方法。其中包括:贝叶斯网络和人工神经网络等。
贝叶斯网络提供了一种自然的表示变量间因果信息的方法,用来发现数据间的潜在关系。在这个网络中,用节点表示变量,有向边表示变量间的依赖关系。贝叶斯网络仅适合于对领域知识具有一定了解的情况,至少对变量间的依赖关系较清楚的情况。否则直接从数据中学习贝叶斯网的结构不但复杂性较高(随着变量的增加,指数级增加),网络维护代价昂贵,而且它的估计参数较多,为系统带来了高方差,影响了它的预测精度。人工神经网络也类似。
参考文档:
后面有时间的话,我也会将各种方法通过实例的方式为大家一一讲解。尤其是最为常用的:回归、K近邻、多重插补这三种方法。
以上便是<数据分析——缺失值处理详解(理论篇)>的内容,感谢大家的细心阅读,同时欢迎感兴趣的小伙伴一起讨论、学习,想要了解更多内容的可以看我的其他文章,同时可以持续关注我的动态~
本文建立在分析了多个kaggle项目关于缺失值处理的基础上,同时参考了网上关于缺失值的相关文档,针对缺失值的分类、成因及解决方法进行剖析。主要内容如下:
下面,正文开始~
一、理论及部分概念介绍
1、完全变量和不完全变量
在数据集中,我们常将不含缺失值的变量称为完全变量,数据集中含有缺失值的变量称为不完全变量。
如下图,‘born’列就属于不完全变量,另外两列属于完全变量。
2、缺失数据的类型
(1)随机丢失(MAR,Missing at Random)
随机丢失意味着数据丢失的概率与丢失的数据本身无关,而仅与部分已观测到的数据有关。也就是说,数据的缺失不是完全随机的,该类数据的缺失依赖于其他完全变量。
(2)完全随机丢失(MCAR,Missing Completely at Random)
数据的缺失是完全随机的,不依赖于任何不完全变量或完全变量,不影响样本的无偏性。简单来说,就是数据丢失的概率与其假设值以及其他变量值都完全无关。
(3)非随机丢失(MNAR,Missing not at Random)
数据的缺失与不完全变量自身的取值有关。分为两种情况:缺失值取决于其假设值(例如,高收入人群通常不希望在调查中透露他们的收入);或者,缺失值取决于其他变量值(假设女性通常不想透露她们的年龄,则这里年龄变量缺失值受性别变量的影响)。
在前两种情况下可以根据其出现情况删除缺失值的数据,同时,随机缺失可以通过已知变量对缺失值进行估计。
在第三种情况下,删除包含缺失值的数据可能会导致模型出现偏差,同时,对数据进行填充也需要格外谨慎。
正确判断缺失值的类型,能给我们的工作带来很大的便利,但目前还没有一套规范的缺失值类型判定标准。大多是依据经验或业务进行判断。
3、造成缺失值的原因
信息暂时无法获取。如某种产品的收益等具有滞后效应。
数据因人为因素没有被记录、遗漏或丢失,这个是数据缺失的主要原因。
数据采集设备的故障、存储介质、传输媒体故障而造成数据丢失。
获取这些信息的代价太大。
有些对象的某个或某些属性是不可用的;如:未婚者的配偶姓名、儿童的固定收入状况等。
系统实时性能要求较高,即要求得到这些信息前迅速做出判断或决策。
4、缺失值在数据分析(挖掘)中存在哪些影响
使系统丢失大量的有用信息;
使系统中所表现出的不确定性更加显著,系统中蕴涵的确定性成分更难把握;
包含空值的数据会使数据挖掘过程陷入混乱,导致不可靠的输出。
二、缺失值处理方法
大纲:
在之前的文章中,我们也通过实例,介绍了关于几类关于缺失值处理的方法,包括:删除、利用众数等统计数值进行填充、随机森林回归等方法,感兴趣的小伙伴可以看看:
下面我们对这些缺失值处理方法进行逐一介绍:
(1)删除
将存在遗漏信息属性值的样本(行)或特征(列)删除,从而得到一个完整的数据表。
具体做法:
优点:简单易行,在对象有多个属性缺失值、被删除的含缺失值的对象与初始数据集的数据量相比较小的情况下非常有效。
缺点:当缺失数据所占比例较大,特别当遗漏数据非随机分布时,这种方法可能导致数据发生偏离,从而引出错误的结论。
(补充:什么是成对删除)
在重要变量存在的情况下,成对删除只会删除相对不重要的变量行。这样可以尽可能保证充足的数据。该方法的优势在于它能够帮助增强分析效果,但是它也有许多不足。它假设缺失数据服从完全随机丢失(MCAR)。如果你使用此方法,最终模型的不同部分就会得到不同数量的观测值,从而使得模型解释非常困难。
(2)插补(重点)
1、人工填写(filling manually)
当你对自己手头的数据集足够了解时,可以选择自己填写缺失值。然而一般来说,该方法很费时,当数据规模很大、空值很多的时候,该方法是不可行的。一般不推荐。
2、特殊值填充(Treating Missing Attribute values as Special values)
将空值作为一种特殊的属性值来处理,它不同于其他的任何属性值。如所有的空值都用“unknown”填充。一般作为临时填充或中间过程。有时可能导致严重的数据偏离,一般不推荐。
3、平均值填充(Mean/Mode Completer)
将初始数据集中的属性分为数值属性和非数值属性来分别进行处理。
如果空值是数值型的,就根据该属性在其他所有对象的取值的平均值来填充该缺失的属性值; 如果空值是非数值型的,就根据统计学中的众数原理,用该属性在其他所有对象的取值次数最多的值(即出现频率最高的值)来补齐该缺失的属性值。
与其相似的另一种方法叫条件平均值填充法(Conditional Mean Completer)。在该方法中,用于求平均的值并不是从数据集的所有对象中取,而是从与该对象具有相同决策属性值的对象中取得。这两种数据的补齐方法,其基本的出发点都是一样的,以最大概率可能的取值来补充缺失的属性值,只是在具体方法上有一点不同。与其他方法相比,它是用现存数据的多数信息来推测缺失值。
4、热卡填充(Hot deck imputation,或就近补齐)
对于一个包含空值的对象,热卡填充法在完整数据中找到一个与它最相似的对象,然后用这个相似对象的值来进行填充。不同的问题可能会选用不同的标准来对相似进行判定。该方法概念上很简单,且利用了数据间的关系来进行空值估计。这个方法的缺点在于难以定义相似标准,主观因素较多。
5、K最近距离邻法(K-means clustering)
先根据欧式距离或相关分析来确定距离具有缺失数据样本最近的K个样本,将这K个值加权平均来估计该样本的缺失数据。
在本方法中,先根据某种距离度量选择出k个“邻居”,他们的均值就被用于插补缺失数据。这个方法要求我们选择k的值(最近邻居的数量),以及距离度量。KNN既可以预测离散属性(k近邻中最常见的值)也可以预测连续属性(k近邻的均值)。
根据数据类型的不同,距离度量也不尽相同:
1、连续数据:最常用的距离度量有欧氏距离,曼哈顿距离以及余弦距离。
2、分类数据:汉明(Hamming)距离在这种情况比较常用。对于所有分类属性的取值,如果两个数据点的值不同,则距离加一。汉明距离实际上与属性间不同取值的数量一致。
KNN算法最吸引人的特点之一在于,它易于理解也易于实现。其非参数的特性在某些数据非常“不寻常”的情况下非常有优势。
KNN算法的一个明显缺点是,在分析大型数据集时会变得非常耗时,因为它会在整个数据集中搜索相似数据点。此外,在高维数据集中,最近与最远邻居之间的差别非常小,因此KNN的准确性会降低。
6、使用所有可能的值填充(Assigning All Possible values of the Attribute)
用空缺属性值的所有可能的属性取值来填充,能够得到较好的补齐效果。但是,当数据量很大或者遗漏的属性值较多时,其计算的代价很大。一般不推荐。
7、回归(Regression)
基于完整的数据集,建立回归方程,或利用机器学习中的回归算法。对于包含空值的对象,将已知属性值代入方程来估计未知属性值,以此估计值来进行填充。当变量不是线性相关时会导致有偏差的估计。较常用。
但是要注意!!!防止过拟合。
8、期望值最大化方法(Expectation maximization,EM)
EM算法是一种在不完全数据情况下计算极大似然估计或者后验分布的迭代算法。在每一迭代循环过程中交替执行两个步骤:E步(Excepctaion step,期望步),在给定完全数据和前一次迭代所得到的参数估计的情况下计算完全数据对应的对数似然函数的条件期望;M步(Maximzation step,极大化步),用极大化对数似然函数以确定参数的值,并用于下步的迭代。算法在E步和M步之间不断迭代直至收敛,即两次迭代之间的参数变化小于一个预先给定的阈值时结束。该方法可能会陷入局部极值,收敛速度也不是很快,并且计算很复杂。
9、多重插补(Multiple Imputation,MI)
多重填补方法分为三个步骤:
(1)插补:将不完整数据集缺失的观测行估算填充m次(图中m=3)。请注意,填充值是从某种分布中提取的。模拟随机抽取并不包含模型参数的不确定性。更好的方法是采用马尔科夫链蒙特卡洛模拟(MCMC,Markov Chain Monte Carlo Simulation)。这一步骤将生成m个完整的数据集。
(2)分析:分别对(m个)每一个完整数据集进行分析。
(3)合并:对来自各个填补数据集的结果进行综合,产生最终的统计推断,这一推断考虑到了由于数据填补而产生的不确定性。该方法将空缺值视为随机样本,这样计算出来的统计推断可能受到空缺值的不确定性的影响。
10、C4.5方法
通过寻找属性间的关系来对遗失值填充。它寻找之间具有最大相关性的两个属性,其中没有遗失值的一个称为代理属性,另一个称为原始属性,用代理属性决定原始属性中的遗失值。这种基于规则归纳的方法只能处理基数较小的名词型属性。
(在上述方法中,比较推荐是的多重插补和回归;同时,针对某项特征数据大量缺失时,随机森林回归十分有效;当数据存在明显的线性关系时,线性回归也有很好的效果。)
(3)不处理缺失值
不处理缺失值,直接在包含空值的数据上进行数据挖掘的方法。其中包括:贝叶斯网络和人工神经网络等。
贝叶斯网络提供了一种自然的表示变量间因果信息的方法,用来发现数据间的潜在关系。在这个网络中,用节点表示变量,有向边表示变量间的依赖关系。贝叶斯网络仅适合于对领域知识具有一定了解的情况,至少对变量间的依赖关系较清楚的情况。否则直接从数据中学习贝叶斯网的结构不但复杂性较高(随着变量的增加,指数级增加),网络维护代价昂贵,而且它的估计参数较多,为系统带来了高方差,影响了它的预测精度。人工神经网络也类似。
参考文档:
后面有时间的话,我也会将各种方法通过实例的方式为大家一一讲解。尤其是最为常用的:回归、K近邻、多重插补这三种方法。
以上便是<数据分析——缺失值处理详解(理论篇)>的内容,感谢大家的细心阅读,同时欢迎感兴趣的小伙伴一起讨论、学习,想要了解更多内容的可以看我的其他文章,同时可以持续关注我的动态~
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询