You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

RandomForestClassifier结果无法复现,求解决方案

解决RandomForestClassifier结果不可复现及BorutaPy特征筛选不稳定问题

核心问题定位

  • RandomForestClassifier的random_state参数错误:你写的random_state = random.seed(1234)是无效写法,random.seed()函数返回None,相当于未给模型设置有效随机种子,导致模型初始化随机性不受控。
  • 多线程(n_jobs=-1)引入的不确定性:使用多线程训练时,部分底层线性代数库(如OpenBLAS、MKL)的并行实现可能打破随机数的线程安全性,即使设置random_state也会出现结果波动。
  • 全局随机种子未统一:仅给模型和拆分设置种子不够,Python标准库、NumPy的随机源也需要统一固定,避免其他环节的随机操作干扰结果。

修正后的代码方案

1. 统一设置全局随机种子

在代码最开头添加以下内容,锁定所有随机源:

import random
import numpy as np
from sklearn.utils import check_random_state

# 固定全局随机种子
SEED = 1234
random.seed(SEED)
np.random.seed(SEED)
rng = check_random_state(SEED)

2. 修正数据拆分与模型初始化

数据拆分(时间序列场景shuffle=False,random_state可保留但不影响拆分逻辑)

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, shuffle=False, random_state=SEED)
X_train, X_test, y_train, y_test = np.array(X_train), np.array(X_test), np.array(y_train), np.array(y_test) 
print(f"Train and Test Size {len(X_train)}, {len(X_test)}")

修正RandomForestClassifier的random_state参数

forest = RandomForestClassifier(
    n_jobs=-1, 
    class_weight=cwts(df), 
    max_depth=5, 
    random_state=SEED  # 直接传入固定整数,不要调用random.seed()
)
forest.fit(X_train, y_train)

3. 解决多线程随机性问题

如果设置种子后仍有波动,需控制底层库的线程数,避免并行带来的非确定性:

import os
# 强制MKL/OpenBLAS/OMP使用单线程,消除并行随机数冲突
os.environ['MKL_NUM_THREADS'] = '1'
os.environ['OPENBLAS_NUM_THREADS'] = '1'
os.environ['OMP_NUM_THREADS'] = '1'

若想保留多线程,可先将n_jobs设为1验证结果是否可复现,确认是多线程问题后再用上述环境变量配置。

4. 稳定BorutaPy特征筛选

给BorutaPy也设置random_state,同时确保传入的基模型是已固定种子的随机森林:

from boruta import BorutaPy

boruta_selector = BorutaPy(
    estimator=forest,
    n_estimators='auto',
    random_state=SEED,  # 固定BorutaPy的随机种子
    verbose=2
)
boruta_selector.fit(X_train, y_train)

验证要点

每次运行前确保:

  • 随机种子设置代码在所有逻辑最开头执行
  • 数据读取、预处理步骤完全一致(无版本或逻辑变动)
  • 后续代码未修改或重置随机种子

内容的提问来源于stack exchange,提问作者user14334602

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 06:55:16