傳統的時間序列預測模型,如 ARIMA、SARIMA 和 VAR ,都是基于回歸過程,因為這些模型需要處理連續變量。随機森林也是常用的機器學習模型之一,在分類和回歸任務中具有非常好的性能。随機森林回歸模型也可用于時間序列建模和預測,以獲得更好的結果。在本文中,我們将讨論如何使用随機森林回歸器進行時間序列建模和預測。
關于随機森林回歸器:
随機森林模型是許多決策樹的集合,其中決策樹被稱為弱學習器。它可以應用于分類和回歸問題。使用随機森林的回歸過程可以通過以下步驟完成:
這種來自樹的平均決策使得随機森林回歸比任何其他算法都強。讓我們看看如何在時間序列建模中使用随機森林模型。
流程 :
在開始前,我們可以使用從此處獲得的每日女性出生總數數據集。
由于我們使用的模塊旨在處理監督學習數據集,因此我們需要将時間序列轉換為監督學習數據集,轉換後,再對單變量數據進行驗證。在将數據拟合到模型中後,我們根據平均絕對誤差交叉檢查準确性。下面從導入庫開始。
1.導入庫-
在正常中隻需要使用 pandas、NumPy、matplotlib 和 sklearn 庫。
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.ensemble import RandomForestRegressor
從 sklearn 集成導入随機森林回歸器
2.數據轉換-
這部分實現了一個函數,可以将時間序列轉換為監督學習數據。
def series_to_supervised(data, n_in=1, n_out=1, dropnan=True):
n_vars = 1 if type(data) is list else data.shape[1]
df = pd.DataFrame(data)
cols = list()
for i in range(n_in, 0, -1):
cols.append(df.shift(i))
for i in range(0, n_out):
cols.append(df.shift(-i))
agg = pd.concat(cols, axis=1)
if dropnan:
agg.dropna(inplace=True)
return agg.values
在上面的函數中,我定義了輸入序列和預測序列并将它們連接起來,并且删除了所有的 NaN 值。
3.數據拆分-
本節定義了一個可以拆分數據集的函數。
def train_test_split(data, n_test):
return data[:-n_test, :], data[-n_test:, :]
4.模型拟合-
在本節中,我們将定義一個函數,它可以幫助通過随機森林回歸模型拟合轉換後的數據。
# fit an random forest model and make a one step prediction
def random_forest_forecast(train, testX):
train = np.asarray(train)
trainX, trainy = train[:, :-1], train[:, -1]
model = RandomForestRegressor(n_estimators=1000)
model.fit(trainX, trainy)
yhat = model.predict([testX])
return yhat[0]
這個函數将列表轉換為數組,然後拆分數據并拟合模型。訓練模型後,它将幫助我們進行下一步預測。
5.單變量數據的驗證-
本節将利用上述所有函數,并将測試數據與模型拟合,以預測和檢查模型的準确性。
from sklearn.metrics import mean_absolute_error
def walk_forward_validation(data, n_test):
predictions = list()
train, test = train_test_split(data, n_test)
history = [x for x in train]
for i in range(len(test)):
testX, testy = test[i, :-1], test[i, -1]
yhat = random_forest_forecast(history, testX)
predictions.append(yhat)
history.append(test[i])
print('>expected=%.1f, predicted=%.1f' % (testy, yhat))
error = mean_absolute_error(test[:, -1], predictions)
return error, test[:, -1], predictions
6.加載數據中-
加載數據并使用上述函數将數據轉換為監督學習數據。
series = pd.read_csv(‘/content/drive/MyDrive/Yugesh/times series with random forest/daily-total-female-births.csv’, header=0, index_col=0)
values = series.values
data = series_to_supervised(values, n_in=6)
7.模型評估-
根據均方誤差評估模型。
series = pd.read_csv('/content/drive/MyDrive/Yugesh/times series with random forest/daily-total-female-births.csv', header=0, index_col=0)
values = series.values
data = series_to_supervised(values, n_in=6)
輸出:
在上面的輸出中,我們可以看到 MAE 為 5.999。這是一個很好的迹象。下面我們用測試數據繪制這些預測。
plt.plot(y, label='Expected')
plt.plot(yhat, label='Predicted')
plt.legend()
plt.show()
輸出:
在這裡我們可以看到拟合随機森林回歸模型的預測值。為了獲得更好的性能,我們可以改變随機森林回歸模型的參數。
,
更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!