我创建了一个函数来计算对数函数的参数。
我的目标是预测遵循对数函数的数据点的未来结果。但最重要的是,我的算法比整个数据点更适合最后的结果,因为预测才是最重要的。目前,我使用均方误差来优化我的参数,但是我不知道如何对其进行加权,因为它需要我最近的数据点比第一个数据点更重要。
Y=C* log( a*x+b)
你可以在下面的图像中看到橙色曲线是我所拥有的数据,蓝线是我的拟合线。我们看到这条线在末端有点偏离线,我想避免这样做,以改进我的函数的预测。
我的问题有两个:
发布于 2019-02-06 20:17:12
通常,在非线性最小二乘中,y值的逆值作为权重,基本上消除了离群值,你可以通过增加一个函数来计算基于x位置的权重来扩展这个概念。
def xWeightA(x):
container=[]
for k in range(len(x)):
if k<int(0.9*len(x)):
container.append(1)
else:
container.append(1.2)
return container
def approximate_log_function(x, y):
C = np.arange(0.01, 1, step = 0.01)
a = np.arange(0.01, 1, step = 0.01)
b = np.arange(0.01, 1, step = 0.01)
min_mse = 9999999999
parameters = [0, 0, 0]
LocalWeight=xWeightA(x)
for i in np.array(np.meshgrid(C, a, b)).T.reshape(-1, 3):
y_estimation = LocalWeight*i[0] * np.log(i[1] * np.array(x) + i[2])
mse = mean_squared_error(y, y_estimation)
if mse < min_mse:
min_mse = mse
parameters = [i[0], i[1], i[2]]
return (min_mse, parameters)而且,看起来您正在通过完整的目标函数进行评估,这使得代码需要花费大量的时间来找到最小值(至少在我的机器上是这样)。您可以按照建议使用curve_fit或polyfit,但是如果目标是生成优化器,请尝试在网格中添加一个早期中断或随机搜索。希望它能帮上忙
https://stackoverflow.com/questions/54558936
复制相似问题