数据缺失时,怎样选择合适的模型

本文探讨了在数据缺失情况下选择合适机器学习模型的方法。提出了三种处理策略:预测填补、删除缺失值和使用特定算法处理。并针对不同数据量推荐了如朴素贝叶斯、神经网络等模型。

在机器学习中建模的时候,往往面临两个困难,一是选择哪个模型,二是怎样处理数据。处于数据包括数据获取、数据清洗和数据分析。其实对于不同的场景和不同的数据,选择的模型也是不一样的,本文简单聊一聊在数据缺失的时候该怎样选择合适的模型。

       看到这个标题,对于初学机器学习的人来说,也许会非常不解,难道在有数据缺失和没数据缺失的情况下,选择模型还会不一样?是的。

1、 在数据缺失时,如何选择合适的模型总述

(1)  数据的特点已经知道,可以根据已知数据比较准确的得到未知数据的时候,可以使用预测的方式,先填补未知数据,再根据数据和场景的特点,以不存在数据缺失的方式选择合适的模型。

(2)  数据量远远超出要研究问题的规模,而存在缺失的数据条目比较少,去掉存在缺失数据的记录对要研究的问题不存在影响。这时候可以把存在缺失值的记录去掉,然后以不存在数据缺失的方式选择合适的模型。

(3)  使用可以处理有缺失数据的工具包或者算法对存在缺失数据的数据集进行建模。

2、 把存在缺失数据的数据集转换成不具有缺失值的方式建模

这种方式对应1中的(1)和(2)。对于(1),预测的值并不是真实值,这还是导致了数据的不确定性,所以这种方式要慎用。对于(2),在机器学习中,数据是最宝贵的财富,所以要说数据太多了使假话,所以这种方式只是在最无奈的时候才选择。

3、 使用工具包或者特殊的算法对存在缺失数据的数据集进行建模

首先,要明确一点,工具包和特殊的算法也许是可以对存在缺失值的数据集进行建模的。但是工具包进行了封装,内部的结构和实现过程是不透明的。实际上,工具包之所以可以处理有缺失值的数据集,是因为加了缺失值处理函数。要明白,工具/算法本身是不应该处理缺失值的,应该处理缺失值的应该用户。工具或者某些特殊的算法为了方便用户的使用,提供了默认的缺失值处理函数,如果用户没有提供自己的缺失值处理函数,就使用工具或者算法默认的缺失值处理函数。

常用的处理具有缺失数据的工具或者算法有两种:(1)决策树:(2)xgboost。

(1)  决策树处理缺失数据

在决策树中,以随机森林为例简单说明。在随机森林中,处理缺失值的方式如下

方法一:把数值型变量中的缺失值用对应类别中的中位数替换;把非数值型数据的缺失值使用出现次数最多的数据替换。这种处理方式快速、简单,但是效果较差。

方法二:对要补全的数据记录先和其他记录做相似度度量,在补全缺失数据是相似的点的数据会有更好的权重。这种方式还是利用中位数和出现次数最多的数填充,可是选择数据的方式不一样了。

(2)  Xgboost处理缺失数据

Xgboost处理缺失数据是把缺失值当做稀疏矩阵对待,在节点分裂的时候暂时不考虑数据缺失。缺失的数据会被分到左子树和右子树,分别计算损失,然后选择较优的那一个。如果训练中没有数据缺失,预测时出现了数据缺失,默认分到右子树。

4、 使用工具处理缺失数据的优缺点

优点:(1)可以节省用户的时间,快速建模;(2)防止用户导入的数据集存在缺失值导致模型训练失败。

缺点:(1)工具提供的缺失值处理方法也许并不适用所有的数据,可能使模型训练时间延长;(2)工具提供的方法要应对的是所有可能的情况,对特殊的情形并不事最佳的选择方案。

5、 缺失数据时选择模型的方式小结

(1)  数据量较小:使用朴素贝叶斯

(2)  数据量较大:使用神经网络

(3)  数据量适中或者较大:用树模型,优先采用xgboost

(4)  树模型对缺失值的敏感度较低,大部分时候可以在数据有缺失的时候使用

(5)  如果要采用距离度量可以采用k近邻(kNN)或者支持向量机(SVM)

(6)  神经网络的鲁棒性强,对缺失数据不敏感,但一般没有那么多数据可以使用

(7)  线性模型在计算代价函数的时候,需要使用梯度下降法,这里需要计算距离,对缺失值敏感

(8)  贝叶斯模型对缺失数据比较稳定,数据量很小的时候首选贝叶斯模型

 

 

初学者,欢迎大家批评指正。
### 构建或使用用于生成数据模型 在机器学习和统计学领域,处理数据是一个常见的挑战。为了应对这一问题,可以采用多种方法来构建或使用生成数据模型。 #### 方法一:多重插补法 (Multiple Imputation) 多重插补是一种广泛使用的统计技术,它通过模拟多个可能的数据集来估计失值。这种方法的核心在于利用贝叶斯推断框架,基于观测到的数据分布生成合理的假设[^1]。具体实现可以通过以下方式完成: - 使用概率模型(如线性回归、逻辑回归或其他适合的方法)拟合现有数据。 - 基于该模型随机抽样生成多组完整的数据集。 - 对每组完整数据应用分析算法并汇总结果。 此过程不仅能够减少单一填补带来的偏差风险,还能提供更精确的结果评估标准误差范围。 #### 方法二:K近邻(KNN) 插补 另一种有效的方式是运用 K 近邻算法来进行失值填充。其基本原理是比较目标样本与其他已知样本之间的相似度,并选取最接近的一些邻居作为参考依据来预测未知数值[^2]。以下是简单的 Python 实现示例: ```python from sklearn.impute import KNNImputer import numpy as np data = [[1, 2], [np.nan, 3], [7, 6]] imputer = KNNImputer(n_neighbors=2) print(imputer.fit_transform(data)) ``` 这段代码展示了如何利用 `scikit-learn` 库中的 `KNNImputer` 类自动计算并替换矩阵内的 NaN 值。 #### 方法三:深度学习模型——变分自编码器(VAE) 对于复杂高维数据结构下的失情况,则可考虑引入先进的神经网络架构比如变分自编码器(Varitational Autoencoder,Vae)[^4] 。VAE 能够捕捉潜在空间特征从而更好地重建原始输入向量即使部分维度丢失也能达到良好效果. 训练阶段需调整损失函数使其兼顾重构精度与KL散度约束条件;而在测试期间则只需前馈传播即可获得相应位置的最佳猜测值。 --- ### 总结 综上所述,针对不同场景可以选择合适的策略解决数据集中存在的空白项问题。无论是传统统计手段还是现代AI技术支持下都有各自适用场合以及优点需要注意权衡考量。
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值