用R的优化函数拟合logistic回归

时间:2018-08-29 08:43:46

标签: r machine-learning

我想对二元分类问题进行逻辑回归,该问题可预测泰坦尼克号毒蛇是否幸存。这是keggle.com的泰坦尼克号比赛。我有一个混合数据,所以我有一些分类变量和连续变量。

我使用glm并获得了理想的结果。我的准确度是0.76。

glm.fit <- glm("Survived ~ Embarked.Q + Embarked.S + Fare + Parch + SibSp + Age + Sex.male + Pclass.3 + Pclass.2", 
           data = dummified_train, family = binomial)

但是,出于实践目的,我想手动进行此优化,并且还添加了正则化以获得更好的结果。至少看看正则化如何影响准确性。所以我做了以下事情:

首先,我编写了S型,成本和梯度函数。

 sigmoid = function(x,par) {

  #theta nx1  column vector of parameters  
  #x  mxn matrix 
  #n is the number of features
  #m is the number of obs

  1/(1+exp(-as.matrix(x)%*%par))
}




#X mxn matrix of obs
#y target vector
#theta  nx1 vector of parameters
#lambda regularization parameter


costreg <- function(x,y,par,lambda) {

  m <- dim(x)[1]
  n <- dim(x)[2]

  J <- 0


  temptheta <- par
  temptheta[1] <- 0

  for (i in 1:m){
    J <- J - y[i,] * log(sigmoid(x[i,],par)) - (1-y[i,])*log(sigmoid(x[i,],par))

  }

  J <- (J + lambda/2*sum(temptheta^2))/m

  return(J)


gradreg <- function(x,y,par,lambda) {


  m <- dim(x)[1]
  grad = rep(0, length(par))


  temptheta <- par
  temptheta[1] <- 0
  names(x) <- NULL 
  grad <- (1/m)*(t(as.matrix(x)) %*% (sigmoid(as.matrix(x),par)-as.matrix(y)) +lambda/m*temptheta)

}

我对变量进行了预处理和虚拟化。这是我的数据的样子:https://imgur.com/a/LuPBEbd

当我将glm fit参数用作初始参数并将正则化项lambda设置为0时,我期望对glm产生的激活类似。我使用优化函数优化参数。

   result <- optim(par = init_param, fn = costreg, gr = gradreg, x= dummified_train, y = train_target, lambda = 0, method = "BFGS" )

但是,我什至得到了负面的激活,而且我的结果没有任何意义。我看不到我在做什么错。任何帮助或评论表示赞赏。

0 个答案:

没有答案