python - 用 numpy 拟合 y = x ** a 形式的回归

标签 python numpy

import numpy as np
import matplotlib.pyplot as plt
x_ = np.array([1.0, 2.0, 4.0, 8.0, 16.0, 33.0])
y_ = np.array([0.4, 0.55, 0.62, 0.72, 0.76, 0.8])

我想拟合 y = x ** a 形式的回归模型,其中估计 a。 目的是外推到(很多)更大的、看不见的 x 值。 注意:我需要强制我的模型通过 (0, 0)

不确定这是否是最好的方法,但到目前为止,我已经尝试将其转换为找到最适合 log(y)/log(x) 的常量。我有:

x_ = np.array([1.0, 2.0, 4.0, 8.0, 16.0, 33.0])
logx_ = np.log(x_)
y_ = np.array([0.4, 0.55, 0.62, 0.72, 0.76, 0.8])
logy_ = np.log(y_)
y = logy_ / logx_
x = x_
print "y: ", y
z = np.polyfit(x, y, 0)
print "param estimates: ", z

p = np.poly1d(z)
p30 = np.poly1d(np.polyfit(x, y, 30))

xp = np.linspace(0, 35, 6)
_ = plt.plot(x, np.exp(y*np.log(x)), '.', xp, np.exp(p(xp)*np.log(x)), '-')
plt.ylim(0,1.0)
plt.show()

但是好像不行。 有人可以解释我做错了什么并提供答案吗?

最佳答案

这适合 logy_ = a * logx_ 上的纯 y = x ** a 最小二乘法:

a = np.linalg.lstsq(logx_[:, np.newaxis], logy_)[0][0]

关于python - 用 numpy 拟合 y = x ** a 形式的回归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38086701/

相关文章:

python - 从 Jupyter Notebook 启动 Dash

python - 我想向 QVBoxLayout 添加滚动条

python - 有没有办法让这个 Python kNN 函数更高效?

python - 自 NumPy 中最后一次出现以来的计数

python - 如何 reshape 具有不同维度的 3d 数组?

python - 如何在 Python 中向 Sentry 发送日志记录附件?

python - 使用 Flask for Python 获取访问者的 IP 地址

Python - 可以将相同的属性逻辑应用于多个属性吗?

python - 加减不影响 numpy 数组的所有元素

python - 将双方括号变为单方括号