随机森林回归器或决策树可以处理缺失值和异常值吗?

数据挖掘 机器学习 Python 随机森林 数据科学模型 缺失数据
2022-02-19 00:55:07

我一般对 RF 和决策树有以下假设,如果假设不正确,请纠正我。

  1. 它处理缺失值
  2. 它处理异常值
  3. 它处理数据中的偏度,因此不需要转换。
  4. 不需要特征缩放
  5. 不需要特征选择。

如果我的观察结果不正确,请更正,因为您可以看到数据集中存在 nan 值错误。还有怎么整?

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

导入数据集

share3.info()
share2.isnull().sum()


XRD = share2.drop(['Close'], axis = 1)
YRD = share2['Close']

训练和测试集

from sklearn.model_selection import train_test_split
X_trainRD, X_testRD, Y_trainRD, Y_testRD = train_test_split(XRD,YRD,test_size = 0.2, random_state = 0)

将随机森林回归拟合到数据集

from sklearn.ensemble import RandomForestRegressor
regressor = RandomForestRegressor(n_estimators= 350,random_state = 0)
regressor.fit(X_trainRD, Y_trainRD)

***ValueError: Input contains NaN, infinity or a value too large for dtype('float32')***
```
2个回答

不,并非您的所有假设都是正确的

1. 缺失值

如果没有明确的说明/添加代码,RandomForest 的 sklearn 实现不会在内部处理缺失值。因此,虽然在 sklearn 中可以随时使用补救措施(例如缺失值估算等),但您必须在训练模型之前处理缺失值。

这涉及了解缺失值的方式和原因(MCAR VS. MAR VS. ...)并确定处理这些值的最佳方法(中值/均值插补、MICE、删除值等)。

2.异常值和偏度

这又不是一个完成的交易!您需要一些 EDA 来理解您的数据并相应地处理它。因变量分布中的强烈偏差(所谓的类别不平衡)会严重影响结果。寻找处理类似 SMOTE 的方法。

异常值不是问题,因为它们确实是异常值。通过 EDA 检查并确认这不是需要处理的问题。

3. 特征选择与转换

确实,许多 ML 模型都倾向于采用 more-is-more 方法来进行特征选择。与经典统计方法相比,使用 RandomForest、XGB 的主要好处是它们可以更好地处理不相关的预测变量。

静止特征选择也意味着特征工程仍然有用且必要。此外,出于实际目的,如果您想再次使用您的模型,您仍然应该致力于减少预测变量的数量。因为无论训练模型中使用的每个预测变量多么不相关,都需要存在于看不见的数据中。

最后,您将需要转换数据!简单来说,RandomForest 需要对因子变量和字符串变量进行一次热编码 (OHE)。您不需要为所有数值变量使用相同的比例,但它们都需要是数值的!

它会处理缺失值
不,事实上没有模型可以处理 NaN,如果有任何模型这样做,它会代表您做出决定。NaN 必须被理解(原因)并解决

它处理异常值
是的,因为它不依赖于任何距离公式或任何数学公式最小化,它只是尝试拆分不同的数据/特征并检查改进

它处理数据中的偏度,所以不需要转换。
是的,出于同样的原因

不需要特征缩放
是的,出于同样的原因。分类特征甚至不需要 One-Hot,只需标签编码即可工作

不需要特征选择
不,这是一个非常不同的方面。由于特征和数据量过多,模型将难以搜索到最佳分割。如果计数非常高必须做

类不平衡
必须处理。因为类别不平衡意味着数据没有为模型提供足够的机会来了解少数类别。与模型无关。所有模型都会有挑战。

Overfit
DT 是的,RF 是安全的