微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

每个数据帧行R的并行处理特征提取

如何解决每个数据帧行R的并行处理特征提取

我正在尝试在 R 中执行一些特征提取,并且我想使用并行处理。我有一个数据框,其中包含初始列,如“id”、“name”和“class”,然后是几千列数字数据。我的特征提取功能如下所示:

extractFeatures = function(thedata,x,alldata,prominentSigs)
{
  #thedata:           dataframe with a single row and multiple columns: 
  #                       class,name,id,numeric data (lots of cols)
  #x:                 vector of x-values
  #alldata:           dataframe containing all the signals
  #prominentSigs:     flattened dataframe containing prominent signals
  
  s = as.numeric(thedata[,4:ncol(thedata)])
  p = pracma::findpeaks(signal::sgolayfilt(s,p=2,n=23),nups=2,ndowns=2,minpeakheight=mean(s))
  
  f = data.frame(
                  id                  = thedata$id[1],class               = thedata$class[1],num_peaks           = dim(p)[1],base_peak           = x[p[which.max(p[,1]),2]],base_peak_width     = x[p[which.max(p[,4]] - x[p[which.max(p[,3]],max_peak            = x[p[which.max(p[,2]),min_peak            = x[p[which.min(p[,mean_peak_wn        = mean(x[p[,2]]),sd_peak_wn          = sd(x[p[,peak_density        = dim(p)[1]/(max(x) - min(x)),mean_peak_intensity = mean(p[,sd_peak_intensity   = sd(p[,mean_intensity      = mean(s),sd_intensity        = sd(s),mean_peak_width     = mean(x[p[,4]] - x[p[,3]]),sd_peak_width       = sd(x[p[,3]])
                )
  
  #similarity features
  measure = "pearsonCorrelation"
  for (ii in 1:nrow(prominentSigs))
  {
    n = paste0("simTo",gsub(" ","",prominentSigs$name[ii]))
    s2 = as.numeric(prominentSigs[ii,4:ncol(prominentSigs)])
    f[[n]] = similarity(s,s2,measure)
  }
  s2 = rbind(as.matrix(alldata[(alldata$id %in% setdiff(alldata$id,thedata$id)) & (alldata$class == 1),4:ncol(alldata)]),as.matrix(prominentSigs[,4:ncol(prominentSigs)]))
  f$simToTrainSig = similarity(s,t(s2),measure)
  return(f)
}


similarity = function(s1,measure)
{
  switch(measure,cosine = {out = lsa::cosine(s1,s2)},squaredcosine = {out = (lsa:cosine(s1,s2))^2},modcosine = {  
                      out = (
                              ((Matrix::tcrossprod(sqrt(sig1),sqrt(sig2)))^2) / 
                                Matrix::tcrossprod(rowSums(sig1),rowSums(sig2))
                            )
                      },pearsonCorrelation = {out = cor(s1,s2)}
        )
  return(max(out))
}

因此,您会注意到,除了我创建的函数 (pracma::findpeaks) 之外,我还使用了多个外部函数signal::sgolayfiltsimilarity)。输入 thedata 是来自较大数据框 alldata 的单行,我想从 alldata 的每一行中提取这些特征。我可以这样做的一种方法是使用 w %>% split(.$id) %>% future_map_dfr(.f=extractFeatures,x = x,alldata = w,prominentFentanyl = prominentFentanyl),其中 w 是包含 idclassname(a bunch of numeric columns) 列的数据框.在这种情况下,split 函数为此使用了相当多的处理时间(不完全确定为什么),总共 48 秒中的 13.20 秒用于 327 个签名。

我想知道是否有可以运行的并行处理函数,该函数将对数据帧的每一行进行操作,并返回一个行数相同但列数不同的新数据帧原始数据框。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?