《python数据分析及其在水利工程中的应用》课件-31随机森林回归模型_第1页
《python数据分析及其在水利工程中的应用》课件-31随机森林回归模型_第2页
《python数据分析及其在水利工程中的应用》课件-31随机森林回归模型_第3页
《python数据分析及其在水利工程中的应用》课件-31随机森林回归模型_第4页
《python数据分析及其在水利工程中的应用》课件-31随机森林回归模型_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

森林智慧-随机森林预测⽔情随机森林回归模型Randomforestregressionmodel升级任务:预测未来Upgradetask:Predictthefuture⻓⽼的指引—智水长老知过去,

晓现在,更需测未来。运⽤机器学习之神⼒

,预测⽔情变化,

⽅能决胜千⾥

。升级任务:预测未来Upgradetask:Predictthefuture当前任务任务:森林智慧-随机森林回归模型进行中>>>已完成任务任务:时光先知-时间序列预测模型(Prophet)已完成任务:精准考量-模型评估(RMSE与交叉验证)后续任务待解锁升级任务:预测未来Upgradetask:Predictthefuture当前任务任务:森林智慧-随机森林回归模型进行中>>>已完成任务任务:时光先知-时间序列预测模型(Prophet)已完成任务:精准考量-模型评估(RMSE与交叉验证)后续任务待解锁完成本任务,成为【测⽔师】!01第一节随机森林基础Thebasisofrandomforest什么是随机森林?Whatisarandomforest?随机森林如何⼯作训练数据随机⼦集1随机⼦集...随机⼦集2

随机⼦集n决策树1决策树...决策树2决策树n结果综合结果综合随机森林概念随机森林(RandomForest)是—种集成学习算法,

它通过构建⼤量的决策树,然后将它们的预测结果进⾏组合:对于回归问题:取所有树预测结果的平均值对于分类问题:通过投票确定最终类别为什么选择随机森林?WhychooseRandomForest?结合Prophet的潜⼒Prophet模型与随机森林相结合,能发挥各⾃优势:Prophet提供基础预测:捕捉时间序列的整体趋势、季节性和节假⽇效应随机森林精细调整:利⽤Prophet的预测值及其分量作为特征,

连同其他构造的特征—起输⼊随机森林,

学习复杂关系并进⾏精细调整简单来说,Prophet画出⼤⽅向,

随机森林在此基础上进⾏细节优化。随机森林在时间序列预测中的优势处理⾮线性关系:

真实世界的时间序列数据(如温度变化)往往包含复杂的⾮线性关系,

随机森林能够很好地捕捉这些关系利⽤多特征预测:能⽅便地整合多种类型的特征进⾏预测,例如滞后值、

时间特征(

⽉份、

星期⼏)

等抗噪能⼒强:对数据中的噪声和异常值较为鲁棒02第二节实现随机森林预测模型Realizetherandomforestpredictionmodel导⼊库与加载数据Importlibrariesandloaddata⾸先,我们需要导⼊所有必要的Python库,并加载温度数据:import

pandas

as

pd

#

数据处理import

numpy

as

np

#

数值计算from

sklearn.ensemble

import

RandomForestRegressor

#

随机森林回归模型from

sklearn.model_selection

import

train_test_split

#将数据分为训练集和测试集from

sklearn.metrics

import

mean_squared_error,

r2_score

#模型评估指标import

matplotlib.pyplot

as

plt

#数据可视化from

prophet

import

Prophet

#时间序列预测框架#

1.加载

Excel

