tft每日頭條

 > 生活

 > 随機森林理論入門

随機森林理論入門

生活 更新时间:2024-11-23 02:36:20

随機森林理論入門(九道門如何使用随機森林進行時間序列預測)1

傳統的時間序列預測模型,如 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)

輸出:

随機森林理論入門(九道門如何使用随機森林進行時間序列預測)2

在上面的輸出中,我們可以看到 MAE 為 5.999。這是一個很好的迹象。下面我們用測試數據繪制這些預測。

plt.plot(y, label='Expected') plt.plot(yhat, label='Predicted') plt.legend() plt.show()

輸出:

随機森林理論入門(九道門如何使用随機森林進行時間序列預測)3

在這裡我們可以看到拟合随機森林回歸模型的預測值。為了獲得更好的性能,我們可以改變随機森林回歸模型的參數。

随機森林理論入門(九道門如何使用随機森林進行時間序列預測)4

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关生活资讯推荐

热门生活资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved