极限学习机Python的代码实现

极限学习机Python的代码实现

BY:YANG LIU

import numpy as np——载入numpy库
import matplotlib.pyplot as plt——载入画图库
def sigmoid(a,b,x):——定义sigmoid激活函数
return 1.0/(1+np.exp(-1.0
(x.dot(a)+b)))——返回1/(1+e^(-ax+b)),其中a为输入层到隐含层的权重,b是隐含层的偏置
def ELM_prototype(X,T,C,n,L):——定义极限学习机函数,X表示样本输入,T表示训练样本的输出,n表示输入层有多少个,L表示输出层与多少个,C为岭回归正则化时所填项系数的倒数
a=np.random.normal(0,1,(n,L))——随机生成n
L的a,n输入层的个数,L表示隐含层神经元的个数
b=np.random.normal(0,1,L)——随机生成L个b
H=sigmoid(a,b,X)——计算激励函数
HH=H.T.dot(H)——HH表示H的转置矩阵和矩阵H的乘积,(.T)表示矩阵的转置
HT=H.T.dot(T)——表示H的转置和矩阵T的乘积
beta=np.linalg.pinv(HH+np.identity(L)/C).dot(HT)——用最小二乘法原理求解beta,此处为特殊的最小二乘法——岭回归问题,在最小二乘法中,因为A的转置和A的乘积不一定存在逆矩阵,所以在其基础上增加一个方阵,使其一定有逆矩阵,转换成在这里插入图片描**述
**形式,再进行beta的求解,np.linalg.pinv函数表示求解广义逆矩阵,np.identity表示生成单位方阵。
Fl=H.dot(beta)——得到beta后求解输出
return beta,Fl——函数最后返回beta和输出层的值
x1=np.linspace(1,20,150)——生成150个数,等差排列,范围属于(1,20)
x2=np.linspace(-5,5,150)——生成150个数,等差排列,范围属于(-5,5)
X=np.vstack([x1,x2]).T——得到输入样本X,np.vstack函数表示把x1和x2合成一个矩阵,X为2
150的矩阵
T=np.sin(x1
x2/(2np.pi))+np.random.normal(0,0.2,150)——生成实际输出矩阵T为150矩阵
beta,Fl=ELM_prototype(X,T,C=1e5,n=2,L=100)——通过机器学习机训练得到beta和其输出层拟合得数据
plt.plot(x1,T,lw=1.5,label=‘Training goal’)——绘制原始曲线,LW表线宽,label表标签
plt.plot(x1,Fl,lw=3,label=‘ELM output’)——绘制拟合曲线
plt.legend()——显示图例
plt.show()——展示所做图形

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值