Python实现-----使用随机梯度算法对高斯核模型进行最小二乘学习法

       

(1)高斯核模型

         

                其中x=[x_1,x_2,...,x_n]为样本。可以看出,核模型的均值c是以x的元素x_j进行计算的。

(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()

结果为:

 

附录:Matlab实现

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

David-Chow

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值