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

技术问询:random_state=0与numpy.random.RandomState(0)有何差异?

random_state = 整数 与 random_state = numpy.random.RandomState(整数) 的差异

我正在测试random_state的相关用法,想请教:random_state = 0与random_state = numpy.random.RandomState(0)这两种设置方式存在哪些差异?以下为测试代码及输出结果:

测试代码

from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
import numpy as np
import random

for i in range(5):
    
    ###########  code for random_state= numpy.random.RandomState(i) ##############
    
    rng = np.random.RandomState(i)
    X, y = make_classification(random_state=rng)
    rf = RandomForestClassifier(random_state=rng)
    X_train, X_test, y_train, y_test = train_test_split(X, y,
                                                        random_state=rng)
    p1=rf.fit(X_train, y_train).score(X_test, y_test)
    
   ###########  code for random_state= integer ##############

    X, y = make_classification(random_state=i)
    rf = RandomForestClassifier(random_state=i)
    X_train, X_test, y_train, y_test = train_test_split(X, y,
                                                        random_state=i)
    p2=rf.fit(X_train, y_train).score(X_test, y_test)
    print(i,p1,p2)

输出结果

0  0.84   0.92
1  1.0    0.92
2  0.88   0.92
3  0.84   0.88
4  1.0    1.0

核心差异解析

两者的本质区别在于随机数生成器的使用方式:

  • 传入整数种子(如random_state=i):每个Scikit-learn函数都会基于这个整数,创建一个全新且独立的随机数生成器。也就是说,make_classification、RandomForestClassifier、train_test_split这三个函数各自用同一个种子初始化了完全独立的生成器,彼此的随机状态互不干扰,各自生成的随机序列都是从种子i重新开始的。

  • 传入np.random.RandomState实例(如random_state=rng):这个生成器实例会被所有后续函数复用。每调用一次需要生成随机数的函数,该生成器的内部状态就会被推进一次,后续函数会接着当前的状态继续生成随机数,而不是重新用种子初始化。

对应到你的测试代码中:

  • 第一部分的三个函数共享同一个rng实例,make_classification先消耗了一部分随机数,RandomForestClassifier接着用剩下的状态生成随机数,最后train_test_split继续推进这个状态,三者的随机序列是连贯的。
  • 第二部分的每个函数都用同一个整数i作为种子,相当于三个函数各自从种子i从头开始生成随机数,彼此的随机序列完全独立。

这就是为什么两次测试的得分p1和p2会出现差异——两种方式下,随机数的生成路径完全不同,最终导致数据生成、模型训练、数据集划分的结果都不一样。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 19:12:18