随机森林回归严重过拟合单变量数据
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】:
首先,这是一个回归问题,而不是分类问题。
如果您有与样本一样多的类,则决策树将适合它, 对我来说,这不是过拟合。 如果你认为这是一个过拟合,你可以减少决策树的深度。
【讨论】:
“这是一个回归问题,而不是分类”这一点是正确的。但既然是回归问题,就跟“有多少类有多少样本”没有关系。以上是关于随机森林回归严重过拟合单变量数据的主要内容,如果未能解决你的问题,请参考以下文章