2017-08-25 6 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 **のより高い次数の係数をゼロにします。データが2次の* very *によく当てはまる場合、より高い次数は非常に小さいより高い係数を与えます。 – Prune

+0

あなたが避けたい(実験による)ケースは、あなたのデータが比較的滑らかであることを知っている場所ですが、いくつかのアウトライアーは真剣に*より高い度合いのフィッティングに変わります。あなたは、それらの途方もない点を含めるために、データの「メインチャンネル」の外で野生のスイングを得ることができます。 – Prune

関連する問題