我有以下形式的数据:
X Y
3.53 0
4.93 50
5.53 60
6.21 70
7.37 80
9.98 90
16.56 100
我想知道以便这可以适合以下形式的功能:
我试图确定通过 Box-Cox 变换。可以用 Box-Cox 变换确定 n 吗?
我有以下形式的数据:
X Y
3.53 0
4.93 50
5.53 60
6.21 70
7.37 80
9.98 90
16.56 100
我想知道以便这可以适合以下形式的功能:
我试图确定通过 Box-Cox 变换。可以用 Box-Cox 变换确定 n 吗?
正如他们提到的(并责骂你),你为什么要尝试使用这种方法?
如果非线性回归就足够了,您可以看到下面的代码,该选项curve_fit不起作用。所以我minimize在这种情况下使用,初始猜测是从线性回归中获得的和.
import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import minimize
def func(coef, x, y):
a = coef[0]
b = coef[1]
n = coef[2]
return np.linalg.norm(y - a/x**n - b)
x = np.array([3.53, 4.93, 5.53, 6.21, 7.37, 9.98, 16.56])
y = np.array([0, 50, 60, 70, 80, 90, 100])
# The initial values are obtained from a linear regression between
# y and (1/x)
res = minimize(func, [-446, 136, 1], args=(x, y))
a, b, n = res.x
print a, b, n
x_vec = np.linspace(3.5, 17)
y_vec = a/x_vec**n + b
plt.plot(x, y, 'ko')
plt.plot(x_vec, y_vec)
plt.xlabel("x")
plt.xlabel("y")
plt.savefig("regression.png", dpi=300)
输出是
-1181.72495119 105.101516419 1.91866624841
和图像
