专栏首页null的专栏简单易学的机器学习算法——极限学习机(ELM)

简单易学的机器学习算法——极限学习机(ELM)

一、极限学习机的概念

       极限学习机(Extreme Learning Machine) ELM,是由黄广斌提出来的求解单隐层神经网络的算法。

ELM最大的特点是对于传统的神经网络,尤其是单隐层前馈神经网络(SLFNs),在保证学习精度的前提下比传统的学习算法速度更快。

二、极限学习机的原理

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

(选自黄广斌老师的PPT)

对于一个单隐层神经网络(见Figure 1),假设有

个任意的样本

,其中

。对于一个有

个隐层节点的单隐层神经网络可以表示为

其中,

为激活函数,

为输入权重,

为输出权重,

是第

个隐层单元的偏置。

表示

的内积。

       单隐层神经网络学习的目标是使得输出的误差最小,可以表示为

即存在

,使得

可以矩阵表示为

其中,

是隐层节点的输出,

为输出权重,

为期望输出。

为了能够训练单隐层神经网络,我们希望得到

,使得

其中,

,这等价于最小化损失函数

传统的一些基于梯度下降法的算法,可以用来求解这样的问题,但是基本的基于梯度的学习算法需要在迭代的过程中调整所有参数。而在ELM算法中, 一旦输入权重

和隐层的偏置

被随机确定,隐层的输出矩阵

就被唯一确定。训练单隐层神经网络可以转化为求解一个线性系统

。并且输出权重

可以被确定

其中,

是矩阵

的Moore-Penrose广义逆。且可证明求得的解

的范数是最小的并且唯一。

三、实验

    我们使用《简单易学的机器学习算法——Logistic回归》中的实验数据。

原始数据集

我们采用统计错误率的方式来评价实验的效果,其中错误率公式为:

对于这样一个简单的问题,

MATLAB代码

主程序

%% 主函数,二分类问题

%导入数据集
A = load('testSet.txt');

data = A(:,1:2);%特征
label = A(:,3);%标签

[N,n] = size(data);

L = 100;%隐层节点个数
m = 2;%要分的类别数

%--初始化权重和偏置矩阵
W = rand(n,L)*2-1;
b_1 = rand(1,L);
ind = ones(N,1);
b = b_1(ind,:);%扩充成N*L的矩阵

tempH = data*W+b;
H = g(tempH);%得到H

%对输出做处理
temp_T=zeros(N,m);
for i = 1:N
    if label(i,:) == 0
        temp_T(i,1) = 1;
    else 
        temp_T(i,2) = 1;
    end    
end
T = temp_T*2-1;

outputWeight = pinv(H)*T;

%--画出图形
x_1 = data(:,1);  
x_2 = data(:,2);  
hold on  
for i = 1 : N  
    if label(i,:) == 0  
        plot(x_1(i,:),x_2(i,:),'.g');  
    else  
        plot(x_1(i,:),x_2(i,:),'.r');  
    end  
end

output = H * outputWeight;
%---计算错误率
tempCorrect=0;
for i = 1:N
    [maxNum,index] = max(output(i,:));
    index = index-1;
    if index == label(i,:);
        tempCorrect = tempCorrect+1;
    end
end

errorRate = 1-tempCorrect./N;

激活函数

function [ H ] = g( X )
    H = 1 ./ (1 + exp(-X));
end

黄老师提供的极限学习机的代码:点击打开链接

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 优化算法——拟牛顿法之BFGS算法

    一、BFGS算法简介 BFGS算法是使用较多的一种拟牛顿方法,是由Broyden,Fletcher,Goldfarb,Shanno四个人分别提出的,故称为BF...

    zhaozhiyong
  • hive学习笔记——Hive表中数据的导入和导出

        在创建数据表的过程中,Hive表创建完成后,需要将一些数据导入到Hive表中,或是将Hive表中的数据导出。

    zhaozhiyong
  • hive学习笔记——Hive表中数据的导入和导出

        在创建数据表的过程中,Hive表创建完成后,需要将一些数据导入到Hive表中,或是将Hive表中的数据导出。 一、将数据导入Hive表 Hive表的数...

    zhaozhiyong
  • Matplotlib绘制六种可视化图表,值得收藏

    可视化图表,有相当多种,但常见的也就下面几种,其他比较复杂一点,大都也是基于如下几种进行组合,变换出来的。对于初学者来说,很容易被这官网上众多的图表类型给吓着了...

    double
  • Vivado级联Modelsim仿真Re-launch问题

    NingHeChuan
  • 程序员面试常见错误 看你中枪了没

    无论做什么事,我们都有第一次的时候。面试也不例外,一次表现优秀的面试对于自己的求职是很有帮助的。不仅仅是在面试官心目中留下好的印象,同时也对自己谈及薪资要求时候...

    企鹅号小编
  • 数据分析了数千个程序猿求职案例,我们发现...

    大数据文摘
  • C语言中调用C++

    程序手艺人
  • Python后端架构演进

    来腾讯之前在前公司做了3年的后端开发,经历一款SaaS产品从0到10(还没有到100, 哈哈哈)的过程,3年间后端的架构逐步演变,在微服务的实践过程中遇到的问题...

    Java知音
  • OSPF-5种报文、3个阶段、3张表

    在理解OSPF各种报文之前,需先清楚OSPF协议,通过下面图例帮助理解(口诀:5种报文、3个阶段、3张表)

    py3study

扫码关注云+社区

领取腾讯云代金券