随机森林回归严重过拟合单变量数据

Posted

技术标签:

【中文标题】随机森林回归严重过拟合单变量数据【英文标题】:Random forest regression severely overfits single variable data 【发布时间】:2015-11-21 03:54:45 【问题描述】:

我正在尝试使用 sklearn 的随机森林回归作为玩具示例。我生成了 500 个介于 1 和 100 之间的均匀随机数作为预测变量,然后取它们的对数并添加高斯噪声以形成响应变量。

我听说随机森林通常开箱即用效果很好,所以我期待一个合理的外观曲线,但这就是我得到的:

我不明白为什么随机森林似乎会命中每个数据点。由于 bagging,每棵树都会丢失一部分数据,因此当所有树被平均时,曲线似乎应该更加平滑,而不是碰到异常值。

如果能帮助我理解为什么这个模型会过度拟合,我将不胜感激。

这是我用来生成绘图的代码:

from sklearn.ensemble import RandomForestClassifier
import numpy as np
import matplotlib.pyplot as plt

def create_design_matrix(x_array):
    return x_array.reshape((x_array.shape[0],1))

N = 1000

x_array = np.random.uniform(1, 100, N)
y_array = np.log(x_array) + np.random.normal(0, 0.5, N)

model = RandomForestClassifier(n_estimators=100)

model = model.fit(create_design_matrix(x_array), y_array)


test_x = np.linspace(1.0, 100.0, num=10000)
test_y = model.predict(create_design_matrix(test_x))
plt.plot(x_array, y_array, 'ro', linewidth=5.0)
plt.plot(test_x, test_y)
plt.show()

谢谢!

【问题讨论】:

您应该使用RandomForestRegressor 进行回归。你需要调整参数,例如max_depth,避免过拟合。 啊,太棒了!不敢相信我不小心使用了分类器。使用 RandomForestRegressor 并将 max_depth 设置为 5 可以得到一个外观合理的模型。感谢您的帮助! 【参考方案1】:

首先,这是一个回归问题,而不是分类问题。

如果您有与样本一样多的类,则决策树将适合它, 对我来说,这不是过拟合。 如果你认为这是一个过拟合,你可以减少决策树的深度。

【讨论】:

“这是一个回归问题,而不是分类”这一点是正确的。但既然是回归问题,就跟“有多少类有多少样本”没有关系。

以上是关于随机森林回归严重过拟合单变量数据的主要内容,如果未能解决你的问题,请参考以下文章

Kaggle 快速模型之 Random Forrest 随机森林

如何测试过度拟合的随机森林回归模型?

10、决策树集成--随机森林

旋转随机森林算法

Sklearn 随机森林回归器出错

回归预测 | MATLAB实现PSO-RF粒子群算法优化随机森林多输入单输出回归预测