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
相关产品推荐
相关产品推荐

