处理决策树中的异常值和 Null 值

数据挖掘 分类 回归 决策树 离群值
2021-09-19 16:54:14

异常值:据我了解,决策树对异常值具有鲁棒性。任何人都可以通过一个例子来确认我的假设是否正确吗?(如果我有一个从 0 到 9 的特征,但有一个值为 10000 的异常值呢?)它是为该异常值样本创建一个单独的叶子,还是与其他树的叶子合并?

NULL 值:我们是否需要在使用决策树构建模型之前替换空值,或者决策树技术会自动处理它?

谢谢你。

4个回答

异常值:在决策树学习中,您根据一个指标进行拆分,该指标取决于拆分后左右叶子上的类的比例(例如,Giny Impurity)。如果异常值很少(应该是这种情况:如果没有,您不能使用任何模型),那么它们将与这些比例无关。因此,决策树对异常值具有鲁棒性。

空值:您必须替换它们(除非您使用的软件已经为您执行此操作,通常情况并非如此)。

编辑异常值:

我在异常值中所说的只是关于分类树。但是,在回归树中肯定不是这样。回归树的分裂标准取决于被分裂的两组的平均值,并且由于平均值受到异常值的严重影响,因此回归树将受到异常值的影响。解决这个问题有两种主要方法:要么删除异常值,要么构建自己的决策树算法,根据中值而不是平均值进行分割,因为中值不受异常值的影响。但是,基于中位数的树算法会非常慢,因为计算中位数比计算平均值要慢得多。

一般来说,决策树能够处理异常值,因为它们的叶子是根据旨在尽可能多地区分结果子集的指标构建的。无论您是使用 Gini Impurity、Information Gain 还是 Variance Reduction 来构建决策树都不会改变结果:所有这些模型都旨在创建尽可能大(和同质)的桶。在这种方法下,重要的是了解您的功能的一般行为个人行为(异常值)被忽略,因为您从它们中获得的信息很少。

假设您的异常值只占数据集的一小部分,那么创建叶子来隔离它们的可能性很小(至少在创建决策树的第一步中),因为您将获得的关于互补的信息非常少子集。但是,如果您有大量异常值(但它们真的是异常值吗?),并且它们往往具有相同的结果,那么您可能会得到一片叶子来隔离它们。

另一方面,无论是通过替换、转换还是从您的观察中删除,都应该处理空值。这将取决于您的数据集。

  • 如果您的数据集中空值的数量非常多,您应该考虑创建一个附加功能来说明该值是缺失还是缺失。一些实现直接通过创建布尔值来处理它,或者用“异常值”值替换缺失值。
  • 如果空值的数量非常少,并且您的数据集足够大,您应该考虑删除它们,因为它是更简单和更安全的方法。
  • 否则,您可能会尝试用估算值替换它们,无论是平均值、中值、模态还是您可以从特征计算的其他值。

上面的答案太棒了。

此外,您可以做的是创建一个新列并将异常值标记为 1(否则为 0)。这是 Kaggle 比赛中使用的一种技术。为异常值添加新列

这个想法是为了让算法更容易检测模式。如果你给他 1/0 的异常值,决策树可能会更快地检测到模式。

你如何定义异常值?困难的问题,但您可以使用 IQR * 1.5。

决策树算法的流行实现要求您替换或删除空值,但 Quinlan(决策树算法之父)的原始 C4.5 算法专门设计了能够处理缺失值的算法。

请参阅以下链接中的讨论以获取简单的语言解释:

https://www.quora.com/In-simple-language-how-does-C4-5-deal-with-missing-values