《python数据分析及其在水利工程中的应用》课件-32模型评估 (RMSE 与交叉验证)_第1页
《python数据分析及其在水利工程中的应用》课件-32模型评估 (RMSE 与交叉验证)_第2页
《python数据分析及其在水利工程中的应用》课件-32模型评估 (RMSE 与交叉验证)_第3页
《python数据分析及其在水利工程中的应用》课件-32模型评估 (RMSE 与交叉验证)_第4页
《python数据分析及其在水利工程中的应用》课件-32模型评估 (RMSE 与交叉验证)_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

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

文档简介

精准考量模型评估

(RMSE与交叉验证)ModelEvaluation(RMSEandCross-validation)升级任务:预测未来UpgradeTask:PredicttheFuture⻓⽼的指引—智水长老知过去,

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

,预测⽔情变化,

⽅能决胜千⾥

。升级任务:预测未来UpgradeTask:PredicttheFuture任务:时光先知-时间序列预测模型(Prophet)任务:森林智慧-随机森林回归模型已完成任务已完成任务:精准考量-模型评估(RMSE与交叉验证)当前任务进行中>>>完成本任务,成为【测⽔师】!01第一节什么是均⽅根误差(RMSE)?WhatisrootMeansquareError(RMSE)?RMSE定义RMSEdefinition均⽅根误差是什么?在构建了预测模型后,我们需要一种⽅法来衡量模型预测的准确性。"均⽅根误差"(RootMeanSquaredError,简称RMSE)就是—种常⽤的评估指标,特别适⽤于回归问题(即预测连续数值的问题,如预测温度)。RMSE的特点ThecharacteristicsofRMSE对误差敏感由于RMSE计算中包含误差的平⽅项,它对较⼤的误差(预测值与真实值差异很⼤的情况)更为敏感。一个较⼤的离群误差会对RMSE的值产⽣显著影响。单位与真实值相同RMSE的单位与预测⽬标变量(y_true)的单位是相同的。例如,如果预测的是温度(单位:℃),那么RMSE的单位也是℃。这使得RMSE的结果更易于理解和解释。越⼩越好RMSE的值越⼩,表示模型的预测误差越⼩,模型的性能就越好。理想情况下,RMSE为0表示模型完美预测,但实际应⽤中这⼏乎不可能达到。通常会⽐较不同模型的RMSE值,选择RMSE较⼩的模型。RMSE是回归模型(预测连续值)

最常⽤的评估指标之⼀

,在⽔⽂预测、⽓象预测等领域⼴泛应⽤

。02第二节使⽤RMSE评估模型性能EvaluatethemodelperformanceusingRMSE计算RMSE的Python函数ThePythonfunctionforcalculatingRMSERMSE计算函数import

numpy

as

npfrom

sklearn.metrics

import

mean_squared_errordef

calculate_rmse(y_true,y_pred):"""计算均⽅根误差

(RMSE)."""mse=mean_squared_error(y_true,y_pred)rmse=

np.sqrt(mse)return

rmse输出示例#假设这些是真实值y_true=

[20.5,21.3,

22.1,

20.8,

21.5]#假设这些是模型预测值y_pred=

[20.1,21.5,

21.7,

20.3,

22.0]#计算RMSErmse=calculate_rmse(y_true,

