2015-02-23 55 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

回答

相关问题