0
我有生成線性和二次趨勢的時間序列代碼。我很困惑要爲degree
參數選擇什麼。我看到了如下定義:如何使用PolynomialFeatures選擇最合適的度數參數?
Within scikit-learn's PolynomialFeatures, when the argument degree is passed, all terms up to that degree are created.
我只是不理解這個定義。有沒有使用簡單數學的解釋?我如何確保我使用最好的學位?
這是我的代碼,如果你想要它的樣本。
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import statsmodels.api as sm
import statsmodels.formula.api as smf
import statsmodels.tsa.api as smt
import random
from sklearn.linear_model import LinearRegression
from sklearn.linear_model import Ridge
from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import make_pipeline
y = [5*np.random.normal() for j in range(50)] + [30 + 5 * np.random.normal() for j in range(50)] + [50 + 5 * np.random.normal() for j in range(50)] + [20 + 5 * np.random.normal() for j in range(50)]
X = [x for x in range(len(y))]
X = np.reshape(X, (len(X), 1))
model = LinearRegression()
model.fit(X, y)
trend = model.predict(X)
model = make_pipeline(PolynomialFeatures(2), Ridge())
model.fit(X, y)
quadratic = model.predict(X)
fig = plt.figure(1, figsize=(15, 9))
ax = fig.add_subplot(111)
ax.plot(trend, label="Linear Trend")
ax.plot(quadratic, label="Quadratic Trend")
ax.plot(X, y, label='Time Series')
ax.legend()
plt.show()
將度數改爲3或4會有什麼影響?或者你是說它應該始終是2? – MBeale
要確定這一點,您必須嘗試不同程度以獲得最適合您的目的。如果您的數據完全符合二次方程,那麼較高的度數將使您只有** x **的較高度數的零係數。如果你的數據符合二次*非常好,那麼較高的度數會給你非常小的係數。 – Prune
您想要避免的情況(通過實驗)是您*知道您的數據相對平滑的地方,但有一些異常值會嚴重地改變較高等級的擬合。您可以在數據的「主要頻道」之外獲得狂野的搖擺,試圖包含那些任性的點。 – Prune