r - 针对多个不同站点的参数进行优化
问题描述
我的数据类似于以下内容
Site Unknown_Parameter X Y Z Predicted Actual
A 2 3 4 2 5 6
A 2 4 3 2 7 5
B 3 6 8 9 12 9
B 3 4 6 2 10 10
ETC...
我正在尝试创建一个函数,通过确定未知参数的最佳值来最小化每个站点的 RMSE。我可以使用以下伪代码一次为单个站点执行此操作
fn <- function(unknown_parameter) {
df$Predicted <- calculations with unknown_parameter and X Y Z
RMSE <- sqrt(mean((df$Predicted - df$Actual)^2))
RMSE
}
optimize(fn, c(1,10))
我能够获得未知参数的最佳值以及单个站点的 RMSE,但由于我有 100 个站点,因此我想将其扩展到每个站点。理想情况下,我希望我的输出如下所示
Site Optimal_Value RMSE
A 1.7 2.45
B 1.2 3.24
C 1.3 9.21
ETC...
我一直在尝试使用 split 命令,但这会将我的数据转换为列表,我不确定如何使用它。有什么想法吗?
解决方案
虽然split
通过输入因子的值by
生成子集数据帧列表,但考虑也通过一个或多个因子对数据帧进行子集,但也可以将子集传递给函数。并将所有数据帧绑定在一起运行一个do.call(rbind, ...)
返回列表。
# USER-DEFINED METHOD RECEIVING subsetted df AS INPUT AND RETURNING dataframe AS OUTPUT
subset_process <- function(subdf) {
fn <- function(unknown_parameter) {
subdf$Predicted <- calculations with unknown_parameter and X Y Z
RMSE <- sqrt(mean((subdf$Predicted - subdf$Actual)^2))
return(RMSE)
}
opt <- optimize(fn, c(1,10))
tmp <- data.frame(Site = subdf$Site[[1]],
Optimal Value = opt,
RMSE = fn)
return(tmp)
}
# SPLIT + RUN METHOD ON EACH SUBSET
df_list <- by(df, df$Site, FUN=subset_process)
# APPEND ALL DF ELEMENTS INTO MASTER DF
final_df <- do.call(rbind, df_list)
推荐阅读
- php - SQLSTATE[HY000] [1045] 用户'root'@'localhost'的访问被拒绝(使用密码:NO)(SQL:select * from `permissions`)
- docker - 尝试访问 traefik 仪表板时出现 404
- jquery - Internet Explorer 11 在交互超过 1000 行并使用 jQuery 隐藏每个元素时崩溃
- python - Python将xml文件转换为csv
- ffmpeg - 使用 ffmpeg 发送 udp cbr 内容会导致内存问题
- c# - AspNet Core - 动态剃刀视图无法显示控制器中传递的值
- python - ValueError: x, y, and format string must not be None 是什么意思?
- mysql - MySql如何在一个项目上远程协作
- apache-nifi - 如何配置安全的 Minifi-C++ 实例以从安全的 C2 服务器中提取?
- java - 无法在 Volley 中解析符号 queue.add(stringRequest)