1

我正处于R机器学习的开始阶段,我很难相信没有软件包可以解决不同类型的回归算法的成本函数。例如,如果我想解决的成本函数的回归,手工的方式将低于:在R中应用成本函数

https://www.r-bloggers.com/logistic-regression-with-r-step-by-step-implementation-part-2/

# Implement Sigmoid function 
sigmoid <- function(z) 
{ 
g <- 1/(1+exp(-z)) 
return(g) 
} 

#Cost Function 
cost <- function(theta) 
{ 
m <- nrow(X) 
g <- sigmoid(X%*%theta) 
J <- (1/m)*sum((-Y*log(g)) - ((1-Y)*log(1-g))) 
return(J) 
} 

##Intial theta 
initial_theta <- rep(0,ncol(X)) 

#Cost at inital theta 
cost(initial_theta) 

在GLM功能是有办法来自动做到这一点?或者,对于我应用的每种算法,是否需要手动执行此操作?

+0

否不必例如参见的'glmnet'功能帮助页面从包'glmnet'即'库(glmnet); X =矩阵(RNORM(100 * 20),100,20 ); g2 = sample(1:2,100,replace = TRUE); fit2 = glmnet(x,g2,family =“binomial”)' – OdeToMyFiddle

回答

1

我们可以使用optim进行优化或使用glm直接

set.seed(1) 
X <- matrix(rnorm(1000), ncol=10) # some random data 
Y <- sample(0:1, 100, replace=TRUE) 

# Implement Sigmoid function 
sigmoid <- function(z) { 
    g <- 1/(1+exp(-z)) 
    return(g) 
} 

cost.glm <- function(theta,X) { 
    m <- nrow(X) 
    g <- sigmoid(X%*%theta) 
    (1/m)*sum((-Y*log(g)) - ((1-Y)*log(1-g))) 
} 

X1 <- cbind(1, X) 
optim(par=rep(0,ncol(X1)), fn = cost.glm, method='CG', 
     X=X1, control=list(trace=TRUE)) 
#$par 
#[1] -0.067896075 -0.102393236 -0.295101743 0.616223350 0.124031764 0.126735986 -0.029509039 -0.008790282 0.211808300 -0.038330703 -0.210447146 
#$value 
#[1] 0.6255513 
#$counts 
#function gradient 
#  53  28 

glm(Y~X, family=binomial)$coefficients 
# (Intercept)   X1   X2   X3   X4   X5   X6   X7   X8   X9   X10 
#-0.067890451 -0.102411613 -0.295104858 0.616228141 0.124017980 0.126737807 -0.029523206 -0.008790988 0.211810613 -0.038319484 -0.210445717 

下图显示了成本和optim迭代计算的系数如何收敛与glm计算的人。

enter image description here

+1

谢谢!欣赏它 –