⽂件try:df=pd.read_excel("data.xlsx")print("Successfully

loaded

data.xlsx

file!")exceptFileNotFoundError:print("Error:data.xlsx

file

not

found!

Please

ensure

the

file

is

in

the

current

directory.")exit()#2.检查是否存在所需的列if

'Date'not

in

df.columns

or

'Temperature(℃)'

not

in

df.columns:print("Error:Excel

file

is

missing

required

columns.

Please

check

column

names.")exit()数据预处理-时间戳和滞后特征Datapreprocessing-timestampandlagcharacteristics为了让模型能理解⽇期,并利⽤过去的温度信息,我们进⾏以下处理:#

3.数据预处理#3.1将IDateI转换为时间戳df

[

'Date']=pd.to_datetime(df

[

'Date'],format=

'%Y-%m-%d%H:%M:%S')df

[

'Date_timestamp']=df

[

'Date'].astype(

'int64')//

10**9#3.2

添加滞后特征df

[

'Temperature(℃)_lag1']=df

[

'Temperature(℃)'].shift(1)滞后特征为每个观测点添加前—天的温度值作为特征。在时间序列预测中,过去的值通常对预测未来值具有重要影响。时间戳转换将⽇期列转换为Unix时间戳(从1970年1⽉1⽇以来的秒数)。这种数值表示形式使机器学习模型能够理解和处理时间数据。数据预处理-时间周期特征和循环编码Datapreprocessing-timeperiodcharacteristicsandcycliccoding温度数据通常具有周期性。提取这些周期特征有助于模型学习:#3.3

添加时间周期特征df

[

'month']=

df

[

'Date'].dt.monthdf

['day_of_year']=df

[

'Date'].dt.dayofyeardf

['day_of_week']=df

[

'Date'].dt.dayofweek时间周期特征month:提取⽉份(1-12)day_of_year:—年中的第⼏天(1-366)day_of_week:—周中的第⼏天(0-6)这些特征帮助模型捕捉年度和每周的温度模式。数据预处理-时间周期特征和循环编码Datapreprocessing-timeperiodcharacteristicsandcycliccoding温度数据通常具有周期性。提取这些周期特征有助于模型学习:#3.3

添加时间周期特征df

[

'month']=

df

[

'Date'].dt.monthdf

['day_of_year']=df

[

'Date'].dt.dayofyeardf

['day_of_week']=df

[

'Date'].dt.dayofweek时间周期特征month:提取⽉份(1-12)day_of_year:—年中的第⼏天(1-366)day_of_week:—周中的第⼏天(0-6)这些特征帮助模型捕捉年度和每周的温度模式。数据预处理-时间周期特征和循环编码Datapreprocessing-timeperiodcharacteristicsandcycliccoding#3.3

添加时间周期特征df

[

'month']=

df

[

'Date'].dt.monthdf

['day_of_year']=df

[

'Date'].dt.dayofyeardf

['day_of_week']=df

[

'Date'].dt.dayofweek温度数据通常具有周期性。提取这些周期特征有助于模型学习:循环编码⽉份是循环特征:12⽉和1⽉在⽇历上相邻,但数值相差11。通过正弦和余弦变换,可以更好地表示这种循环关系。月份(1-12)sin和cos变换循环显示更容易学习连续性表示#3.4

使⽤循环编码df

[

'month_sin']=np.sin(2

*

np.pi

*

df

[

'month']

/

12)df

[

'month_cos']=np.cos(2

*

np.pi

*

df

[

'month']

/

12)数据预处理-Prophet模型预测作为特征Datapreprocessing-Prophetmodelpredictionasfeatures#3.5准备

Prophet

模型的数据prophet_df=df.rename(columns={

'Date':

'ds',

'Temperature(℃)':

'y'})结合Prophet的策略Prophet模型擅⻓捕捉时间序列的整体趋势和季节性模式。将其预测结果作为特征输⼊随机森林,可以让随机森林模型专注于学习更复杂的模式和调整预测。原始数据滞后特征随机森林模型最终预测时间特征预测值yhatProphet模型#3.6训练

Prophet

模型并⽣成预测prophet_model=

Prophet()prophet_model.fit(prophet_df)#3.7使⽤原始时间戳进⾏预测prophet_forecast=prophet_model.predict(prophet_df

[

[

'ds']])#使⽤原始⽇期作为输⼊df

['prophet_yhat']=prophet_forecast

[

'yhat'].values数据预处理-准备特征和⽬标变量Datapreprocessing-Preparingfeaturesandtargetvariables整合所有创建的特征作为输⼊X,处理缺失值:#3.8为随机森林准备特征和⽬标变量X=df

[

[

'Date_timestamp',

'Temperature(℃)_lag1',

'month',

'day_of_year',

'day_of_week','month_sin',

'month_cos',

'prophet_yhat']].values特征整合将所有准备好的特征整合为随机森林的输⼊X:时间戳前—天的温度(滞后特征)时间周期特征(

⽉份、—年中的天、—周中的天)循环编码(

⽉份的正弦和余弦值)Prophet模型的预测结果处理缺失值由于创建滞后特征会引⼊NaN值(第—个观测点没有前—天的数据),我们需要移除包含缺失值的⾏:~np.isnan(y):找出⽬标变量中⾮NaN的索引~np.isnan(X).any(axis=1):找出特征矩阵中每⾏都没有NaN的索引两者相与,得到所有有效数据的索引#3.9

处理缺失值valid_indices=~np.isnan(y)&~np.isnan(X).any(axis=1)X=X

[valid_indices]y=

y

[valid_indices]y=df

[

'Temperature(℃)'].values划分数据集并训练模型Dividethedatasetandtrainthemodel#4.划分训练集和测试集X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.2,

random_state=42)数据集划分使⽤train_test_split函数将数据分为训练集(80%)和测试集(20%)。

random_state=42确保结果可重现。随机森林模型参数n_estimators=100:森林中决策树的数量random_state=42:

随机数种⼦,

确保结果可重现预处理原始数据集训练完成的模型在测试集上评估训练随机森林模型原始数据滞后特征训练集(80%)#5.创建随机森林回归模型model=RandomForestRegressor(n_estimators=100,

