Skip to main content
 首页 » 编程设计

python之如何将非线性模型转换为线性模型

2025年05月04日29kuangbin

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

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)]