[英]Polynomial Regression values generated too far from the coordinates
根據多項式回歸系數值的以下代碼,當我計算任何 x 點的回歸值時。 獲得的值更遠離等效的 y 坐標(特別是對於下面的坐標)。 任何人都可以解釋為什么差異如此之大,可以將其最小化或理解上的任何缺陷。 目前的要求不是每點相差150多。
import numpy as np
x=[0,5,10,15,20,25,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100]
y=[0,885,3517,5935,8137,11897,10125,13455,14797,15925,16837,17535,18017,18285,18328,18914,19432,19879,20249,20539,20746]
z=np.polyfit(x,y,3)
print(z)
我還嘗試了 Java 中可用的各種代碼,但是這些數據的系數值在每個位置都是相同的。 請幫助理解。
例如
0.019168 * N^3 + -5.540901 * N^2 + 579.846493 * N + -1119.339450
N 等於 5 值等於 1643.76649
多項式擬合按預期執行。 這里沒有錯誤,只是你的數據有很大的偏差。 不過,您可能想要重新調整數據。 如果您將參數full=True
添加到np.polyfit
,您將收到其他信息,包括殘差,其本質上是平方擬合誤差的總和。 有關更多詳細信息,請參閱此其他SO 帖子。
import matplotlib.pyplot as plt
import numpy as np
x = [0,5,10,15,20,25,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100]
y = [0,885,3517,5935,8137,11897,10125,13455,14797,15925,16837,17535,18017,18285,18328,18914,19432,19879,20249,20539,20746]
m = max(y)
y = [p/m for p in y] # rescaled y such that max(y)=1, and dimensionless
z, residuals, rank, sing_vals, cond_thres = np.polyfit(x,y,3,full=True)
print("Z: ",z) # [ 9.23914285e-07 -2.67082878e-04 2.79497972e-02 -5.39544708e-02]
print("resi:", residuals) # 0.02188 : quite decent, depending on WHAT you're measuring ..
Z = [z[3] + q*z[2] + q*q*z[1] + q*q*q*z[0] for q in x]
fig = plt.figure()
ax = fig.add_subplot(111)
ax.scatter(x,y)
ax.plot(x,Z,'r')
plt.show()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.