【问题标题】:Optimization of high number of parameters in RR中大量参数的优化
【发布时间】:2016-02-24 19:24:31
【问题描述】:

我正在尝试线性优化 R 中的预测准确性,但我一直在寻找收敛和方便的答案。

我的想法如下:我有一组 32 个要优化的参数。这 32 个参数是使用 'rnorm' 从正态分布中随机抽取的。

linCoeff <- rnorm(32,0,5)

(linCoeff 作为线性系数)。

这 32 个参数按以下方式组合:

myVal <-  (((clSigm*lCoeff[1])+lCoeff[2])*data[,1])+
          (((clSigm*lCoeff[3])+lCoeff[4])*data[,2])+
          (((clSigm*lCoeff[5])+lCoeff[6])*data[,3])+
          (((clSigm*lCoeff[7])+lCoeff[8])*data[,4])+
          (((clSigm*lCoeff[9])+lCoeff[10])*data[,5])+
          (((clSigm*lCoeff[11])+lCoeff[12])*data[,6])+
          (((clSigm*lCoeff[13])+lCoeff[14])*data[,7])+
          (((clSigm*lCoeff[15])+lCoeff[16])*data[,8])+
          (((clSigm*lCoeff[17])+lCoeff[18])*data[,9])+
          (((clSigm*lCoeff[19])+lCoeff[20])*data[,10])+
          (((clSigm*lCoeff[21])+lCoeff[22])*data[,11])+
          (((clSigm*lCoeff[23])+lCoeff[24])*data[,12])+
          (((clSigm*lCoeff[25])+lCoeff[26])*data[,13])+
          (((clSigm*lCoeff[27])+lCoeff[28])*data[,14])*data$indDV1+
          (((clSigm*lCoeff[29])+lCoeff[30])*data[,15])*data$indDV2+
          ((clSigm*lCoeff[31])+lCoeff[32])

我在哪里:

  • clSigm,为固定参数;

  • data[,i],这是我想要求和的 data.frame 上的值。

最后,它具有 16 个元素之和的形式,这给了我一个数值:'myVal'。 然后我应用一个激活函数,它给出了

  • -1 如果 'myVal' 为 >0 并且
  • 如果“myVal”为

然后我将它与我的输入(-1 和 +1 的列表)进行比较并输出平衡精度。

我想对这 32 个参数进行线性优化以找到最大 BACC,但使用传统的 R 方法并不能得到明显的结果,因为我永远不会收敛...

举个例子,我给 optim 的函数是:

retrieveVal <- function(lCoeff,data){
  clSigm <- 1/(1+exp(.5-(data$acc)))
  myVal <- (((clSigm*lCoeff[1])+lCoeff[2])*data[,1])+
          (((clSigm*lCoeff[3])+lCoeff[4])*data[,2])+
          (((clSigm*lCoeff[5])+lCoeff[6])*data[,3])+
          (((clSigm*lCoeff[7])+lCoeff[8])*data[,4])+
          (((clSigm*lCoeff[9])+lCoeff[10])*data[,5])+
          (((clSigm*lCoeff[11])+lCoeff[12])*data[,6])+
          (((clSigm*lCoeff[13])+lCoeff[14])*data[,7])+
          (((clSigm*lCoeff[15])+lCoeff[16])*data[,8])+
          (((clSigm*lCoeff[17])+lCoeff[18])*data[,9])+
          (((clSigm*lCoeff[19])+lCoeff[20])*data[,10])+
          (((clSigm*lCoeff[21])+lCoeff[22])*data[,11])+
          (((clSigm*lCoeff[23])+lCoeff[24])*data[,12])+
          (((clSigm*lCoeff[25])+lCoeff[26])*data[,13])+
          (((clSigm*lCoeff[27])+lCoeff[28])*data[,14])*data$indDV1+
          (((clSigm*lCoeff[29])+lCoeff[30])*data[,15])*data$indDV2+
          ((clSigm*lCoeff[31])+lCoeff[32])
  act <- c(lapply(myVal,FUN=activate))
  return(-BACC(inp,act))
}

然后:

optim(par=linCoeff,fn=retrieveVal,data=myData)

如果有人可以在这里提供帮助,我都会听到!

提前致谢。

【问题讨论】:

    标签: r optimization


    【解决方案1】:

    您可以尝试使用不同的优化器吗? IE。包rgenoudRcppDE 通常比optim 好。我自己会用这些包为你做一些测试,但由于你省略了 data 的任何值,所以这个例子实际上是不可重现的。

    【讨论】:

    • 您好,非常感谢您的回答!您可以认为数据的每一列的值都在 [-3;+3] 范围内,取自正态分布(很难给出所有数据集,但值接近分布)。您甚至可以尝试放弃第 14 和第 15 项,有一些比例因子一开始并不那么有用。但至少,非常感谢,我会尝试这两个包并回来!
    猜你喜欢
    • 1970-01-01
    • 2017-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-25
    相关资源
    最近更新 更多