Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何用最优化函数编码R中的正则化(惩罚)多元逻辑回归_R_Optimization_Regression_Regularized - Fatal编程技术网

如何用最优化函数编码R中的正则化(惩罚)多元逻辑回归

如何用最优化函数编码R中的正则化(惩罚)多元逻辑回归,r,optimization,regression,regularized,R,Optimization,Regression,Regularized,我用手写梯度函数在R中编码了一个正则化(惩罚)多元逻辑回归。 它工作正常,但问题是它太慢了。有没有办法通过使用优化函数来提高速度 我看过这段代码,但它没有使用优化函数。 有人建议我使用带有“BFGS”方法的optim函数。但我不知道如何创建代价函数(J)和系数方向(gra)-尤其是系数方向的部分 谢谢 > ################################################# > # prepare dataset to solve logistic r

我用手写梯度函数在R中编码了一个正则化(惩罚)多元逻辑回归。 它工作正常,但问题是它太慢了。有没有办法通过使用优化函数来提高速度

我看过这段代码,但它没有使用优化函数。

有人建议我使用带有“BFGS”方法的optim函数。但我不知道如何创建代价函数(J)和系数方向(gra)-尤其是系数方向的部分

谢谢

> #################################################
> # prepare dataset to solve logistic regression
> vY  <- c(1,1,1,1,1,0,0,0,0,0)

> vX1 <- c(1,3,5,2,7,6,9,7,8,9)
> vX2 <- c(1,0,0,0,0,0,0,2,1,1)
> mydata <- data.frame(y=vY,u=vX1,v=vX2)
> 
> #################################################
> # solve by hand written gradient
> vHiFeatures <- 1 #6
> la <- 0
> alpha <- 0.3
> 
> # plot the data
> plot(mydata$u[mydata$y == 0], mydata$v[mydata$y == 0], xlab="u", ylab="v")
> points(mydata$u[mydata$y == 1], mydata$v[mydata$y == 1], col="blue", pch=3)
> legend("topright", c("y=0","y=1"), pch=c(1, 3), col=c("black", "blue"), bty="n")
> 
> # build high order feature vector
> hi.features = function (f1,f2,deg) {
+   n = ncol(f1)
+   ma = matrix(rep(1,length(f1)))
+   for (i in 1:deg) {
+     for (j in 0:i)
+       ma = cbind(ma, f1^(i-j) * f2^j)
+   }
+   return(ma)
+ } 
> # sigmoid function
> g <- function (z) {
+   return (1 / (1 + exp(-z) ))
+ } # plot(g(c(1,2,3,4,5,6)), type="l")
> h <- function (x,th) {
+   return(g(x %*% th))
+ } 
> # cost function
> J <- function (x,y,th,m,la) {
+   pt = th
+   pt[1] = 0
+   A = (la/(2*m))* t(pt) %*% pt
+   return( -1/m * sum(y * log(h(x,th)) + (1 - y) * log(1 - h(x,th))) + A)
+ } 
> # gradient 
> grad <- function (x,y,th,m,la=1,al=1) {
+   G = (la/m * th)
+   G[1,] = 0
+   th <- th - al* ((1/m * t(x) %*% (h(x,th) - y)) +  G)
+   th
+ } 
> 
> m = length(mydata$u) # samples
> x = hi.features(mydata$u, mydata$v, vHiFeatures)
> n = ncol(x) # features
> y = matrix(mydata$y, ncol=1)
> 
> # use the cost function to check is works
> th1 <- matrix(0,n)
> jiter = array(0,c(100000,1))
> for (i in 1:100000) {
+   jiter[i] = J(x,y,th1,m,la)
+   # th1 = th1 - solve(H(x,y,th1,m,la)) %*% grad(x,y,th1,m,la) 
+   th1 <- grad(x,y,th1,m,la,alpha) 
+ }
> # check that is converging correctly
> plot(jiter, xlab="iterations", ylab="cost J", type="l")
> th1
          [,1]
[1,]  7.447780
[2,] -1.116073
[3,] -2.708777
> 
> #################################################
> # solve by glm function
> dTemp <- data.frame(y=y,x)
> # oModel <- glm(as.factor(y)~., dTemp, family=binomial(link=logit))
> oModel <- glm(as.factor(y)~., dTemp[,-2], family="binomial")
> oModel

       Call:  glm(formula = as.factor(y) ~ ., family = "binomial", data = dTemp[, 
    -2])

       Coefficients:
       (Intercept)           X2           X3  
             7.448       -1.116       -2.709  

       Degrees of Freedom: 9 Total (i.e. Null);  7 Residual
       Null Deviance:       13.86 
       Residual Deviance: 4.633     AIC: 10.63
>#################################################
>#准备数据集以解决逻辑回归问题
>vY vX1 vX2 mydata
> #################################################
>#手写梯度求解
>阿尔法酒店
>#绘制数据
>绘图(mydata$u[mydata$y==0],mydata$v[mydata$y==0],xlab=“u”,ylab=“v”)
>点数(mydata$u[mydata$y==1],mydata$v[mydata$y==1],col=“blue”,pch=3)
>图例(“右上角”、c(“y=0”、“y=1”)、pch=c(1,3)、col=c(“黑色”、“蓝色”)、bty=“n”)
> 
>#构建高阶特征向量
>高特性=功能(f1、f2、deg){
+n=ncol(f1)
+ma=矩阵(代表(1,长度(f1)))
+用于(1:deg中的i){
+对于(0:i中的j)
+ma=cbind(ma,f1^(i-j)*f2^j)
+   }
+返回(ma)
+ } 
>#S形函数
>g h#成本函数
>J#梯度
>梯度m=长度(mydata$u)#样本
>x=高级功能(mydata$u、mydata$v、vHiFeatures)
>n=ncol(x)#特征
>y=矩阵(mydata$y,ncol=1)
> 
>#使用成本函数检查is工作
>th1 jiter=阵列(0,c(100000,1))
>对于(1:100000中的i){
+jiter[i]=J(x,y,th1,m,la)
+#th1=th1-求解(H(x,y,th1,m,la))%*%grad(x,y,th1,m,la)
+th1#检查是否正确会聚
>绘图(jiter,xlab=“迭代”,ylab=“成本J”,type=“l”)
>th1
[,1]
[1,]  7.447780
[2,] -1.116073
[3,] -2.708777
> 
> #################################################
>#用glm函数求解
>dTemp#oModel oModel
调用:glm(公式=as.factor(y)~,family=“二项式”,data=dTemp[,,
-2])
系数:
(截距)X2 X3
7.448       -1.116       -2.709  
自由度:共9个(即零);剩余7个
零偏差:13.86
剩余偏差:4.633 AIC:10.63