计算 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