Python实现极限学习机ELM【hpelm库】

举报
府学路18号车神 发表于 2022/03/04 09:03:20 2022/03/04
【摘要】 一直以为没有人做极限学习机的库,知道发现了hpelm库,才发现,针不戳!!!文末Python源代码自取!!! ELM简介在2004年,由南洋理工学院黄广斌教授所提出的极限学习机器(Extreme Learning Machine,ELM)理论可以改善这种情况。最初的极限学习机是对单隐层前馈神经网络(single-hidden layer feed-forward neural network...

一直以为没有人做极限学习机的库,知道发现了hpelm库,才发现,针不戳!!!

文末Python源代码自取!!!

ELM简介

在2004年,由南洋理工学院黄广斌教授所提出的极限学习机器(Extreme Learning Machine,ELM)理论可以改善这种情况。最初的极限学习机是对单隐层前馈神经网络(single-hidden layer feed-forward neural networks,SLFNs)提出的一种新型的学习算法。它随机选取输入权重,并分析以决定网络的输出权重。在这个理论中,这种算法试图在学习速度上提供极限的性能。

ELM的优势

ELM算法和神经网络算法我认为最大的区别在于:ELM不需要进行迭代,而是一次性通过标签计算出最后一层神经元的权重。而神经网络是通过梯度下降的方法,不断的根据loss值更新权重值。

因此ELM算法不适合构造出更深的网络结构,但是减少了计算量,少了机器开销。而DELM相对于ELM加入了正则项的限制,防止过拟合。

ELM原理

ELM是一种新型的快速学习算法,对于单隐层神经网络,ELM 可以随机初始化输入权重和偏置并得到相应的隐节点输出:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

导入库

直接在PyCharm终端输入:

pip install hpelm

在这里插入图片描述

ELM线性回归Regression

以线性回归Regression为例,Python代码如下:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2021/12/27 11:02
# @Author  : 府学路18号车神
# @Email   :yurz_control@163.com
# @File    : elm_regression.py
#Import libraries

import hpelm
from keras.datasets import mnist
from keras.utils import to_categorical
import numpy as np
from numpy import random
from sklearn.metrics import mean_squared_error
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
import time
import matplotlib.pyplot as plt

#Lists to store results
Train_T = []
Test_E  = []

##Load wine testing UCI data data
data = np.genfromtxt('winequality-white.csv', dtype = float, delimiter = ';')

#Delete heading
data = np.delete(data,0,0)

x = data[:,:11]
y = data[:,-1]

#Train test split
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.33,random_state=42)

#===============================================================

def calculateE(y,t):

    #Calculate RMSE
    return mean_squared_error(y, t)


#===============================================================
#Initialization

Lmax = 40
L = 0
E = 0
ExpectedAccuracy = 0

while L < Lmax and E >= ExpectedAccuracy:

    #Increase Node
    L = L + 1
    
    #Calculate Random weights, they are  already addded into model using hpelm library
    w = random.rand(11,L)

    #Initialize model
    model = hpelm.ELM(11,1)
    model.add_neurons(L,'sigm')
    
    start_time = time.time()
    
    #Train model
    model.train(x_train,y_train,'r')
    
    Train_T.append(time.time() - start_time)
    
    #Calculate output weights and intermediate layer
    BL_HL = model.predict(x_test)
    
    #Calculate new EMSE
    E = calculateE(y_test,BL_HL)
    
    Test_E.append(E)
    
    #Print result
    print("Hidden Node",L,"RMSE :",E)
    
#===================================================================

#Find best RMSE
L = Test_E.index(min(Test_E)) + 1

print()
print()
print()
print()

#Define model 
model = hpelm.ELM(11,1)
model.add_neurons(L,'sigm')

start_time = time.time()
model.train(x_train,y_train,'r')
print('Training Time :',time.time() - start_time)

start_time = time.time()
BL_HL = model.predict(x_train) 
print('Testing Time :',time.time() - start_time)

#Calculate training RMSE  
E = calculateE(y_train,BL_HL)
print('Training RMSE :',E)
print('Testing RMSE  :',min(Test_E))

#===================================================================

#Plot Data

plt.subplot(1, 2, 1)    #Generate graph for ANN
plt.plot(range(1,Lmax+1),Test_E)
plt.title('Testing RMSE')
plt.xlabel('Number of Neurons in hidden layer')
plt.ylabel('Testing RMSE')


plt.subplot(1, 2, 2)    #Generate graph for CNN
plt.plot(range(1,Lmax+1),Train_T)
plt.title('Training Time')
plt.xlabel('Number of Neurons in hidden layer')
plt.ylabel('Training Time')


plt.show()

在这里插入图片描述

源代码

源代码及文件在这里:Python极限学习机ELM实现线性回归

链接:https://pan.baidu.com/s/1b3yTQp5El-aNwvOT7vad-A
提取码:yyds

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。