我需要进行带交叉验证的主成分回归(Principle Component Regression),但在Python中找不到相应的软件包。我编写了自己的PCR类,但与R的pls包进行测试时,在高维数据(~50000个特征)上表现显著较差,并且速度更慢,尽管我仍不确定原因,但这是另一个问题。由于我的其他代码都是用Python编写的,为了节省时间,我决定最好的方法可能是编写一个利用R中PLS软件包的R函数。以下是该函数:
R_pls <-function(X_train,y_train,X_test){
library(pls)
X<-as.matrix(X_train)
y<-as.matrix(y_train)
tdata<-data.frame(y,X=I(X))
REGmodel <- pcr(y~X,scale=FALSE,data=tdata,validation="CV")
B<-RMSEP(REGmodel)
C<-B[[1]]
q<-length(C)
degs<-c(1:q)
allvals<-C[degs%%2==0]
allvals<-allvals[-1]
comps<-which.min(allvals)
xt<-as.matrix(X_test)
ndata<-data.frame(X=I(xt))
ypred_test<-as.data.frame(predict(REGmodel,ncomp=comps,newdata=ndata,se.fit=TRUE))
ntdata<-data.frame(X=I(X))
ypred_train<-as.data.frame(predict(REGmodel,ncomp=comps,newdata=ntdata,se.fit=TRUE))
data_out=list(ypred_test=ypred_test,ypred_train=ypred_train)
return(data_)
}
我发现了很多关于如何访问R内置函数的信息,但对于这种情况似乎没有找到任何内容。因此,我尝试了以下方法:
import rpy2.robjects as ro
prs=ro('R_pls')
R_pls是上面所述的R函数。这将产生
TypeError: 'module' object is not callable.
有什么想法可以让这个工作起来,如果有更好的方法,我很乐意听取建议。
谢谢。