如何将非线性模型转换为线性模型?

How to transform nonlinear model to linear?

我正在分析一个数据集,我知道数据应该遵循幂模型:

y = a*x**b

我通过取对数将其转换为线性:

ln(y) = ln(a) + b* ln(x)

但是,向绘图添加趋势线时出现了问题

slope, intercept, r_value, p_value, std_err = scipy.stats.mstats.linregress(x_ln, y_ln)
yy = np.exp(intercept)*wetarea_x**slope
plt.scatter(wetarea_x, arcgis_wtrshd_x, color = 'blue')
plt.plot(wetarea_x, yy, color = 'green')

这就是我用这段代码得到的。 如何修改代码,使图中的趋势线正确?

你的绿色奇怪图是你在 matplotlib 中绘制线图时得到的,x 值未排序。这是一个线图,但它由 (x, y) 对左右跳跃的线连接(在您的特定情况下,它看起来像回到 x 原点附近)。这给出了这些奇怪的模式。

蓝色图没有这个问题,因为它是散点图。

根据第一个使用 numpy.argsort 的索引对两个数组进行排序后尝试调用绘图,比如

wetarea_x[np.argsort(wetarea_x)]

yy[np.argsort(wetarea_x)]