2017-08-25 36 views
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() 

回答

0

您使用爲度;線性分量將被包含在二次方程中。例如,如果計算的線性分量爲2x - 5,二次方程爲3x^2 + x + 1,那麼從函數返回的值將是總和3x^2 + 3x + 4

+0

將度數改爲3或4會有什麼影響?或者你是說它應該始終是2? – MBeale

+0

要確定這一點,您必須嘗試不同程度以獲得最適合您的目的。如果您的數據完全符合二次方程,那麼較高的度數將使您只有** x **的較高度數的零係數。如果你的數據符合二次*非常好,那麼較高的度數會給你非常小的係數。 – Prune

+0

您想要避免的情況(通過實驗)是您*知道您的數據相對平滑的地方,但有一些異常值會嚴重地改變較高等級的擬合。您可以在數據的「主要頻道」之外獲得狂野的搖擺,試圖包含那些任性的點。 – Prune