Python实现-----使用随机梯度算法对高斯核模型进行最小二乘学习法
(1)高斯核模型
其中为样本。可以看出,核模型的均值
是以
的元素
进行计算的。
(2)随机梯度下降法
(3)python 代码实现
import numpy as np
import matplotlib.pyplot as plt
import math
n=50
N=1000
x=np.linspace(-3,3,n)
X=np.linspace(-3,3,N)
def fun0(x):
pix=math.pi*x
return np.sin(pix)/pix+0.1*pix+0.1*np.random.rand()
y=np.array(list(map(fun0,x)))
hh=2*pow(0.3,2)
t0=np.random.randn(int(n),)
alpha=0.1
xs=x[0:int(n)]
def K(xi):
K=[]
for a in range(len(xs)):
K.append(math.exp(-(xi-xs[a])**2/hh))
return np.array(K)
for o in range(1000):
i=math.ceil(np.random.rand()*(n-1))
k=K(x[i])
t=t0-alpha*k*((np.dot(k,t0.reshape((-1,1))))-y[i])
if np.linalg.norm(t-t0)<0.000001:
break
t0 = t
def fun(Xi):
return K(Xi).dot(t0.reshape((-1,1)))
Y=np.array(list(map(fun,X))).reshape((-1,))
error=np.array(list(map(fun,x))).reshape((-1,))-y
plt.plot(x,y,'g.') #绘制样本点
plt.plot(X,Y,'r-') #绘制拟合曲线
plt.plot(x,error,'b-') #绘制样本点拟合误差
plt.show()
结果为: