使用机器学习预测降雨

machine learningpythonpandas

机器学习的强大功能使我们能够使用多种算法预测降雨,包括随机森林和 XGBoost。

预测降雨没有最好的算法,每种算法都有其优点和缺点。随机森林对小数据集有效,而 XGboost 对大数据集有效。

同样,我们可以根据项目需求对其他算法进行分类。

我们的目标是基于随机森林构建一个降雨预测机器学习模型。

算法

  • 导入所有必需的库,如 Pandas、Numpy、Sklearn 和 matplotlib。

  • 将历史降雨数据加载到 pandas 数据框中。

  • 通过删除任何不必要的列并处理缺失值(如果有)来预处理数据。

  • 将数据分为训练集和测试集。

  • 选择一种机器学习算法(如随机森林或 XGBoost)用于预测。对于此示例,我们选择了随机森林算法,因为它最适合我们选择的数据集。

  • 在训练数据集上训练算法。

  • 使用训练后的模型预测给定月份和年份的降雨量。

  • 评估模型的效率

示例

# 导入所需的库
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
# 加载数据集

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))
# 将数据集拆分为训练集和测试集
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)
# 训练模型

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)

# 在测试集上进行预测
y_pred = rf.predict(X)
# 评估模型
mean_absolute_error(y, y_pred)

print(mean_absolute_error(y, y_pred))
print(y_pred)

数据从 Rainfall_dataset.csv 文件加载并存储到 python 数据框中。缺失值用 0 填充。然后将数据集分成训练集和测试集。从数据框中提取二月、三月和四月的降雨值并将其存储在不同的数组中,而五月的降雨值则单独存储在另一个数组中。

在整个数据集上训练森林回归模型,该模型用于对数据集进行预测。然后将预测值存储在数组中。然后使用从数据集加载的实际降雨值与使用 mean_absolute_error() 函数计算的预测降雨值之间的平均绝对误差来评估模型的性能。

输出

25.71495399881942 //这是实际值 y 和预测值 y_pred 之间的平均绝对误差 (MAE)

[18.15560485 28.51579025 18.42870772 ... 3.45343635 6.94081644
8.22604943] //这些是存储在 y_pred 中的预测值。

注意 − 在上面的例子中,降雨预测是针对东部北方邦的;您可以选择任何州或地区。

确保从上面提到的链接下载数据集以获取输出。

结论

机器学习算法可用于建立准确的降雨预测模型,有助于有效的水资源管理和灾害管理。

然而,模型的准确性取决于数据的质量、特征的选择以及适当算法的选择。

因此,仔细收集和预处理数据、选择相关特征以及选择适当的机器学习算法进行降雨预测非常重要。


相关文章