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

Ser*_*bin 1 python plot matplotlib scipy linear-regression

我正在分析数据集,我知道数据应遵循功率模型:

y = a*x**b
Run Code Online (Sandbox Code Playgroud)

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

ln(y) = ln(a) + b* ln(x)
Run Code Online (Sandbox Code Playgroud)

但是,在向图中添加趋势线时会出现问题

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')
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

这是我用这段代码得到的.如何修改代码,使情节上的趋势线正确?

Ami*_*ory 5

你的绿色奇怪的情节是你在进行线条图时得到的matplotlib,其x值未分类.这是一个线条图,但它通过左右跳跃的线(x,y)连接(在你的特定情况下,它看起来像回到x原点附近).这给了这些奇怪的模式.

你没有蓝色图的这个问题,因为它是一个散点图.

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

wetarea_x[np.argsort(wetarea_x)]
Run Code Online (Sandbox Code Playgroud)

yy[np.argsort(wetarea_x)]
Run Code Online (Sandbox Code Playgroud)