如何在 Python 的随机森林回归器中手动预测?

Posted

技术标签:

【中文标题】如何在 Python 的随机森林回归器中手动预测?【英文标题】:How to predict manually in Random Forest Regressor in Python? 【发布时间】:2020-12-05 06:11:32 【问题描述】:

我有这个随机森林模型 其中 X_train, X_test 以及 y_train, y_test 是形状为 (1,n) 和 (1,m) 的 numpy 数组 即输入仅包含一个特征

model_1 = RandomForestRegressor(n_estimators=50,random_state=42)
model_1.fit(X_train.reshape(-1,1), y_train.reshape(-1,1))
print(model_1.score(X_test.reshape(-1,1), y_test.reshape(-1,1)))

它完全可以很好地拟合训练数据,然后分别为测试数据给出大约 0.95 的分数,但现在如果我想预测

future = np.array([int(i) for i in range(len(X)+1,len(X)+11)])

所以未来是

array([155, 156, 157, 158, 159, 160, 161, 162, 163, 164])

我这样做了:

model_1.predict(future.reshape(-1, 1))

但在输出中我得到了所有相同的值

array([2985.02, 2985.02, 2985.02, 2985.02, 2985.02, 2985.02, 2985.02,
       2985.02, 2985.02, 2985.02])

有人能告诉我为什么我的所有预测都是同一个数字吗? 这只是不会发生在 10 个未来值,甚至是 100 个值。 还有其他方法可以手动预测结果吗?

【问题讨论】:

当您尝试预测测试数据时会发生什么?我的意思是model_1.predict(X_test.reshape(-1,1)) 的结果是什么? @büşraçelik for X_test 输出不是同一个数字 你能举个小例子吗(也许 mn 小于 5 或​​小于 10)X|y_train 和 @987654328 @ 那会显示问题吗?我不知道这是否会涉及重组您的整个模型,但如果不是,那么能够重现您的问题会有所帮助。 【参考方案1】:

我没有办法尝试运行代码,但听起来随机数生成器种子没有改变。通常,您所描述的可重复性/再现性类型是需要的,如this SO situation - 它有助于测试某些东西。在该示例中,OP 受到关注,因为结果不可重现。

我认为首先要看的是random_state = 42。如果每次都使用相同的随机种子,您也许可以在那里找到。

至于预测结果(如果这意味着您想预测每次得到的“相同数字”,您需要找到 (P strong>seudoRandom Number Generator (PRNG, wikipedia article linked here)。

实际上,那篇文章很好地描述了您可能遇到的问题:

PRNG 生成的序列并不是真正随机的,因为它完全由一个初始值决定,称为 PRNG 的种子。

您需要查看源代码。希望有人对他们的代码进行了足够好的评论,以便很容易找到。从 wiki 文章中查找诸如 seedgenerator 之类的词以及可能的其他词。

再一次,由于无法尝试或无法查看源代码,我不能告诉你这是真正的问题。然而,它让我想起了我们在研究生阶段搞砸的模拟。目标是为大约 10^12 个事件运行粒子碰撞模拟器;我们没有重置种子,所以我们有大约 10^12 个相同的模拟。这对我们试图做的统计数据没有帮助。

【讨论】:

以上是关于如何在 Python 的随机森林回归器中手动预测?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Python 中使用随机森林回归器预测未来的数字

如何在 Python scikit-learn 中输出随机森林中每棵树的回归预测?

如何在 Python scikit-learn 中输出随机森林中每棵树的回归预测?

防止随机森林回归器中数据泄漏的建议

如何从回归随机森林中获得概率密度函数?

Python对中国电信消费者特征预测:随机森林朴素贝叶斯神经网络最近邻分类逻辑回归支持向量回归(SVR)