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

Sklearn SVR模型for循环运行结果一致的问题解决求助

解决Sklearn SVR循环内训练结果一致的问题

我来帮你搞定这个问题——你遇到的情况其实是sklearn模型随机性控制的典型场景,咱们一步步拆解:

为什么会出现这种差异?

当你单独多次运行脚本时,每次程序启动都会重新初始化全局随机数生成器,SVR训练过程中涉及随机选择的步骤(比如SMO算法的工作集挑选、多最优解场景下的迭代路径选择)会产生不同结果。但在for循环里,所有迭代都在同一个程序进程中,若不给每个SVR实例指定不同的随机种子,它们会复用相同的随机序列,最终导致训练结果完全一致。

解决方案(无需修改max_iter)

只需要在每次循环实例化SVR时,给random_state参数传入一个变化的值即可。最简单的方式就是用循环变量作为随机种子,也可以用随机数生成器生成更灵活的种子:

方案1:用循环变量作为随机种子

from sklearn.svm import SVR
from sklearn.metrics import mean_absolute_error  # 补充导入缺失的依赖

Max_iter = 10
for l in range(0, Max_iter):
    # 每次循环传入不同的random_state
    SVRGWO = SVR(kernel='rbf', gamma=0.032, C=16187.696941074802, random_state=l)
    SVRGWO.fit(X_train, y_train)
    y_preda = SVRGWO.predict(X_test)
    MAEValue1 = mean_absolute_error(y_test, y_preda, multioutput='uniform_average')
    print(MAEValue1)

方案2:用随机数生成器生成种子

如果想要更“随机”的序列,可提前生成一组不重复的随机种子:

import numpy as np
from sklearn.svm import SVR
from sklearn.metrics import mean_absolute_error

Max_iter = 10
# 提前生成一组随机种子
seeds = np.random.randint(0, 10000, size=Max_iter)
for l in range(0, Max_iter):
    SVRGWO = SVR(kernel='rbf', gamma=0.032, C=16187.696941074802, random_state=seeds[l])
    SVRGWO.fit(X_train, y_train)
    y_preda = SVRGWO.predict(X_test)
    MAEValue1 = mean_absolute_error(y_test, y_preda, multioutput='uniform_average')
    print(MAEValue1)

补充说明

  • 这个方法完全不需要修改SVR的max_iter参数,符合你的要求;
  • random_state会固定SVR训练中的随机行为,不同种子会带来不同的训练路径,从而产生不同的模型和预测结果;
  • 若后续需要复现某次循环的结果,只需记录对应的random_state值即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:01:21