2015-02-23 116 views
2

嗨我有一個線性迴歸模型,我試圖優化。我正在優化指數移動平均線的跨度和我在迴歸中使用的滯後變量的數量。每次我使用scikit運行線性迴歸時獲得不同的結果

但是我一直髮現結果和計算出來的mse不斷得出不同的最終結果。不知道爲什麼有人可以幫忙?

過程開始循環之後: 1.三個變量創建新數據幀 2.拆下零值 3.針對每個變量 4.創建EWMA的每個變量 5.掉落NA的 6.創建X創建滯後,Y 7.迴歸和保存EMA跨度和滯後號碼,如果更好的MSE 8.啓動循環與未來值

我知道這可能是交叉驗證的問題,而是因爲它可能是一個綱領性我已經張貼在這裏:

bestema = 0 
bestlag = 0 
mse = 1000000 

for e in range(2, 30): 
    for lags in range(1, 20): 
     df2 = df[['diffbn','diffbl','diffbz']] 
     df2 = df2[(df2 != 0).all(1)]   
     df2['emabn'] = pd.ewma(df2.diffbn, span=e) 
     df2['emabl'] = pd.ewma(df2.diffbl, span=e) 
     df2['emabz'] = pd.ewma(df2.diffbz, span=e) 
     for i in range(0,lags): 
      df2["lagbn%s" % str(i+1)] = df2["emabn"].shift(i+1) 
      df2["lagbz%s" % str(i+1)] = df2["emabz"].shift(i+1) 
      df2["lagbl%s" % str(i+1)] = df2["emabl"].shift(i+1) 
     df2 = df2.dropna() 
     b = list(df2) 
      #print(a) 
     b.remove('diffbl') 
     b.remove('emabn') 
     b.remove('emabz') 
     b.remove('emabl') 
     b.remove('diffbn') 
     b.remove('diffbz') 
     X = df2[b] 
     y = df2["diffbl"] 
     X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3) 
     #print(X_train.shape) 
     regr = linear_model.LinearRegression() 
     regr.fit(X_train, y_train) 
     if(mean_squared_error(y_test,regr.predict(X_test)) < mse): 
      mse = mean_squared_error(y_test,regr.predict(X_test) ** 2) 
      #mse = mean_squared_error(y_test,regr.predict(X_test)) 
      bestema = e 
      bestlag = lags 
      print(regr.coef_) 
      print(bestema) 
      print(bestlag) 
      print(mse) 
+3

是'train_test_split'函數從sklearn(http://scikit-learn.org/stable/modules/generated/sklearn.cross_validation.train_test_split.html)?這是隨機的,所以邏輯上你每次都得到不同的結果。你可以傳遞一個'random_state'關鍵字來使它每次都是相同的。 – joris 2015-02-23 12:27:06

+0

這個解釋它,我需要自己做,然後獲得第一個70%的列車,然後測試下一個30% – azuric 2015-02-23 13:07:36

回答

相關問題