为什么我不能用随机林找到最低平均绝对误差?

2024-10-06 12:41:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用以下数据集进行Kaggle竞争:https://www.kaggle.com/c/home-data-for-ml-course/download/train.csv

根据该理论,在随机森林模型中,通过增加估计量的个数,平均绝对误差只会下降到某个个个数(甜点),进一步增加估计量会导致过度拟合。通过绘制估计量的个数和平均绝对误差,我们应该得到这个红色的图,最低点标志着估计量的最佳个数。 enter image description here

我试图用下面的代码找到最佳估计数,但数据图显示MAE在不断减少。我做错了什么?你知道吗

train_data = pd.read_csv('train.csv')
y = train_data['SalePrice']
#for simplicity dropping all columns with missing values and non-numerical values
X = train_data.drop('SalePrice', axis=1).dropna(axis=1).select_dtypes(['number'])
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)
mae_list = []
for n_estimators in range(10, 800, 10):
    rf_model = RandomForestRegressor(n_estimators=n_estimators, random_state=0, n_jobs=8)
    rf_model.fit(X_train, y_train)
    preds = rf_model.predict(X_test)
    mae = mean_absolute_error(y_test, preds)
    mae_list.append({'n_est': n_estimators, 'mae': mae})

#plotting the results
plt.plot([item['n_est'] for item in mae_list], [item['mae'] for item in mae_list])

enter image description here


Tags: csv数据intestfordatamodeltrain
1条回答
网友
1楼 · 发布于 2024-10-06 12:41:31

你不一定做错事。你知道吗

仔细观察你展示的理论曲线,你会注意到水平轴并没有包含任何关于树/迭代的实际数量的指示,在这些树/迭代的最小数量应该发生在哪里。这是这种理论预测的一个相当普遍的特征——它们告诉你一些事情是预期的,但却没有告诉你应该在什么地方(甚至粗略地)预期它。你知道吗

记住这一点,我能从你的第二个情节中得出的唯一结论是,在你尝试过的800棵树的特定范围内,你实际上仍然处于预期最小值的“左边”。你知道吗

同样,在达到最小值之前,理论上也无法预测应该添加多少树(800或8000或……)。你知道吗

为了在讨论中提供一些经验证据:在我自己的第一次Kaggle竞赛中,我们不断添加树,直到我们达到了~24000个,然后我们的验证误差开始发散(我们使用的是GBM而不是RF,但原理是相同的)。你知道吗

相关问题 更多 >