python - 在 matplotlib 中将直线拟合到对数对数曲线

标签 python numpy matplotlib loglog

我有一个图,它在两个轴上都是对数的。我有 pyplot 的 loglog 函数来执行此操作。它还为我提供了两个轴上的对数刻度。

现在,我使用 numpy 将一条直线拟合到我拥有的点集。但是,当我在图上绘制这条线时,我无法得到一条直线。我得到一条曲线。 The blue line is the supposedly "straight line". It is not getting plotted straight. I want to fit a straight line to the curve plotted by red dots

蓝线是所谓的“直线”。它没有被直接绘制。我想把这条直线拟合到红点绘制的曲线上

这是我用来绘制点的代码:

import numpy
from matplotlib import pyplot as plt
import math
fp=open("word-rank.txt","r")
a=[]
b=[]

for line in fp:
    string=line.strip().split()
    a.append(float(string[0]))
    b.append(float(string[1]))

coefficients=numpy.polyfit(b,a,1)
polynomial=numpy.poly1d(coefficients)
ys=polynomial(b)
print polynomial
plt.loglog(b,a,'ro')
plt.plot(b,ys)
plt.xlabel("Log (Rank of frequency)")
plt.ylabel("Log (Frequency)")
plt.title("Frequency vs frequency rank for words")
plt.show()

最佳答案

为了更好地理解这个问题,让我们首先谈谈简单的线性回归(polyfit 函数,在这种情况下,是您的线性回归算法)。


假设您有一组数据点 (x,y),如下所示:

Linear regression diagram

您想创建一个模型来预测 y作为 x 的函数,所以你使用线性回归。使用模型:

y = mx + b

并计算 m 的值和 b最好地预测您的数据,使用一些线性代数。

接下来,您使用模型预测 y 值作为 x 的函数。为此,您可以为 x 选择一组值(想想 linspace)并计算相应的 y 值。绘制这些 (x,y) 对可以得出回归线。


现在,我们来谈谈对数回归。在这种情况下,我们仍然有两个变量,y 与 x,我们仍然对它们的关系感兴趣,即能够预测 y。给出x .唯一不同的是,现在 yx恰好是另外两个变量的对数,我称之为 log(F)log(R) .到目前为止,这只不过是一个简单的名称更改。

Log regression diagram

线性回归也以同样的方式工作。您仍在回归 y 与 x。线性回归算法不关心 yx实际上是log(F)log(R) - 它对算法没有影响。

最后一步有点不同 - 这是您在上面的情节中被绊倒的地方。你正在做的是计算

F = m R + b

但这是不正确的,因为F之间的关系和 R不是线性的。 (这就是您使用对数-对数图的原因。)

相反,你应该计算

log(F) = m log(R) + b

如果你对此进行变换(增加 10 的双方的次方并重新排列),你会得到

F = c R^m

哪里c = 10^b .这是F之间的关系和 R : 这是幂律关系。 (幂律关系是双对数图最擅长的。)

在您的代码中,您在调用 polyfit 时使用了 A 和 B , 但你应该使用 log(A)log(B) .

关于python - 在 matplotlib 中将直线拟合到对数对数曲线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30657453/

相关文章:

python - 为什么子图在 x 轴上产生空白区域?

python - python 中的一切都是对象,但为什么不将关键字作为对象呢?

python - 在 Google Cloud VM 上加速和优化 scikit-learn

python - 如何从 numpy.dot(A, A_inv) 得到单位矩阵

python - 在 opencv 中使用均值合成帧

python - 如何在 Python 中将 3D 数据绘制为 2D 网格颜色图?

python - 从 matplotlib 图形中检索 XY 数据

弹丸给出直线的Python动画

Python scikit-learn : Cannot clone object. .. 因为构造函数似乎没有设置参数

Python pandas 加入覆盖