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

Scikit learn 随机森林回归严重过度拟合单变量数据,scikit-learn,regression,modeling,random-forest,Scikit Learn,Regression,Modeling,Random Forest,我试图使用sklearn的随机森林回归作为一个玩具示例。我生成500个1到100之间的均匀随机数作为预测变量,然后获取它们的日志并添加高斯噪声以形成响应变量 我听说随机森林通常是开箱即用的,所以我希望有一个合理的曲线,但我得到的是: 我不明白为什么随机林似乎击中了每个数据点。由于装袋,每棵树都会丢失部分数据,因此当所有树都被平均时,曲线应该更加平滑,而不是碰到异常值 如果有人能帮助我理解为什么这个模型太过合适,我将不胜感激 以下是我用来生成绘图的代码: from sklearn.ensembl

我试图使用sklearn的随机森林回归作为一个玩具示例。我生成500个1到100之间的均匀随机数作为预测变量,然后获取它们的日志并添加高斯噪声以形成响应变量

我听说随机森林通常是开箱即用的,所以我希望有一个合理的曲线,但我得到的是:

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

如果有人能帮助我理解为什么这个模型太过合适,我将不胜感激

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

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()

谢谢大家!

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

如果您有与示例一样多的类,则决策树将适合它,
对我来说,这并不是一种过度肥胖。

如果您认为这是一个过度拟合,您可能会降低决策树的深度。

这是一个回归问题,而不是分类问题这一点是正确的。但由于这是一个回归问题,与“拥有尽可能多的类作为样本”无关。您应该使用
randomfrestreservator
进行回归。您需要调整参数,例如
max_depth
,以避免过度拟合。啊,太棒了!真不敢相信我是无意中使用了分类器。使用RandomForestRegressionor并将“最大深度”设置为5,可以提供一个合理的外观模型。谢谢你的帮助!