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

如何让极限学习机(ELM)每次运行得到固定结果?

ELM模型每次运行结果不一样?看这里

1. 这种情况正常吗?

太正常了!这就是ELM的固有特性——极限学习机的输入层到隐藏层的权重、偏置是随机初始化的,而且这些参数不用像神经网络那样迭代调优,只靠求解伪逆得到输出层的权重。每次运行时随机出来的初始参数不一样,训练出的模型自然有差异,预测结果和RMSE也就跟着变了。

2. 怎么让结果固定下来?

核心就是把随机初始化的“种子”固定住,让每次生成的初始权重和偏置完全一样。有两种简单方法:

方法一:给ELM类加个随机种子参数

打开你使用的elm.py文件,修改ELM类的初始化和拟合逻辑,添加随机种子控制:

import numpy as np

class ELM:
    def __init__(self, hid_num, random_state=None):
        self.hid_num = hid_num
        self.random_state = random_state  # 新增随机种子参数
    
    def fit(self, X, y):
        # 生成权重前先固定随机种子
        if self.random_state is not None:
            np.random.seed(self.random_state)
        # 原有生成权重和偏置的代码示例
        self.input_weight = np.random.randn(X.shape[1], self.hid_num)
        self.bias = np.random.randn(self.hid_num)
        # 后续拟合逻辑保持不变...

修改后,创建模型时指定种子值即可:

model = ELM(hid_num=10, random_state=42).fit(X_train, y_train)

方法二:全局设置numpy随机种子

不想修改ELM源码的话,直接在你的训练脚本最开头添加一行,固定numpy的随机种子:

import numpy as np
np.random.seed(42)  # 种子值可自定义,比如123、42都可以

# 后续原有代码照常执行
y = df['rain'].copy()
X= df[['lag1']]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=200, shuffle=False)
model = ELM(hid_num=10).fit(X_train, y_train)
prediction = model.predict(X_test)

这样所有numpy生成的随机数都会基于同一个种子,ELM的初始参数就固定了,最终预测结果和RMSE也就不会再变。

如果你的ELM实现还用到了Python原生random模块,记得额外添加random.seed(42),不过大部分ELM代码都是基于numpy随机函数,一般不需要这一步。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 10:55:17