我有一個(gè)時(shí)間序列,我想用它xt來預(yù)測xt + 1. 我正在使用 sklearn 的支持向量回歸,但我無法理解我在預(yù)測中發(fā)生這種轉(zhuǎn)變時(shí)做錯(cuò)了什么。這是我的代碼和結(jié)果(在圖像中)。bts_sup = timeseries_to_supervised(bts,1)bts_sup = bts_sup.iloc[1:,:] # delete the line because x0 don't have antecedanttrain, test = split_data(bts_sup)# sacling datascaler_in = MinMaxScaler() # for inputsscaler_out = MinMaxScaler() # for outputsX_train = scaler_in.fit_transform(train[:,0].reshape(-1,1))y_train = scaler_out.fit_transform(train[:,1].reshape(-1,1))X_test = scaler_in.transform(test[:,0].reshape(-1,1))y_test = scaler_out.transform(test[:,1].reshape(-1,1))param_grid = {"C": np.linspace(10**(-2),10**3,100), 'gamma': np.linspace(0.0001,1,20)}mod = SVR(epsilon = 0.1,kernel='rbf')model = GridSearchCV(estimator = mod, param_grid = param_grid, scoring = "neg_mean_squared_error",verbose = 0)best_model = model.fit(X_train, y_train.ravel())#predictionpredicted_tr = model.predict(X_train)predicted_te = model.predict(X_test)# inverse_transform because prediction is done on scaled inputspredicted_tr = scaler_out.inverse_transform(predicted_tr.reshape(-1,1))predicted_te = scaler_out.inverse_transform(predicted_te.reshape(-1,1))#plotforcast = np.concatenate((predicted_tr,predicted_te))real = np.concatenate((train[:,1],test[:,1]))plt.plot(real, color = 'blue', label = 'Real Erlangs')plt.plot(forcast,"--", linewidth=2,color = 'red', label = 'Predicted Erlangs')plt.title('Erlangs Prediction--'+data_set.columns[choice])plt.xlabel('Time')plt.ylabel('Erlangs')plt.legend()plt.show()#errorprint("MSE: ", mse(real,forcast), " R2: ", r2_score(real,forcast))print(best_model.best_params_)
1 回答

素胚勾勒不出你
TA貢獻(xiàn)1827條經(jīng)驗(yàn) 獲得超9個(gè)贊
根據(jù)我的觀察,該模型預(yù)測了一個(gè)接近前一個(gè)時(shí)間段的值,該值已作為輸入數(shù)據(jù)給出。當(dāng)x_t
低時(shí)可以觀察到小的方差,x_t+1
當(dāng) x_t 是高值時(shí),模型預(yù)測為略高和相反的情況。
這似乎是模型的最佳猜測,只有一個(gè)滯后特征。
改進(jìn)的方法可以是添加額外的特征 5-10 個(gè)滯后,并讓模型學(xué)習(xí)模式貫穿始終。
對于更復(fù)雜的模型,如果 SVM 不起作用,您可以嘗試使用 RNN 進(jìn)行預(yù)測。
添加回答
舉報(bào)
0/150
提交
取消