random_state=42)#

6.训练模型model.fit(X_train,y_train)模型评估与可视化(代码)ModelEvaluationandVisualization(Code)#

7.

进⾏预测y_pred=model.predict(X_test)#

8.模型评估mse=mean_squared_error(y_test,y_pred)r2=

r2_score(y_test,y_pred)print(f'\nMean

Squared

Error(MSE):

{mse:.4f}

')print(f'R-squared

(R2):{r2:.4f}

')#9.

可视化结果plt.figure(figsize=(10,6))plt.scatter(X_test

[:,0],y_test,color=

'black',label=

'Observed

Values')#X_test[:,

0]是

Date_timestampplt.scatter(X_test

[:,0],y_pred,color=

'blue',label=

'Predicted

Values',

marker=

'x')plt.xlabel(

'Time

(Timestamp)')plt.ylabel(

'Temperature(°C)')plt.title(

'Random

Forest

Regression

Predictions

(with

Prophet

Predictions)')plt.legend()plt.show()模型评估与可视化Modelevaluationandvisualization评估指标均⽅误差(MSE):预测值与真实值差异的平⽅均值,越⼩越好R平⽅(R²):模型解释数据变异性的⽐例,越接近1表示模型拟合效果越好可视化散点图图表展示了测试集上的实际温度值(⿊⾊圆点)和模型预测的温度值(蓝⾊交叉)。两者越接近,表明模型预测越准确。时间戳作为X轴,使我们能够看到随时间推移的预测效果,帮助识别模型在哪些时间段表现良好或较差。03第三节进⾏未来预测Makefuturepredictions创建未来时间序列Createfuturetimeseries#创建未来时间戳序列设定预测时间范围从最后—个观测时间点的5天后开始预测预测时⻓为1080天(约3年)每条记录间隔为1天(86400秒)为何要预测⻓期温度变化?在⽔利⼯程中,

⻓期温度预测可以:last_timestamp=df

[

'Date_timestamp'].max()future_timestamps_np=np.array(range(last_timestamp

+86400*

5,last_timestamp+86400

*

(5

+

1080),86400))#1080天约等于3年,

86400秒=

1天future_timestamps=future_timestamps_np.reshape(-1,1)帮助评估⽓候变化对⽔资源的潜在影响为⽔库⻓期运⾏策略提供参考预测季节性变化及极端情况⽀持⽔利基础设施的⻓期规划迭代预测未来温度Iterativelypredictfuturetemperatures#准备特征并迭代进⾏预测对未来温度的预测是—个迭代过程,

因为我们需要使⽤前—天的预测结果作为下—天预测的输⼊特征:for

ts_array

in

future_timestamps:#1.获取当前要预测的时间戳current_timestamp=ts_array

[0]#2.将时间戳转换为日期时间对象。这对于Prophet预测和提取时间特征是必需的date_time=pd.to_datetime(current_timestamp,unit=

's')#3.为Prophet

模型创建未来数据并预测future_prophet_df=pd.DataFrame({

'ds':

[date_time]})prophet_prediction_future=prophet_model.predict(future_prophet_df)current_prophet_yhat=prophet_prediction_future

[

'yhat'].iloc

[0]#4.

提取时间周期特征month_val=date_time.monthday_of_year_val=date_time.dayofyearday_of_week_val=date_time.dayofweekmonth_sin_val=np.sin(2*

np.pi*

month_val

/

12)month_cos_val=np.cos(2*

np.pi*

month_val

/

12)future_predictions=

[]last_temp_lag1=df

[

'Temperature(℃)'].iloc

[-1]#使⽤最后观察到的实际温度初始化滞后特征迭代预测未来温度(续)IterativePredictionofFutureTemperatures(Continued)#5.创建随机森林的预测特征#6.使⽤随机森林模型进⾏预测prediction=model.predict(current_X_future)

[0]#7.将这个预测值添加到future_predictions列表中future_predictions.append(prediction)#8.更新滞后特征为当前预测值last_temp_lag1=

predictioncurrent_X_future=np.array(

[[current_timestamp,last_temp_lag1,

month_val,day_of_year_val,day_of_week_val,month_sin_val,month_cos_val,current_prophet_yhat]])迭代预测过程解析AnalysisoftheIterativePredictionProcess所有天预测完成提取时间特征(⽉份等)构建随机森林输⼊特征使⽤Prophet预测当天温度转换时间戳为⽇期对象循环遍历未来每—天初始化:使⽤最后观察的实际温度对每—天使⽤随机森林预测温度将预测结果存储更新滞后特征为当前预测值将预测结果存储到DataFrame并可视化展示:可视化未来预测结果Visualizethefuturepredictionresults#1创建DataFrame

存储未来预测future_dates=pd.to_datetime(futu

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论