gpt4 book ai didi

python - 对数函数逼近算法

转载 作者:太空宇宙 更新时间:2023-11-03 21:17:42 25 4
gpt4 key购买 nike

我创建了一个函数来计算对数函数的参数。

我的目标是预测遵循对数函数的数据点的 future 结果。但最重要的是,我的算法比整个数据点更适合最后的结果,因为预测才是最重要的。我目前使用均方误差来优化我的参数,但我不知道如何对其进行加权,因为它使我最近的数据点比第一个数据点更重要。

  • 这是我的等式:

y = C * log(a * x + b)

  • 这是我的代码:

    import numpy as np
    from sklearn.metrics import mean_squared_error

    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]

    for i in np.array(np.meshgrid(C, a, b)).T.reshape(-1, 3):

    y_estimation = 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)

您可以在下图中看到,橙色曲线是我拥有的数据,蓝色线是我的拟合线。我们看到该线稍微远离末端的线,我想避免这种情况以改进我的函数的预测。

logarithm function graph

我的问题有两个:

  • 这实际上是最好的方法还是最好使用其他函数(例如指数衰减的递增形式)? (y = C ( 1 - e-kt ), k > 0)

  • 如何更改我的代码,以便最后一个值比第一个值更重要。

最佳答案

通常,在非线性最小二乘中,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,但如果目标是生成优化器,请尝试添加早期中断或通过网格进行随机搜索。希望对您有帮助

关于python - 对数函数逼近算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54558936/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com