超限學習機(ExtremeLearningMachine,ELM)
阿新 • • 發佈:2019-02-08
超限學習機
樣本空間為N個樣本,n個特徵的矩陣。
進行擴充套件後令:
即:
其中為元素為1的行向量,表示偏置。
構建隨機矩陣
若W中的元素都是取自一個連續分佈,啟用函式f(X)為一個無窮連續可導的非多項式函式,則矩陣:
是一個依概率1為可逆的矩陣。這樣隱層權矩陣是不需要學習的,只需要學習從隱層到輸出層的權矩陣, 即為超限學習機的模型,其中w為一個固定的隨機矩陣,是通過計算得到的引數(也是該模型中唯一的引數),如果取實際輸出等於期望輸出,這是一個求逆矩陣或M-P廣義逆矩陣的過程。對於權矩陣行數小於樣本數的情況也採用相同的方法來處理。即:
其中:
則:
其中表示的M-P廣義逆。
正則化求權矩陣\beta ,對式子
轉換為:
由於是半正定矩陣,可以進行正則化,即將修改為後,即:
其中是一個常數,而是一個單位矩陣,從而有
正則化優勢在於在沒有損失精度的條件下,計算速度提高很多。
為了進行二維繪圖,我們將n定為1,即只有一個特徵。
import numpy as np
import matplotlib.pyplot as plt
x_num=100
w_num=16
x=np.linspace(-20,20,x_num)
y=np.sin(x)/x
w = np.random.rand(w_num, 2) - 0.5
def train(x,y,w):
N = np.size(x, axis=0)
x = np.reshape(x, (1, N))
y = np.reshape(y, (1, N))
ones = np.ones((1, N))
x = np.vstack((x, ones))
g = np.dot(w, x)
h = 1 / (1 + np.exp(-g))
hn = np.linalg.pinv(h)
beta = np.dot(y, hn)
return beta
x_test_num=100
x_test=np.linspace(-10,10,x_test_num)
def predict(x_test,beta,w):
M=np.size(x_test,axis=0)
x_test=np.reshape(x_test,(1,M))
ones=np.ones((1,M))
x_test=np.vstack((x_test,ones))
g=np.dot(w,x_test)
h=1/(1+np.exp(-g))
y_pre=np.dot(beta,h)
return y_pre
beta=train(x,y,w)
y_pre=predict(x_test,beta,w)
print(y_pre)
plt.plot(x,y,'b')
plt.plot(x_test,y_pre[0],'r')
plt.show()
需要注意的是w在訓練和預測中為同一個。