fit a complex function using 101 RBF basis functions with Linear Regression

import numpy as np
import matplotlib.pyplot as plt


def rbf_tut1_q3(xx, kk, hh):
    """Evaluate RBF kk with bandwidth hh on points xx (shape N,)"""
    center = ((kk - 51) * hh) / np.sqrt(2)
    phi = np.exp((-(xx - center) ** 2) / hh ** 2)
    return phi  # shape (N,)


N = 10
N_real= 1000
K = 101
kks = np.arange(1, K+1, 1)
# print(kks)
hh = 0.2
xx = np.arange(-1, 1, 2 / N)
# yy = np.arange(1, -1, 2 / N)
yy = xx**7+xx**5+xx*3+xx

# real values
xxx = np.arange(-1, 1, 2 / N_real)
yyy = xxx**7+xxx**5+xxx*3+xxx

for kk in kks:
    inputs = rbf_tut1_q3(xx, kk, hh)
# A = np.vstack([inputs, np.ones(len(inputs))]).T
X = []
for i in range(K):
    X.append(rbf_tut1_q3(xx, kks[i], hh))
X = np.array(X)
X = X.T

print(X.shape)
# print(np.linalg.lstsq(X, yy, rcond=None))
W = np.linalg.lstsq(X, yy, rcond=None)[0]
#print(W)

# plt.plot(xx, rbf_tut1_q3(xx, kks[20], hh)+rbf_tut1_q3(xx, kks[30], hh)+rbf_tut1_q3(xx, kks[40] , hh))
print(np.matmul(X, W).shape)
plt.plot(xxx, yyy, c = 'r')
plt.plot(xx, np.matmul(X, W), c='y')
plt.scatter(xx, yy, marker = 'o')


plt.show()
# plt.clf()
# plt.plot(xx, W*xx)
# plt.show()

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值