Foreach Parallel - 多个输出的组合功能

2024-05-26

我有一组 45000 个用户和 40 多部电影的评分。我需要根据每个用户与其他用户的皮尔逊相关性来预测每个用户的新评分。我还需要存储相似用户的集合以及每个用户-电影组合的相似性。我使用 foreach 包并行执行循环。我设法编写的代码是这样的:

library(foreach)

x <- matrix(rnorm(1:1000), nrow = 100 , ncol =10 )
df = list()

# correlation matrix
cor_mat <- cor(t(x))
cor_mat = abs(cor_mat)
# similarity limits
upper = 1
lower = 0.04


# Initiating parallel environment
cl = makeCluster(3)
registerDoParallel(cl)

res <- foreach(i = 1:nrow(x) , .combine = rbind,.packages=     c('base','foreach')) %dopar%{
      foreach(j = 1:ncol(x) , .combine = c, .packages = c('base','foreach')) %do%{

sim_user = which(cor_mat[i,] >= lower & cor_mat[i,] < upper)

 bx = as.numeric(t(x[sim_user,j]) %*%  
  cor_mat[sim_user,j]/sum(cor_mat[sim_user,j]))
 df[[length(df)+1]] = data.frame(i,j,sim_user,cor_mat[sim_user,j])

 return(bx)

  }
 }
stopCluster(cl)

我能够完成一半的任务,即根据 foreach 输出“res”创建预测评分矩阵。但是我要附加相似用户列表的列表 df 在 foreach 循环末尾是空的。

可以编写什么定制的组合函数来输出预测评分矩阵和相似用户列表?


对于多个输出函数,最好返回列表中的所有内容。在这种情况下,这意味着您需要指定自己的函数来组合数据。在这里,我每次返回两个元素:bx 和 df。因此,我的组合函数分别组合这两个元素,并将它们返回到长度为 2 的列表中。

combine_custom_j <- function(LL1, LL2) {

  bx <- c(LL1$bx, LL2$bx)
  dfs <- c(LL1$df, LL2$df)
  return(list(bx = bx, df = dfs))
}

combine_custom_i <- function(LL1, LL2) {

  bx <- rbind(LL1$bx, LL2$bx)
  dfs <- c(LL1$df, LL2$df) 
  return(list(bx = bx, df = dfs))

}

res <- foreach(i = 1:nrow(x) , .combine = combine_custom_i,.packages= c('base','foreach')) %dopar%{
  foreach(j = 1:ncol(x) , .combine = combine_custom_j, .packages = c('base','foreach')) %do%{

    sim_user = which(cor_mat[i,] >= lower & cor_mat[i,] < upper)

    bx = as.numeric(t(x[sim_user,j]) %*%  
                      cor_mat[sim_user,j]/sum(cor_mat[sim_user,j]))

    return(list(bx = bx, df = data.frame(i,j,sim_user,cor_mat[sim_user,j])))

  }
}

