103人阅读 评论(0)

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

2014-4-24阅读10858 评论23

# 一、极限学习机的概念

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

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

# 二、极限学习机的原理

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

(选自黄广斌老师的PPT)

$\sum_{i=1}^{L}\beta&space;_ig\left&space;(&space;W_i\cdot&space;X_j+b_i&space;\right&space;)=o_j,\;&space;j=1,\cdots,N$

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

$\sum_{j=1}^{N}\left&space;\|&space;o_j-t_j&space;\right&space;\|=0$

$\sum_{i=1}^{L}\beta&space;_ig\left&space;(W_i\cdot&space;X&space;_j+b&space;_i\right&space;)=t&space;_j,\;&space;j=1,\cdots,N$

$H\beta&space;=T$

$H\left&space;(&space;W_1,\cdots,W_L,b_1,\cdots,b_L,X_1,\cdots,X_L&space;\right&space;)$

$=&space;\begin{bmatrix}&space;g\left&space;(&space;W_1\cdot&space;X_1+b_1&space;\right&space;)&space;&&space;\cdots&space;&&space;g\left&space;(&space;W_L\cdot&space;X_1+b_L&space;\right&space;)\\&space;\vdots&space;&&space;\cdots&space;&&space;\vdots\\&space;g\left&space;(&space;W_1\cdot&space;X_N+b_1&space;\right&space;)&space;&&space;\cdots&space;&&space;g\left&space;(&space;W_L\cdot&space;X_N+b_L&space;\right&space;)&space;\end{bmatrix}_{N\times L}$

$\beta&space;=\begin{bmatrix}&space;\beta^{T}&space;_1\\&space;\vdots&space;\\&space;\beta^{T}&space;_L&space;\end{bmatrix}_{L\times&space;m}$$T&space;=\begin{bmatrix}&space;T^{T}&space;_1\\&space;\vdots&space;\\&space;T^{T}&space;_N&space;\end{bmatrix}_{N\times&space;m}$

$\left&space;\|&space;H\left&space;(&space;\hat{W_i},\hat{b_i}&space;\right&space;)&space;\hat{\beta&space;_i}-T\right&space;\|=\underset{W,b,\beta}{min}&space;\left&space;\|&space;H\left&space;(&space;W_i,b_i\right&space;)\beta_i-T&space;\right&space;\|$

$E=\sum_{j=1}^{N}\left&space;(&space;\sum_{i=1}^{L}\beta_i&space;g\left&space;(&space;W_i\cdot&space;X_j&space;+&space;b_i&space;\right&space;)-t_j&space;\right&space;)^2$

$\hat{\beta}=H^{\dagger&space;}T$

# 三、实验

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

$errorRate=\frac{NumError}{NumAll}$

MATLAB代码

%% 主函数，二分类问题

%导入数据集

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


1
0

* 以上用户言论只代表其个人观点，不代表CSDN网站的观点或立场
个人资料
• 访问：5723次
• 积分：145
• 等级：
• 排名：千里之外
• 原创：8篇
• 转载：6篇
• 译文：0篇
• 评论：0条
文章存档
评论排行