【问题标题】:Why do two random forest models give different results on the same data为什么两个随机森林模型在相同的数据上给出不同的结果
【发布时间】:2021-03-21 13:58:47
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

  • 你在使用 scikit-learn 吗?您能否提供一些示例代码来展示您如何训练随机森林模型?

标签: python random-forest


【解决方案1】:

我认为您的问题与此处所述的问题相同:Python sklearn RandomForestClassifier non-reproducible results

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

random.seed(1234)

(在括号之间加上你想要的任何值)之前 你运行随机森林分类器。

此外,通过机器学习获得不同的结果并不是很重要。您应该检查您是否获得了连贯的结果,并可能估计误差范围(通过模拟)。

【讨论】:

    【解决方案2】:

    要获得可重现的结果,您应该在不同阶段修复您的 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 将始终相同。

    【讨论】:

      【解决方案3】:

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

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

      1. 训练新树时数据的洗牌
      2. 构建每个节点时随机选取的特征的改组

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

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

      你控制了第三个随机源。所以设置一个random_state 让两个模型收敛到完全相同的结果。

      【讨论】:

        猜你喜欢
        • 2020-11-28
        • 2016-09-16
        • 2019-02-15
        • 2016-08-10
        • 1970-01-01
        • 2020-03-30
        • 2019-11-16
        • 2021-03-25
        • 2018-09-26
        相关资源
        最近更新 更多