极限学习机Python的代码实现
极限学习机Python的代码实现
BY:YANG LIU
import numpy as np——载⼊numpy库
import matplotlib.pyplot as plt——载⼊画图库
def sigmoid(a,b,x):——定义sigmoid激活函数
return 1.0/(p(-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=al(0,1,(n,L))——随机⽣成nL的a,n输⼊层的个数,L表⽰隐含层神经元的个数
b=al(0,1,L)——随机⽣成L个b
H=sigmoid(a,b,X)——计算激励函数
HH=H.T.dot(H)——HH表⽰H的转置矩阵和矩阵H的乘积,(.T)表⽰矩阵的转置
linspace函数pythonHT=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为2150的矩阵
T=np.sin(x1x2/(2np.pi))+al(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()——展⽰所做图形
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论