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

设置随机种子后,iterative_train_test_split仍无法返回相同划分怎么办?

解决iterative_train_test_split无法生成一致数据划分的问题

问题分析

你当前的代码中,标签集(y)的划分完全一致,但特征集(X)的划分却不一致,说明样本的选择逻辑是正确的,但全局随机种子的设置没有完全覆盖函数内部的随机操作,或者存在隐性的随机因素干扰。

解决方案

1. 全局随机种子仅需设置一次

不需要在每次调用iterative_train_test_split前重复设置环境变量和随机种子,在程序启动时一次性配置即可,重复设置可能引发不必要的状态混乱。

2. 直接给函数传入random_state参数

iterative_train_test_split支持传入random_state参数(整数或np.random.RandomState对象),这是确保划分一致性最可靠的方式,它可以直接控制函数内部的随机选择逻辑。

修改后的代码示例

import os
import random
import numpy as np
from skmultilearn.model_selection import iterative_train_test_split

SEED = 42

# 全局一次性配置随机种子与环境变量
os.environ['PYTHONHASHSEED'] = str(SEED)
os.environ['OMP_NUM_THREADS'] = '1'
os.environ['OPENBLAS_NUM_THREADS'] = '1'
os.environ['MKL_NUM_THREADS'] = '1'
os.environ['TF_NUM_INTEROP_THREADS'] = '1'
os.environ['TF_NUM_INTRAOP_THREADS'] = '1'
os.environ['NUMEXPR_NUM_THREADS'] = '1'

random.seed(SEED)
np.random.seed(SEED)

# 传入random_state参数控制划分
X_train1, y_train1, X_test1, y_test1 = iterative_train_test_split(X.values, y.values, test_size=0.2, random_state=SEED)
X_train2, y_train2, X_test2, y_test2 = iterative_train_test_split(X.values, y.values, test_size=0.2, random_state=SEED)

# 若X为浮点数,建议用np.allclose替代==判断
print(np.allclose(X_train1, X_train2))
print(np.allclose(X_test1, X_test2))
print((y_train1 == y_train2).all())
print((y_test1 == y_test2).all())

额外说明

如果你的特征集X包含浮点数,直接使用==和.all()判断相等可能会因为浮点精度误差返回False,此时建议用np.allclose(X_train1, X_train2)来验证数组是否在可接受的误差范围内一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 07:43:17