决策树模型怎么处理异常值?
方法1(快速简单但效果差):把数值型(连续型)变量中的缺失值用其所对应的类别中的中位数替换。把描述型(离散型)变量缺失的部分用所对应类别中出现最多的数值替代。
方法2(耗时费力但效果好):虽然依然是使用中位数和出现次数最多的数来进行替换,方法2引入了权重。即对需要替换的数据先和其他数据做相似度测量也就是下面公式中的Weight,在补全缺失点是相似的点的数据会有更高的权重W。以数值型变量为例:
方法3 xgboost把缺失值当做稀疏矩阵来对待,本身的在节点分裂时不考虑的缺失值的数值。缺失值数据会被分到左子树和右子树分别计算损失,选择较优的那一个。如果训练中没有数据缺失,预测时出现了数据缺失,那么默认被分类到右子树。这样的处理方法固然巧妙,但也有风险:即我们假设了训练数据和预测数据的分布相同,比如缺失值的分布也相同,不过直觉上应该影响不是很大:)
方法4 回归,基于完整的数据集,建立回归方程。对于包含空值的对象,将已知属性值代入方程来估计未知属性值,以此估计值来进行填充。当变量不是线性相关时会导致有偏差的估计。
方法5 Kmeans,先根据欧式距离或相关分析来确定距离具有缺失数据样本最近的K个样本,将这K个值加权平均来估计该样本的缺失数据。
方法4(最简单粗暴):在构建模型时忽略异常值。如果缺失数据量少的话针对特定场景下的缺失数据有不同的填充方式:
“年收入”:商品推荐场景下填充平均值,借贷额度场景下填充最小值;
“行为时间点”:填充众数;
“价格”:商品推荐场景下填充最小值,商品匹配场景下填充平均值;
“人体寿命”:保险费用估计场景下填充最大值,人口估计场景下填充平均值;
“驾龄”:没有填写这一项的用户可能是没有车,为它填充为0较为合理;
”本科毕业时间”:没有填写这一项的用户可能是没有上大学,为它填充正无穷比较合理;
“婚姻状态”:没有填写这一项的用户可能对自己的隐私比较敏感,应单独设为一个分类,如已婚1、未婚0、未填-1。什么样的模型对缺失值更敏感?
主流的机器学习模型千千万,很难一概而论。但有一些经验法则(rule of thumb)供参考:
1)树模型对于缺失值的敏感度较低,大部分时候可以在数据有缺失时使用。
2)涉及到距离度量(distance measurement)时,如计算两个点之间的距离,缺失数据就变得比较重要。因为涉及到“距离”这个概念,那么缺失值处理不当就会导致效果很差,如K近邻算法(KNN)和支持向量机(SVM)。
3)线性模型的代价函数(loss function)往往涉及到距离(distance)的计算,计算预测值和真实值之间的差别,这容易导致对缺失值敏感。
4)神经网络的鲁棒性强,对于缺失数据不是非常敏感,但一般没有那么多数据可供使用。
5)贝叶斯模型对于缺失数据也比较稳定,数据量很小的时候首推贝叶斯模型。
总结来看,对于有缺失值的数据在经过缺失值处理后:数据量很小,用朴素贝叶斯
数据量适中或者较大,用树模型,优先xgboost
数据量较大,也可以用神经网络
避免使用距离度量相关的模型,如KNN和SVM
https://www.jianshu.com/p/cef88b2068fd