为什么两个随机森林模型在相同的数据上给出不同的结果



我在相同的数据上运行了随机森林,得到了不同的结果。根据这篇文章,原因是:

由于学习算法的性质,在相同的数据上运行相同的算法时,可能会得到不同的结果。有些算法是不确定的;相反,它们是随机的。这意味着他们的行为包含了随机性的元素。

然后提到我们可以通过以下方式处理:

您设置了伪随机数生成器使用的种子,以确保每次运行算法时,都能获得相同的随机性。

我不确定在这种情况下如何控制伪随机数?此外,我在对数据帧进行混洗时使用了随机状态,因此将确保每次都以相同的方式进行混洗,但这与通过seudorand随机数生成器控制模型无关。正确的

df = df.sample(frac=1,random_state = 524).reset_index(drop=True)

要获得可重复的结果,您应该在不同阶段修复random_state

  1. 拆分数据集时
  2. 初始化随机林时

这里有一个玩具示例:

from sklearn.datasets import load_diabetes
from sklearn.ensemble import RandomForestRegressor
from sklearn.model_selection import train_test_split
diabetes = load_diabetes(as_frame = True)
X = diabetes['data']
y = diabetes['target']
# control randomness when splitting
X_train,X_test, y_train, y_test = train_test_split(X, y,test_size = 0.1, random_state = 42)
# control randomness at initialisation
rfr = RandomForestRegressor(random_state = 42)
rfr.fit(X_train, y_train)
y_pred = rfr.predict(X_test)

如果要多次重新运行此单元格,则y_pred将始终相同。

有三个随机元素。前两个是算法的一部分。las取决于数据。

当你声明你的分类器时,在RandomForestClassifier中有:

  1. 训练新树时数据的混洗
  2. 构建每个节点时随机拾取的特征的混洗

这两个是通过在拟合模型之前设置随机种子来控制的:RandomForestClassifier(random_state=123)

当您拟合数据时:3.您传递给.fit()的训练数据

你已经控制了随机性的第三个来源。因此,设置一个random_state,使两个模型收敛到完全相同的结果。

我认为您的问题与此处所述的问题相同:Python sklearn RandomForestClassifier不可复制的结果

因此,您可以通过添加来获得可重复的结果

random.seed(1234)

(括号之间有您想要的任何值(运行随机林分类器。

此外,在机器学习中取得不同的结果并不重要。你应该检查一下你是否得到了一致的结果,也许可以估计一个误差幅度(通过模拟(。

最新更新