RVFLNN随机向量函数链神经网络:单变量时间序列预测的快速高精度模型
RVFLNNRandom vector functional link neural network 随机向量函数链神经网络 单变量时间序列预测 自带单变量数据 python 代码模型部分是手撸的当然不是我 数据格式为csv可以替换成自己的 这个模型也不是最近的模型但是比较小众用的也比较少这也算是一个有点特点就是运算快2万多条数据5秒多就完事了关键是精度还不低真是气人有评价指标为证这玩意儿叫RVFLNN名字长得像密码实际是个快得离谱的神经网。别人还在等GPU跑结果它用CPU就能把两万条数据五秒搞定。咱们今天拿单变量时间序列开刀手把手用Python搓一个——虽然模型代码是抄的但保证你能看懂怎么运作的。先看数据长啥样CSV里就两列时间戳和数值。咱们用pandas三行搞定读取import pandas as pd data pd.read_csv(your_data.csv, parse_dates[date]) raw_values data[value].values.reshape(-1,1)注意这里reshape成二维数组后面预处理才不会报错。数据标准化用sklearn的MinMaxScaler但别急着import——这步有个坑时序数据不能随机shuffle必须按顺序划分训练测试集。模型核心在隐藏层的骚操作。看这段权重初始化import numpy as np def init_weights(n_hidden, n_features): np.random.seed(42) W np.random.uniform(-1, 1, (n_features, n_hidden)) B np.random.uniform(-1, 1, (1, n_hidden)) return W, B这里W是输入到隐藏层的权重B是偏置。注意范围控制在[-1,1]这是RVFLNN的玄学之一。随机生成的权重固定了种子保证结果可复现实际用的时候可以去掉seed。隐藏层计算用这个函数def hidden_layer(X, W, B): H np.dot(X, W) B return np.tanh(H) # 双曲正切激活为什么要用tanh试过Relu效果反而差可能因为随机权重初始化需要对称的激活函数。这个发现过程挺有意思当初试错时差点以为模型废了。RVFLNNRandom vector functional link neural network 随机向量函数链神经网络 单变量时间序列预测 自带单变量数据 python 代码模型部分是手撸的当然不是我 数据格式为csv可以替换成自己的 这个模型也不是最近的模型但是比较小众用的也比较少这也算是一个有点特点就是运算快2万多条数据5秒多就完事了关键是精度还不低真是气人有评价指标为证训练阶段才是精髓所在def train(X_train, y_train, W, B): H hidden_layer(X_train, W, B) H_aug np.concatenate([H, X_train], axis1) # 原特征隐藏层输出 pseudo_inv np.linalg.pinv(H_aug) beta np.dot(pseudo_inv, y_train) return beta这里把原始输入和隐藏层输出拼接直接用伪逆矩阵求解输出权重。传统神经网络的反向传播在这里被替换成矩阵运算速度直接起飞。注意伪逆计算可能引发数值不稳定但实测在标准化数据上没问题。预测的时候更简单def predict(X, W, B, beta): H hidden_layer(X, W, B) H_aug np.concatenate([H, X], axis1) return np.dot(H_aug, beta)整个前向传播就两次矩阵乘法比传统DNN少了至少十倍的运算量。实际跑分时记得反标准化把预测值还原回原始量纲。效果验证部分咱们上三个指标from sklearn.metrics import mean_absolute_error, mean_squared_error mae mean_absolute_error(y_true, y_pred) rmse np.sqrt(mean_squared_error(y_true, y_pred)) smape 200 * np.mean(np.abs(y_pred - y_true) / (np.abs(y_pred) np.abs(y_true)))重点看SMAPE这个对称平均绝对百分比误差对零值不敏感。实测某电力负荷数据集上MAE能压到1.5%左右跟LSTM打得有来有回但训练时间只有后者的1/100。最后说个坑隐藏层节点数别贪多。超过200个节点后精度提升微乎其微但计算时间线性增长。经验公式是取序列周期长度的2倍比如季度数据用8个节点刚刚好。代码完整跑起来记得控制台加个进度条不然五秒太快了你可能以为程序卡住了。这种上古论文里挖出来的模型时不时就能给深度学习调参侠来个暴击——谁说老算法不能打
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2418919.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!