虽然我已经按照您的代码建议的列表返回了您的数据框,但我相信您可能想要rbind他们?在这种情况下,您只需更换c(LL1$df, LL2$df) by rbind(LL1$df, LL2$df)在两个组合功能中。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Foreach Parallel - 多个输出的组合功能 的相关文章

  • 在 R 中向散点图添加线条

    如何向图表添加线条 我做了以下 dat lt data frame xvar 1 20 rnorm 20 sd 10 yvar 1 20 rnorm 20 sd 10 zvar 1 20 rnorm 20 sd 10 plot dat 1
  • R - Plm 和 lm - 固定效应

    我有一个平衡面板数据集 df 本质上由三个变量组成 A B and Y 对于一堆独特识别的区域来说 它会随着时间的推移而变化 我想运行一个回归 其中包括区域 下面等式中的区域 和时间 年份 固定效应 如果我没记错的话 我可以通过不同的方式来
  • 选择 R 中的数据表中隐藏时(在绿色加号下方)列的显示顺序

    Context 使用 DataTables 库制作交互式表格时 当屏幕宽度对于列的数量和宽度来说太窄时 列将隐藏在绿色 号下 我有一个非常宽的表格 有 20 多列 其中一些内容非常冗长 因此某些列在所有屏幕宽度下总是隐藏的 每次隐藏新列时
  • 绘制点之间的所有线

    我有以下 R 代码 x lt c 0 01848598 0 08052353 0 06741172 0 11652034 y lt c 0 4177541 0 4042247 0 3964025 0 4074685 d lt data fr
  • kernlab 中 SVM 训练之外的核矩阵计算

    我正在开发一种新算法 该算法可以生成修改后的核矩阵以用于 SVM 训练 但遇到了一个奇怪的问题 出于测试目的 我比较了使用 kernelMatrix 接口和普通内核接口学习的 SVM 模型 例如 Model with kernelMatri
  • 在 R 中绘制 Likert 变量的堆积条形图

    假设我有一个如下所示的数据框 P Q1 Q2 1 1 4 1 2 2 3 4 3 1 1 4 其中的列告诉我哪个人相应地回答了问题 q1 q2 中的哪一个 这些问题需要按照 4 分李克特量表进行回答 例如 批准 表示 1 稍微批准 表示 2
  • twitterR 和 ROAuth R 软件包安装

    我在安装 CRAN 上的 twitteR 和 RAOuth 软件包时遇到一些问题 我尝试了几种不同的方法 在 Windows 下使用源代码 在 Ubuntu 下使用 RStudio 我尝试了以下命令 sudo apt get install
  • 在 R 中创建虚拟变量,排除某些情况为 NA

    我的数据看起来像这样 V1 V2 A 0 B 1 C 2 D 3 E 4 F 5 G 9 我想创建一个虚拟变量R where 0 1 1 2 3 4 and NA 0 5 9 应该很简单 有人可以帮忙吗 我们可以转换V2 into a fa
  • 使用 R 选择第一个非 NA 值

    df lt data frame ID c 1 1 1 2 3 3 3 test c NA 5 5 6 4 NA 7 3 NA 10 9 我想创建一个名为 value 的变量 它是每个单独 ID 测试的第一个非 NA 值 对于只有NA的个体
  • R 中的列乘以子字符串

    假设我有一个数据框 其中包含多个组件及其在多个列中列出的属性 并且我想对这些列运行多个函数 我的方法是尝试将其基于每个列标题中的子字符串 但我无法弄清楚如何做到这一点 下面是数据框的示例 Basket F Type 1 F Qty 1 F
  • 将每列的值乘以 R 中另一个 data.frame 中的权重

    我有两个data frames df and weights 代码如下 df看起来像这样 id a b d EE f 1 this 0 23421153 0 02324956 0 5457353 0 73068586 0 5642554 2
  • ddply 和aggregate 之间的区别

    有人可以通过以下示例帮助我了解聚合和 ddply 之间的区别 数据框 mydat lt data frame first rpois 10 10 second rpois 10 10 third rpois 10 10 group c re
  • 如何仅删除单括号并保留配对的括号

    你好 我亲爱的老师 R 用户朋友们 我最近开始认真学习正则表达式 最近我遇到了一种情况 我们只想保留配对括号 并省略未配对的 这是我的样本数据 structure list t1 c Book Pg 1 Website Online Jou
  • 使用 ggmap 截断密度多边形

    我在使用 R ggmap 绘制密度图时遇到问题 我的数据如下所示 gt head W date lat lon dist 1 2010 01 01 31 942 86 659 292 415 2 2010 01 10 32 970 84 1
  • 纵向比较 R 中的值...并进行扭转

    我有许多人在多达四个时间段进行的测试结果 这是一个示例 dat lt structure list Participant ID c A A A A B B B B C C C C phase structure c 1L 2L 3L 4L
  • R:如何获取该月的周数

    我是 R 新手 我想要该日期所属月份的周数 通过使用以下代码 gt CurrentDate lt Sys Date gt Week Number lt format CurrentDate format U gt Week Number 3
  • 如何在将两根柱子保持在一起的同时熔化柱子?

    我有这种宽格式的数据 我想将其转换为长格式 Cond Construct Line Plant Tube shoot weight shoot Tube root weight root 1 Standard NA NA 2 199 95
  • applyStrategy 错误

    我是R新手 最近运行后遇到以下错误applyStrategy函数来自quantstrat包裹 Error in eval expr envir enclos object signal not found Error in colnames
  • 闭包作为数据合并习惯的解决方案

    我正在尝试解决闭包问题 而且我think我发现了一个案例 他们可能会有所帮助 我有以下几部分需要处理 一组正则表达式 旨在清理状态名称 位于函数中 具有州名称 上述函数创建的标准化形式 和州 ID 代码的 data frame 用于链接两者
  • 如何使用 tidymodels 和工作流集在同一数据集上拟合多个不同的线性模型

    我想评估同一数据集上多个 主要是 线性回归模型的性能 我想也许使用tidymodels包连同workflowsets workflow set 可能会起作用 我按照这个例子here https workflowsets tidymodels

随机推荐