在使用 Scikit-learn 调整随机森林模型时,我注意到即使我使用相同的 RandomForestClassifier 实例和相同的数据作为输入,但在不同的运行后其准确度分数也不同。我尝试了谷歌搜索和 stackExchange 搜索功能,但我能找到的唯一与此有点相似的情况是this https://datascience.stackexchange.com/questions/66345/why-ml-model-produces-different-results-despite-random-state-defined-and-how-to帖子,但问题是在没有适当随机状态的情况下实例化分类器,这不是我的问题的情况。
我正在使用以下代码:
clf = RandomForestClassifier( n_estimators=65, max_features = 9, max_depth= 'sqrt', random_state = np.random.RandomState(123) )
X_train, X_test, y_train, y_test = train_test_split( X, y, test_size=0.3, random_state = np.random.RandomState(159) )
clf.fit(X_train, y_train)
y_pred=clf.predict(X_test)
X和y是我的数据和相应的标签,但我发现数据集并没有影响问题。当我运行 train_test_split 行时,我每次都会得到相同的分割,因此没有随机性。使用相同的拟合模型运行 Predict() 每次也会给出相同的结果,这表明我的问题与我上面链接的帖子不同。然而,每次运行 fit() 后,predict() 都会给出不同的预测!即使我不碰 X_train 和 y_train 也会发生这种情况。所以只需运行这两行
clf.fit(X_train, y_train)
y_pred = clf.predict(X_test)
每次都会给出不同的结果。据我从文档中可以看出 .fit() 不应该做任何随机的事情。如果没有可重复的输出,就不可能调整模型,所以我很确定某个地方存在错误。我缺少什么?以前有人遇到过这种情况,或者有人知道为什么会发生这种情况吗?