版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
精准考量模型评估
(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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 检验科血常规检测指南
- 24节气字体设计说明
- 毕业设计软件工程项目实施纲要
- 肾内科急性肾损伤的监测与治疗策略
- 汽车喷涂技术教学体系设计
- 老年医学科老年人褥疮护理要点
- (2026.05.20)参加廉政警示教育学习心得体会
- 《海燕》高尔基教学设计
- 《跨学科实践:制作微型密度计》课件
- 寝室设计介绍
- 2026年水利水电安全b证预测试题及完整答案详解【典优】
- 考点主考校长在2026年高考考务工作会议上的讲话:高考在即责任如山慎终如始
- 2026中国城市咖啡发展报告
- 2026年甘肃高考政治真题试卷(含答案)
- 2025年基本级执法资格考试真题及参考答案
- 人教版高中生物选择性必修3《生物技术与工程》模块综合测评卷(一)原卷+答案
- 初中数学九年级下册《投影与视图》单元整体教学设计 -2
- 3.1 地球是我们的家园 课件(内嵌视频) 2025-2026学年教科版科学三年级下册
- 2026年专业技术人员继续教育公需科目考试试题及答案
- 素养导向的深度学习设计:人教版九年级化学第五单元《化学方程式》导学案
- 2026湖北机场集团招聘笔试备考试题及答案解析
评论
0/150
提交评论