基於機器學習的降雨預測
機器學習的強大功能使我們能夠利用多種演算法(包括隨機森林和XGBoost)來預測降雨。
沒有最好的降雨預測演算法,每種演算法都有其優缺點。隨機森林在小資料集上效率高,而XGBoost在大資料集上效率高。
同樣,我們可以根據專案的需要對其他演算法進行分類。
我們的目標是構建一個基於隨機森林的降雨預測機器學習模型。
演算法
匯入所有必需的庫,例如Pandas、Numpy、Sklearn和matplotlib。
將歷史降雨資料載入到Pandas資料框中。
預處理資料,刪除任何不必要的列並處理缺失值(如有)。
將資料分割成訓練集和測試集。
選擇一個機器學習演算法(例如隨機森林或XGBoost)用於預測。在本例中,我們選擇隨機森林演算法,因為它最適合我們選擇的資料集。
在訓練資料集上訓練演算法。
使用訓練好的模型預測給定月份和年份的降雨量。
評估模型的效率
示例
# Import required libraries import pandas as pd import numpy as np from sklearn.model_selection import train_test_split from sklearn.metrics import mean_absolute_error from sklearn.ensemble import RandomForestRegressor from sklearn.linear_model import LinearRegression from sklearn.linear_model import Lasso import matplotlib.pyplot as plt #Load the dataset df=pd.read_csv("Rainfall_dataset.csv") df.head() df.fillna(value = 0,inplace =True) grouped = df.groupby(df.DIVISION) UP = grouped.get_group("EAST UTTAR PRADESH") UP.head() UP.hist(figsize=(12,12)) # Split the dataset into training and testing sets data = np.asarray(UP[['FEB', 'MAR', 'APR','MAY']]) print(np.shape(data)) X = data[:,0:3] y = data[:,3] data = np.asarray(UP[['JAN', 'FEB', 'MAR', 'APR', 'MAY', 'JUN', 'JUL', 'AUG', 'SEP', 'OCT', 'NOV', 'DEC']]) print(np.shape(data)) X = None; y = None for i in range(data.shape[1]-3): if X is None: X = data[:, i:i+3] y = data[:, i+3] else: X = np.concatenate((X, data[:, i:i+3]), axis=0) y = np.concatenate((y, data[:, i+3]), axis=0) # Train the model X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) np.shape(X_test) rf = RandomForestRegressor(n_estimators = 100, max_depth=10, n_jobs=1) rf.fit(X, y) # Predict on the test set y_pred = rf.predict(X) # Evaluate the model mean_absolute_error(y, y_pred) print(mean_absolute_error(y, y_pred)) print(y_pred)
資料從Rainfall_dataset.csv檔案載入並存儲到Python資料框中。缺失值用0填充。然後將資料集分割成訓練集和測試集。從資料框中提取2月、3月和4月的降雨量並存儲在不同的陣列中,而5月的降雨量則單獨儲存在另一個數組中。
在整個資料集上訓練一個森林迴歸模型,該模型用於對資料集進行預測。然後將預測值儲存在陣列中。然後使用實際降雨值(從資料集中載入)和預測降雨值(使用mean_absolute_error()函式計算)之間的平均絕對誤差來評估模型的效能。
輸出
25.71495399881942 //This is the mean absolute error (MAE) between the actual values y and the predicted values y_pred [18.15560485 28.51579025 18.42870772 ... 3.45343635 6.94081644 8.22604943] //These are the predicted values stored in the y_pred.
注意 - 上述示例中的降雨預測針對的是印度北方邦東部地區;您可以選擇任何州或地區。
請確保從上面提到的連結下載資料集以獲取輸出。
結論
機器學習演算法可用於構建準確的降雨預測模型,這有助於有效的水資源管理和災害管理。
但是,模型的準確性取決於資料的質量、特徵的選擇以及適當演算法的選擇。
因此,務必仔細收集和預處理資料,選擇相關的特徵,併為降雨預測選擇合適的機器學習演算法。