2016-02-24 50 views
0

我试图在R中线性优化预测的准确性,并且我在找到收敛和方便的答案时遇到困难。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和
  • 1如果 '设为myVal' 是0 <

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

我想优化线性的32个参数以找到最大BACC,但使用现有的R方法不给我probant的结果,因为我从来没有收敛......

举的例子中,函数I给的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) 

如果有人可以帮助在这里,我所有的听觉!

在此先感谢。

回答

0

你可以尝试使用不同的优化器?即包rgenoudRcppDE通常优于optim。我自己会为这些软件包做一些测试,但由于您已经忽略了data的任何值,所以这个例子不是真正可重复的。

+0

嗨,非常感谢您的回答!您可以考虑每个数据列的值位于[-3; +3]范围内,取自正态分布(难以给出所有数据集,但值接近分布)。 你甚至可以在尝试中放弃第14和第15个任期,起初有一些比例因子不太有用。 但至少,很多很多谢谢,我会尝试这2个包,回来! – GMaxG