y_pred)print(f"RMSE:{rmse:.2f}

°C")使⽤RMSE评估模型-代码1UsetheRMSEevaluationmodel-Code1import

pandas

as

pdfrom

prophet

import

Prophetfromsklearn.ensembleimport

RandomForestRegressorfrom

sklearn.model_selection

import

train_test_splitfrom

sklearn.metrics

import

mean_squared_errorimport

numpy

as

npdef

calculate_rmse(y_true,y_pred):"""计算均⽅根误差

(RMSE)."""mse=mean_squared_error(y_true,y_pred)rmse=

np.sqrt(mse)return

rmse#

1.加载

Excel

⽂件try:df=pd.read_excel("data.xlsx")print("成功加载data.xlsx⽂件!")exceptFileNotFoundError:print("错误:找不到data.xlsx⽂件!

请确保⽂件在当前⽬录下。

")

exit()使⽤RMSE评估模型-代码2UsetheRMSEevaluationmodel-Code2#2.检查必要的列是否存在if

'Date'not

in

df.columns

or

'Temperature(℃)'

not

in

df.columns:print("错误:

Excel⽂件中缺少必要的列('Date'或'Temperature(℃)')。请检查列名是否正确。

")#3.为

Prophet

模型进⾏数据预处理df

[

'Date']=pd.to_datetime(df

[

'Date'],format=

'%Y-%m-%d%H:%M:%S')prophet_df=df.rename(columns={

'Date':

'ds',

'Temperature(℃)':

'y'})#4.初始化和训练Prophet

模型prophet_model=

Prophet()prophet_model.fit(prophet_df)#5.使⽤

Prophet

模型进⾏预测prophet_forecast_on_train=prophet_model.predict(prophet_df[['ds']])交叉验证更可靠使⽤RMSE评估模型-代码3UsetheRMSEevaluationmodel-Code3#6.为随机森林模型进⾏数据预处理df

[

'Date_timestamp']=df

[

'Date'].astype(

'int64')//

10**9df

[

'Temperature(℃)_lag1']=df

[

'Temperature(℃)'].shift(1)df

[

'month']=

df

[

'Date'].dt.monthdf

['day_of_year']=df

[

'Date'].dt.dayofyeardf

['day_of_week']=df

[

'Date'].dt.dayofweekdf

[

'month_sin']=np.sin(2

*

np.pi

*

df

[

'month']

/

12)df

[

'month_cos']=np.cos(2

*

np.pi

*

df

[

'month']

/

12)#6.1使⽤原始时间戳进⾏预测prophet_forecast_train=prophet_model.predict(prophet_df

[

[

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

['prophet_yhat']=prophet_forecast_train

[

'yhat'].values#6.2为随机森林准备特征和⽬标变量X=df

[

[

'Date_timestamp',

'Temperature(℃)_lag1',

'month',

'day_of_year',

'day_of_week',

'month_sin',

'month_cos',

'prophet_yhat']].valuesy=df

[

'Temperature(℃)'].values#6.3处理缺失值valid_indices=~np.isnan(y)&~np.isnan(X).any(axis=1)X=X[valid_indices]y=y[valid_indices]#同时,我们也要对齐prophet_df以便后续评估Prophet时真实值和预测值能对应prophet_df_aligned_for_eval=prophet_df[valid_indices].copy()prophet_predictions_aligned_for_eval=prophet_forecast_on_train[valid_indices].copy()使⽤RMSE评估模型-代码4UsetheRMSEevaluationmodel-Code4#7.划分随机森林模型的训练集和测试集X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.2,

random_state=42)#8.创建和训练随机森林回归模型rf_model=RandomForestRegressor(n_estimators=100,

random_state=42)rf_model.fit(X_train,y_train)#9.使⽤随机森林模型进⾏预测y_pred_rf=

rf_model.predict(X_test)#10.

使⽤

RMSE

评估模型性能#为了评估,

我们需要真实的观测值。

这⾥我们假设使⽤训练集的最后—部分数据作为评估的真实值#注意:在实际应⽤中,你需要使⽤验证集/测试集的真实值,

这⾥是为了代码演示简单eval_size=

30使⽤RMSE评估模型-代码5UsetheRMSEevaluationmodel-Code5#

10.1评估Prophet

模型true_values_prophet=df

[

ITemperature(℃)I].tail(eval_size).values

#真实的温度值predicted_values_prophet=prophet_model.predict(prophet_df.tail(eval_size))

[

IyhatI].values

#获取训练集最后30个点的预测值rmse_prophet=calculate_rmse(true_values_prophet,predicted_values_prophet)print(f"时间序列模型模型RMSE:{rmse_prophet:.2f}

°C")#

10.2评估随机森林模型true_values_rf=y_test

#真实的温度值rmse_rf=calculate_rmse(true_values_rf,y_pred_rf)print(f"随机森林模型RMSE:{rmse_rf:.2f}

°C")模型⽐较结果Modelcomparisonresults对上述数据的分析结果如下:随机森林模型表现更好:

随机森林模型的RMSE为1.77°C,

明显⼩于Prophet模型的RMSE值2.69°C。

这意味着在我们的数据上,

随机森林模型的预测结果与真实值之间的误差平均⽽⾔更⼩

,模型表现更好。预测精度:

随机森林模型的预测精度⽐Prophet模型⾼

,也就是说,

随机森林模型在预测温度时更接近真实值。预测偏差:

随机森林的预测值,平均来说,偏离真实值1.77°C,⽽时间序列模型的预测值,平均来说,偏离真实值2.69°C。模型⽐较结果Modelcomparisonresults对上述数据的分析结果如下:随机森林模型表现更好:

随机森林模型的RMSE为1.77°C,

明显⼩于Prophet模型的RMSE值2.69°C。

这意味着在我们的数据上,

随机森林模型的预测结果与真实值之间的误差平均⽽⾔更⼩

,模型表现更好。预测精度:

随机森林模型的预测精度⽐Prophet模型⾼

,也就是说,

随机森林模型在预测温度时更接近真实值。预测偏差:

随机森林的预测值,平均来说,偏离真实值1.77°C,⽽时间序列模型的预测值,平均来说,偏离真实值2.69°C。模型⽐较结果Modelcomparisonresults注意事项Prophet:验证基于训练集的一部分随机森林:验证基于独立的测试集对时间序列模型引入交叉验证03第三节交叉验证与RMSECross-validationandRMSE交叉验证与RMSE-代码1Cross-validationandRMSE-Code1import

pandas

as

pdfrom

prophet

import

Prophetfrom

prophet.diagnostics

import

cross_validation,performance_metricsfromsklearn.ensembleimport

RandomForestRegressorfrom

sklearn.model_selection

import

train_test_splitfrom

sklearn.metrics

import

mean_squared_errorimport

numpy

as

npdef

calculate_rmse(y_true,y_pred):"""计算均⽅根误差

(RMSE)."""mse=mean_squared_error(y_true,y_pred)rmse=

np.sqrt(mse)return

rmse#

1.加载数据try:df=pd.read_excel("data.xlsx")print("成功加载data.xlsx⽂件!")exceptFileNotFoundError:print("错误:找不到data.xlsx⽂件!

请确保⽂件在当前⽬录下。

")exit()交叉验证与RMSE-代码2Cross-validationandRMSE-Code2#2.检查必要的列是否存在if

'Date'not

in

df.columns

or

'Temperature(℃)'

not

in

df.columns:print("错误:

Excel⽂件中缺少必要的列('Date'或'Temperature(℃)')。请检查列名是否正确。

")exit()#3.

数据预处理for

Prophetdf

[

'Date']=pd.to_datetime(df

[

'Date'],format=

'%Y-%m-%d%H:%M:%S')prophet_df=df.rename(columns={

'Date':

'ds',

'Temperature(℃)':

'y'})#4.初始化和训练Prophet

模型prophet_model=

Prophet()prophet_model.fit(prophet_df)#5.

时间序列交叉验证for

Prophet#设置交叉验证参数initial=

'365

days'period=

'180

days'horizon=

'30

days'#执⾏交叉验证cv_df=cross_validation(prophet_model,initial=initial,period=period,

horizon=horizon)初始训练期的大小每次训练数据增加的周期预测期的大小交叉验证与RMSE-代码3Cross-validationandRMSE-Code3#

计算Prophet交叉验证的性能指标(例如RMSE)performance_df=performance_metrics(cv_df)rmse_prophet=performance_df

[

'rmse'].mean()print(f"时间序列模型交叉验证RMSE:{rmse_prophet:.2f}

°C")#6.数据预处理

for

Random

Forestdf

[

'Date_timestamp']=df

[

'Date'].astype(

'int64')//

10**9df

[

'Temperature(℃)_lag1']=df

[

'Temperature(℃)'].shift(1)df

[

'month']=

df

[

'Date'].dt.monthdf

['day_of_year']=df

[

'Date'].dt.dayofyeardf

['day_of_week']=df

[

'Date'].dt.dayofweekdf

[

'month_sin']=np.sin(2

*

np.pi

*

df

[

'month']

/

12)df

[

'month_cos']=np.cos(2

*

np.pi

*

df

[

'month']

/

12)#6.1使用原始Prophet模型在整个数据集上的预测作为RF特征prophet_forecast_train=prophet_model.predict(prophet_df

[

[

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

df

['prophet_yhat']=prophet_forecast_train

[

'yhat'].values#6.2为随机森林准备特征和⽬标变量X=df

[

[

'Date_timestamp',

'Temperature(℃)_lag1',

'month',

'day_of_year',

'day_of_week','month_sin',

'month_cos',

'prophet_yhat']].valuesy=df

[

'Temperature(℃)'].values交叉验证与RMSE-代码4Cross-validationandRMSE-Code4#6.3

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

[valid_indices]y=

y

[valid_indices]#7.

随机森林的训练集和测试集划分X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.2,

random_state=42)#8.创建并训练随机森林回归模型rf_model=RandomForestRegressor(n_estimators=100,

random_state=42)rf_model.fit(X_train,y_train)#9.使⽤随机森林进⾏预测y_pred_rf=

rf_model.predict(X_test)#10.评估随机森林模型(使⽤RMSE)rmse_rf=calculate_rmse(y_test,y_pred_rf)print(f"随机森林模型RMSE:{rmse_rf:.2f}

°C")模型评估结果可视化VisualizationofthemodelevaluationresultsProphet:交

温馨提示

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

评论

0/150

提交评论