我正在尝试使用从我的教授那里获得的代码将我的数据分成训练和测试数据,但是我遇到了错误。我认为这是因为数据格式,但我回去硬编码,没有任何作用。数据现在是矩阵形式,我相信代码用于预测逻辑回归的准确程度。
A = matrix(
c(64830,18213,4677,24761,9845,17504,22137,12531,5842,28827,66161,18852,5581,27219,10159,17527,23402,11409,8115,31425,68426,18274,5513,25687,10971,14104,19604,13438,6011,30055,69716,18366,5735,26556,11733,16605,20644,15516,5750,31116,73128,18906,5759,28555,11951,19810,22086,17425,6152,28469,1,1,1,0,1,0,0,0,0,1),
nrow = 10,
ncol = 6,
byrow = FALSE)
n<-row(A);
K<-ncol(A)-1;
x<-matrix(0,n,K);
for(i in 1:K){x[,i]<-A[,i];}
#A[,i] is 10long and x[,i] is 1long.
A[,i:length(x[,i])]=x[,i]
y<-A[,K+1];
#training/test data split:
idx<-sample(1:n,floor(n/2),replace=FALSE);
xtr<-x[idx,]; ytr<-y[idx];
xts<-x[-idx,]; yts<-y[-idx];
#fit the logistic model to it
myglm<-glmnet(xtr,ytr,family = "binomial");
#Error in if (is.null(np) | (np[2] <= 1)) stop("x should be a matrix with 2 or more columns") : argument is of length zero
#apply traning data to test data
mypred<-predict(myglm,newx=xts,type="response",s=0.01);
posteriprob<-mypred[,,1];
yhat<-matrix(1,nrow(xts),1);
for(i in 1:nrow(xts))
{
yhat[i]<-which.max(posteriprob[i,]);
}
acc<-sum(yhat+2==yts)/nrow(xts);
cat("accuracy of test data:", acc, "\n");
第一个forloop给了我这个错误:
x[, i] <- A[, i]
中的错误:
要替换的项目数不是替换长度的倍数
当我使用xtr/ytr
运行逻辑模型时,我在if (is.null(np) | (np[2] <= 1)) stop("x should be a matrix with 2 or more columns")
中收到错误:
参数长度为零
答案 0 :(得分:1)
对于第一个错误,这是一个错字。将n<-row(A)
更改为n<-nrow(A)
,它应该有效。但在此之后,A[,i:length(x[,i])]=x[,i]
会产生其他错误,因为A的大小是10x6而length(x[,i])
是10. Probaby你想在这里做的不同于当前编码的。
对于第二个错误,xtr
的大小应至少为n x 2
。此外,您的数据不适合二项式glm。观察结果应为1或0。