我正在尝试为逻辑回归编写成本函数,并且只使用for循环设法这样做。我想使用apply函数,但是有一些问题。 鉴于以下数据:
ones exam1 exam2 decision
[1,] 1 34.62366 78.02469 0
[2,] 1 30.28671 43.89500 0
[3,] 1 35.84741 72.90220 0
[4,] 1 60.18260 86.30855 1
[5,] 1 79.03274 75.34438 1
[6,] 1 45.08328 56.31637 0
回归函数只是参数和输入值的线性组合的sigmoid函数。
所以这是我写的代码:
sigmoid <- function(y){
return (1/(1 + exp(-y)))
}
hyp <- function(param, input){
return (sigmoid(param %*% input))
}
cost <- function(param, temp){
costcumul <- 0
for(i in 1:length(temp[,1])){
costcumul <- costcumul + temp[i,4]*log(hyp(param,temp[i,-4])) + (1-temp[i,4])*log(1 hyp(param,temp[i,-4]))
}
return ((-1)*costcumul/length(temp[,1]))
}
在使用成本函数之前,我将data.frame转换为矩阵,并将该矩阵用作成本函数中的参数。
我想在cost()函数中使用apply()函数,而不是遍历每一行,在使用apply之后,我想使用rowSums对每一行求和。
首先,我重写了成本函数,以便它只计算单行的成本:
testfunc <- function(p,x){
return (x[4]*log(hyp(p,x[-4])) + (1-x[4])*log(1-hyp(p,x[-4])))
}
然后我尝试以下列方式使用apply:
apply(temp,1,testfunc,param = "param")
我收到错误的形式:“FUN中的错误(newX [,i],...):未使用的参数(param =”param“)”
我认为我的问题是指定函数的参数。在我的testfunc()函数中我有参数x,我是否需要在apply()的调用中指定该参数,或者apply函数是否知道在这种情况下非指定参数应该是一行temp矩阵?