gpt4 book ai didi

python - Scipy - 优化。找出两个变量之间的比率

转载 作者:太空宇宙 更新时间:2023-11-04 10:37:33 24 4
gpt4 key购买 nike

我有 3 个变量;市场价格、营业时间、年龄。

使用优化,我找到了每个变量与 Market_Price 之间的关系。

数据:

hours =  [1000,  10000,  11000,  11000,  15000,  18000,  37000,  24000,  28000,  28000,  42000,  46000,  50000,  34000,  34000,  46000,  50000,  56000,  64000,  64000,  65000,  80000,  81000,  81000,  44000,  49000,  76000,  76000,  89000,  38000,  80000,  69000,  46000,  47000,  57000,  72000,  77000,  68000]

market_Price = [30945, 28974, 27989, 27989, 36008, 24780, 22980, 23997, 25957, 27847, 36000, 25588, 23980, 25990, 25990, 28995, 26770, 26488, 24988, 24988, 17574, 12995, 19788, 20488, 19980, 24978, 16000, 16400, 18988, 19980, 18488, 16988, 15000, 15000, 16998, 17499, 15780, 8400]

age = [2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 6, 6, 7, 8, 8, 8, 8, 8, 13,]

我得出的关系是:

上市时间_price = log(h)*h1+h2,

到市场价格的年龄 = log(a)*a1+a2

使用 Scipy 的优化曲线拟合找到 h1、h2、a1、a2。

现在我想将所有 3 个合并到一个计算中,据此我可以根据年龄和时间来确定市场价格。

到目前为止,我一直采用的方法是通过确定哪个组合具有最小的标准偏差来找到两者之间的比率。

std_divs = []
for ratio in ratios:
n = 0
price_difference_final = []
while n < len(prices):
predicted_price = (log(h)*h1+h1)*ratio + (log(a)*a1+a1)*(1-ratio)
price_difference_final.append(prices[n] - predicted_price)
n += 1
data = np.array(price_difference_final)
std_divs.append(np.std(data))
std_div = min(std_divs)
optimum_ratio = ratios[std_divs.index(min(std_divs))]

如您所见,我是通过蛮力完成的,这不是一个优雅的解决方案。

另外,现在我发现3之间的关系不能用单一的比例来表达,相反,该比率需要滑动。随着年份的增加,小时数/年龄比率下降,年龄在市场价格中的权重越来越大。

不幸的是,我无法使用 Scipy 的曲线拟合来实现它,因为它只接受一对数组。

有没有想过如何最好地实现这一点?

最佳答案

可以用 more than one dimension 创建一个数组,在这种情况下,您可以将 hoursage 数据传递给 curve_fit。这样的例子可能是:

import numpy as np
from scipy.optimize import curve_fit

hours = [1000, 10000, 11000, 11000, 15000, 18000, 37000, 24000,
28000, 28000, 42000, 46000, 50000, 34000, 34000, 46000,
50000, 56000, 64000, 64000, 65000, 80000, 81000, 81000,
44000, 49000, 76000, 76000, 89000, 38000, 80000, 69000,
46000, 47000, 57000, 72000, 77000, 68000]

market_Price = [30945, 28974, 27989, 27989, 36008, 24780, 22980,
23997, 25957, 27847, 36000, 25588, 23980, 25990,
25990, 28995, 26770, 26488, 24988, 24988, 17574,
12995, 19788, 20488, 19980, 24978, 16000, 16400,
18988, 19980, 18488, 16988, 15000, 15000, 16998,
17499, 15780, 8400]

age = [2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 4, 4, 4,
4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 6, 6, 7,
8, 8, 8, 8, 8, 13]

combined = np.array([hours, market_Price])

def f():
# Some function which uses combined where
# combined[0] = hours and combined[1] = market_Price
pass

popt, pcov = curve_fit(f, combined, market_Price)

关于python - Scipy - 优化。找出两个变量之间的比率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22618575/

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