计算 Python 中的衰减率
Calculate Decay Rate in Python
我的数据集有点遵循指数衰减
df_A
Period Count
0 1600
1 894
2 959
3 773
4 509
5 206
我想用两种方法计算衰减率,因为我希望两种方法都能给出相同的结果,但是,我得到的结果不同?
这是第一种方法:
decay_rate1 = (10**(log(df_A['Count'].iloc[5]/df_A['Count'].iloc[0]) / 5)) - 1
这是第二种方法:
decay_rate2 = np.log(df_A['Count'].iloc[0])/log(df_A['Count'].iloc[5]
计算数据集衰减率的正确方法是什么?
不确定“over-complicated”是什么意思。你能解释一下你的两种方法吗?我不确定我是否了解你是如何到达他们的?无论如何,scipy.optimize.curve_fit
会为您完成所有繁重的工作:
import numpy as np
import pandas as pd
from scipy.optimize import curve_fit
def f(t, a, b):
return a * np.exp(-b * t)
(a, b), *_ = curve_fit(f, df.Period, df.Count)
结果:
In [4]: a
Out[4]: 1519.9510695102867
In [5]: b
Out[5]: 0.29266498021489273
请注意,由于您的数据具有相当大的值,您实际上会得到 RunTimeWarning
,因此您可以缩放 df.Count
列并仍然获得衰减率,b
:
(a, b), *_ = curve_fit(f, df.Period, df.Count / df.Count.max())
输出:
In [6]: a
Out[6]: 0.9499694152031338
In [7]: b
Out[7]: 0.29266497643362804
您还可以通过乘以 df.Count.max()
:
来恢复真实的 a
In [8]: a * df.Count.max()
Out[8]: 1519.9510643250142
我的数据集有点遵循指数衰减
df_A
Period Count
0 1600
1 894
2 959
3 773
4 509
5 206
我想用两种方法计算衰减率,因为我希望两种方法都能给出相同的结果,但是,我得到的结果不同?
这是第一种方法:
decay_rate1 = (10**(log(df_A['Count'].iloc[5]/df_A['Count'].iloc[0]) / 5)) - 1
这是第二种方法:
decay_rate2 = np.log(df_A['Count'].iloc[0])/log(df_A['Count'].iloc[5]
计算数据集衰减率的正确方法是什么?
不确定“over-complicated”是什么意思。你能解释一下你的两种方法吗?我不确定我是否了解你是如何到达他们的?无论如何,scipy.optimize.curve_fit
会为您完成所有繁重的工作:
import numpy as np
import pandas as pd
from scipy.optimize import curve_fit
def f(t, a, b):
return a * np.exp(-b * t)
(a, b), *_ = curve_fit(f, df.Period, df.Count)
结果:
In [4]: a
Out[4]: 1519.9510695102867
In [5]: b
Out[5]: 0.29266498021489273
请注意,由于您的数据具有相当大的值,您实际上会得到 RunTimeWarning
,因此您可以缩放 df.Count
列并仍然获得衰减率,b
:
(a, b), *_ = curve_fit(f, df.Period, df.Count / df.Count.max())
输出:
In [6]: a
Out[6]: 0.9499694152031338
In [7]: b
Out[7]: 0.29266497643362804
您还可以通过乘以 df.Count.max()
:
a
In [8]: a * df.Count.max()
Out[8]: 1519.9510643250142