基于深度混合核极限学习机的多变量输入时间序列预测

 0、前言

        深度混合核极限学习机的时间序列预测方法:首先采用多层ELM-AE实现抽象特征提取,然后将提取的抽象特征用来训练一个混合核极限学习机实现分类。深度混合核极限学习机实际上是由多层极限学习机+HKELM构成。

1、理论简介

1.1 ELMAE

 ELMAE与ELM都是三层网络结构,但是ELM-AE 是无监督学习算法 , 其输出与输入一致。

ELMAE的输出权重计算公式如下:

1.2 多层极限学习机ML-ELM

        ML-ELM 使用 ELM-AE 逐层训练,ML-ELM 利用 ELM-AE 训练时,第 i 个隐层的输出和第(i-1)个隐层上的输出的数值关系可用以下公式表示:

1.3 混合核极限学习机(HKELM)

        HKELM的回归预测实现参考这里

1.4  深度混合核极限学习机 

        深度混合核极限学习机首先利用多层ELM-AE( ML-ELM)对输入数据进行逐层抽取从而得到更为有效的特征;基于这些更为抽象的特征,利用核函数计算代替高维空间的内积运算,从而实现将特征映射到更高维空间进行预测,则有利于进一步提高模型预测的精度和泛化性能。深度混合核极限学习机结构如下:

        

2、深度混合核极限学习机用于多变量输入时间序列预测

       多变量输入时间序列预测,指的是输入变量为多个,并且以前几个时刻的输入变量值预测下一时刻的输出变量值。如果输出变量为功率即为功率预测、若是负荷值即为负荷预测。总之替换为自己的数据后,就可以实现时间序列预测。

step=5;%前step个时刻的所有值预测下一个时刻的输出值,构建多变量滚动序列
for i=1:size(data,1)-step
    input(i,:,:)=data(i:i+step-1,:);
    output(i,:)=data(i+step,end);
end
input=input(:,:);

        首先建立多层ELM-AE网络,实现深度特征提取,本博文方法设置的隐含层层数为2,节点数分别为100、50.

%elm-ae的参数
h=[100 ,50];%各隐含层节点数
TF='sig';%ELM-AE激活函数
lambda1=inf;%elm-ae的L2正则化系数

        然后设置顶层HKELM的网络:选定核函数,设置核参数以及核函数的权重占比,如下图所示

%核函数类型1.RBF_kernel 2.lin_kernel 3 poly_kernel 4 wav_kernel
kernel1='RBF_kernel';
kernel2='poly_kernel';

% 第一个核函数的核参数设置  详情看kernel_matrix
if strcmp(kernel1,'RBF_kernel')
    ker1_para=1; %rbf有一个核参数
elseif strcmp(kernel1,'lin_kernel')
    ker1_para=[]; %线性没有核参数
elseif strcmp(kernel1,'poly_kernel')
    ker1_para=[1,1]; %多项式有2个核参数
elseif strcmp(kernel1,'wav_kernel')
    ker1_para=[1,1,1]; %小波核有3个核参数
end
% 第二个核函数的核参数设置  详情看kernel_matrix
if strcmp(kernel2,'RBF_kernel')
    ker2_para=1; %rbf有一个核参数
elseif strcmp(kernel2,'lin_kernel')
    ker2_para=[]; %线性没有核参数
elseif strcmp(kernel2,'poly_kernel')
    ker2_para=[1,1]; %多项式有2个核参数
elseif strcmp(kernel2,'wav_kernel')
    ker2_para=[1,1,1]; %小波核有3个核参数
end

预测效果:

3、黏菌优化深度混合核极限学习机用于多变量输入时间序列预测

        考虑到深度混合核极限学习机最后预测精度受核参数影响,因此采用黏菌优化算法进行优化,适应度函数为预测精度。

        黏菌优化算法的函数极值寻优效果展示:

 4、效果对比

       

 可以看出优化后的深度混合核极限学习机与真实值更为接近,预测精度更高。

以下是示例代码,其中使用了sklearn库中的PCA、NMF和KMeans模型,以及自己实现的ELM_AE模型。代码中使用了IRIS数据集作为示例进行训练和验证。 ```python import numpy as np from sklearn.decomposition import PCA, NMF from sklearn.cluster import KMeans from sklearn.metrics import accuracy_score from sklearn.datasets import load_iris from sklearn.preprocessing import LabelEncoder, MinMaxScaler from elm_autoencoder import ELM_AE # 自己实现的ELM_AE模型 # 加载IRIS数据集 iris = load_iris() X, y = iris.data, iris.target # 数据预处理 scaler = MinMaxScaler() X_scaled = scaler.fit_transform(X) le = LabelEncoder() y_encoded = le.fit_transform(y) # PCA降维 pca = PCA(n_components=2) X_pca = pca.fit_transform(X_scaled) # NMF降维 nmf = NMF(n_components=2) X_nmf = nmf.fit_transform(X_scaled) # ELM-AE降维 elm_autoencoder = ELM_AE(n_input=X_scaled.shape[1], n_hidden=2) elm_autoencoder.fit(X_scaled) X_elm_ae = elm_autoencoder.encode(X_scaled) # 聚类 kmeans = KMeans(n_clusters=3) # PCA聚类 kmeans.fit(X_pca) y_pca_pred = kmeans.labels_ # NMF聚类 kmeans.fit(X_nmf) y_nmf_pred = kmeans.labels_ # ELM-AE聚类 kmeans.fit(X_elm_ae) y_elm_ae_pred = kmeans.labels_ # 计算聚类精度 pca_acc = accuracy_score(y_encoded, y_pca_pred) nmf_acc = accuracy_score(y_encoded, y_nmf_pred) elm_ae_acc = accuracy_score(y_encoded, y_elm_ae_pred) # 输出聚类精度和训练时间 print(f"PCA聚类精度:{pca_acc:.3f},训练时间:{pca.__dict__['time_']:.3f}秒") print(f"NMF聚类精度:{nmf_acc:.3f},训练时间:{nmf.__dict__['n_iter_']:.0f}次迭代") print(f"ELM-AE聚类精度:{elm_ae_acc:.3f},训练时间:{elm_autoencoder.__dict__['train_time_']:.3f}秒") # 制作表格 table_data = [["PCA", pca_acc, pca.__dict__['time_']], ["NMF", nmf_acc, nmf.__dict__['n_iter_']], ["ELM-AE", elm_ae_acc, elm_autoencoder.__dict__['train_time_']]] table_header = ["模型", "聚类精度", "训练时间"] print(tabulate(table_data, headers=table_header)) ``` 关于IRIS、USPS、ORL10P数据集的详细训练和验证过程,由于数据集不同,需要根据实际情况进行相应的处理。需要注意的是,使用NMF进行降维时,输入数据应为非负数,因此需要进行相应的处理。同时,对于自己实现的ELM_AE模型,需要根据具体实现进行相应修改。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值