机器学习中数据缺失的处理及建模方法
source link: http://www.cnblogs.com/liuxiaochong/p/14351038.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
在机器学习中建模的时候,往往面临两个困难,一是选择哪个模型,二是怎样处理数据。处于数据包括数据获取、数据清洗和数据分析。其实对于不同的场景和不同的数据,选择的模型也是不一样的,本文简单聊一聊在数据缺失的时候该怎样选择合适的模型。
一、缺失数据处理及建模方法
数据缺失时,处理数据的方式有如下三种:
(1) 若数据的特点已经知道,可以根据已知数据比较准确的得到未知数据时,可以使用预测的方式,先填补未知数据,再根据数据和场景的特点,以不存在数据缺失的方式选择合适的模型。
(2) 若数据量远远超出要研究问题的规模,而存在缺失的数据条目比较少,去掉存在缺失数据的记录对要研究的问题不存在影响,则可以把存在缺失值的记录去掉,然后以不存在数据缺失的方式选择合适的模型。
(3) 使用可以处理有缺失数据的工具包或者算法对存在缺失数据的数据集进行建模。
方式(1)和(2)是把存在缺失数据的数据集转换成不具有缺失值的方式进行建模,然而对于(1),预测的值并不是真实值,这还是会导致数据的不确定性,所以这种方式要慎用。对于(2),在机器学习中,数据是最宝贵的财富,所以要说数据太多了是假话,所以这种方式只是在最无奈的时候才选择。接下来详细讲解使用工具包或者特殊算法对存在缺失值的数据集进行建模方法。
使用工具包或者特殊的算法对存在缺失数据的数据集进行建模
首先,要明确一点,工具包和特殊的算法也许是可以对存在缺失值的数据集进行建模的。但是工具包进行了封装,内部的结构和实现过程是不透明的。实际上,工具包之所以可以处理有缺失值的数据集,是因为加了缺失值处理函数。要明白,工具/算法本身是不应该处理缺失值的,应该处理缺失值的是用户。工具或者某些特殊的算法为了方便用户的使用,提供了默认的缺失值处理函数,如果用户没有提供自己的缺失值处理函数,就使用工具或者算法默认的缺失值处理函数。
常用的处理具有缺失数据的工具或者算法有两种: (1)决策树;(2)xgboost 。
(1) 决策树处理缺失数据
在决策树中,以随机森林为例简单说明。在随机森林中,处理缺失值的方式如下:
方法一(快速简单但效果差):把数值型变量中的缺失值用对应类别中的中位数替换;把非数值型数据的缺失值使用出现次数最多的数据替换。这种处理方式快速、简单,但是效果较差。 以数值型变量为例:
方法二(耗时费力但效果好):虽然依然是使用中位数和出现次数最多的数来进行替换,方法2引入了权重。即对需要替换的数据先和其他数据做相似度测量(proximity measurement)也就是下面公式中的Weight( W),在补全缺失点是相似的点的数据会有更好的权重W。 以数值型变量为例:
(2) Xgboost处理缺失数据
Xgboost把缺失值当做稀疏矩阵来对待,本身的在节点分裂时不考虑的缺失值的数值。缺失值数据会被分到左子树和右子树分别计算损失,选择较优的那一个。如果训练中没有数据缺失,预测时出现了数据缺失,那么默认被分类到右子树。
这样的处理方法固然巧妙,但也有风险:即我们假设了训练数据和预测数据的分布相同,比如缺失值的分布也相同。
使用工具处理缺失数据的优缺点
优点:
1、可以节省用户的时间,快速建模;
2、防止因用户导入的数据集存在缺失值导致模型训练失败。
缺点:
1、工具提供的缺失值处理方法也许并不适用所有的数据,可能使模型训练时间延长;
2、工具提供的方法要应对的是所有可能的情况,对特殊的情形并不事最佳的选择方案;
3、简单粗暴的处理模式会影响模型的结果,自动化的数据清理不可靠;
4、用户应该提供符合模型要求的数据,这不是算法工具库的责任。算法工具包的默认要求就是用户提供适合的数据,因为用户对数据有更深刻的理解;
5、可能会大幅度增加模型的运算时间。
二、模型选择
主流的机器学习模型千千万,很难一概而论。但有一些经验法则(rule of thumb)供参考:
- 树模型对于缺失值的敏感度较低,大部分时候可以在数据有缺失时使用。
- 涉及到距离度量(distance measurement)时,如计算两个点之间的距离,缺失数据就变得比较重要。因为涉及到“距离”这个概念,那么缺失值处理不当就会导致效果很差,如K近邻算法(KNN)和支持向量机(SVM)。
- 线性模型的代价函数(loss function)往往涉及到距离(distance)的计算,计算预测值和真实值之间的差别,这容易导致对缺失值敏感。
- 神经网络的鲁棒性强,对于缺失数据不是非常敏感,但一般没有那么多数据可供使用。
- 贝叶斯模型对于缺失数据也比较稳定,数据量很小的时候首推贝叶斯模型。
总结来看,对于有缺失值的数据在经过缺失值处理后:
- 数据量很小,用朴素贝叶斯
- 数据量适中或者较大,用树模型,优先 xgboost
- 数据量较大,也可以用神经网络
- 避免使用距离度量相关的模型,如KNN和SVM
参考:
Recommend
-
7
机器学习现在在很多地方都是十分流行,无论现在的你是否从事建模工作,还是你将来想从事相关工作,对于从业者可以从中看出一些同感与意见,对于未来从业者可以了解这个职业到底是做些什么。 话不多说,一个机器学习模型的开发周期...
-
26
数据科学就是关于数据的。它是任何数据科学或机器学习项目的关键。在大多数情况下,当我们从不同的资源收集数据或从某处下载数据时,几乎有95%的可能性我们的数据中包含缺失的值。我们不能对包含缺失值的数据进行分析或训练机器学习模型。...
-
8
在机器学习数据预处理阶段经常需要对数据进行缺失值处理。关于缺失值的处理并没有想象中的那么简单。以下为一些经验分享。 数据缺失类型 完全随机丢失(MCAR,Missing Completely at Random):某个变量是否缺失与它自...
-
4
在数据处理中,Pandas会将无法解析的数据或者缺失的数据使用NaN来表示。虽然所有的数据都有了相应的表示,但是NaN很明显是无法进行数学运算的。 本文将会讲解Pandas对于NaN数据的处理方法。 NaN的例子 上面讲到了缺失的数据会被表现为Na...
-
3
机器学习建模会威胁人工建模吗?它仍在努力从语言中提取意义thenewstack这篇文章强调了语言上下文的重要性:上下文为王,即使像 GPT...
-
4
作者:韦斯·麦金尼(Wes McKinney) 译者:徐敬一 来源:大数据DT(ID:hzdashuju) 导读:在进行数据分析和建模的过程中,大量的时间花在数据准备上:加载、清理、转换和重新...
-
3
说说hdfs是如何处理块副本多余和缺失的 - hncscwc的个人空间 - OSCHINA - 中文开源技术交流社区 年度开源项目评选特别策划之“视频号...
-
2
💡 作者:
-
2
Table of Contents核心知识点 一、检测空值: isnull() notnull() df.isnull() 与 df.notnull() :用于检测dataframe 或者 series
-
3
数据分析缺失值处理(Missing Values)——删除法、填充法、插值法 ...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK