假设我有 x,y 数据由带有一些附加参数 (a,b,c) 的函数连接:
现在给定一组数据点(x 和 y),我想确定 a、b、c。如果我知道模型,这是一个简单的曲线拟合问题。如果我没有怎么办但是我确实有很多 y 具有相应 a、b、c 值的示例?(或者计算起来很昂贵,我想要一种更好的方法来猜测正确的参数而无需暴力曲线拟合。)简单的机器学习技术(例如来自 sklearn)是否可以解决这个问题,或者这需要更像深度学习的东西吗?
这是一个生成我正在谈论的数据类型的示例:
import numpy as np
import matplotlib.pyplot as plt
Nr = 2000
Nx = 100
x = np.linspace(0,1,Nx)
f1 = lambda x, a, b, c : a*np.exp( -(x-b)**2/c**2) # An example function
f2 = lambda x, a, b, c : a*np.sin( x*b + c) # Another example function
prange1 = np.array([[0,1],[0,1],[0,.5]])
prange2 = np.array([[0,1],[0,Nx/2.0],[0,np.pi*2]])
#f, prange = f1, prange1
f, prange = f2, prange2
data = np.zeros((Nr,Nx))
parms = np.zeros((Nr,3))
for i in range(Nr) :
a,b,c = np.random.rand(3)*(prange[:,1]-prange[:,0])+prange[:,0]
parms[i] = a,b,c
data[i] = f(x,a,b,c) + (np.random.rand(Nx)-.5)*.2*a
plt.figure(1)
plt.clf()
for i in range(3) :
plt.title('First few rows in dataset')
plt.plot(x,data[i],'.')
plt.plot(x,f(x,*parms[i]))
给定data,你能否在一半数据集上训练模型,然后从另一半确定 a、b、c 值?
我一直在阅读一些 sklearn 教程,但我不确定我见过的任何模型都适用于这类问题。对于高斯示例,我可以通过提取与参数相关的特征(例如,第一和第二时刻、%5 和 .%95 百分位数等)来实现,并将它们输入到 ML 模型中,这样可以得到很好的结果,但我想要可以更普遍地工作而无需假设任何事情的东西或其参数。


