2
所以我需要使用交叉驗證來進行主要組件迴歸,並且我無法在Python中找到這樣做的包。我編寫了自己的PCR類,但是當對R的pls軟件包進行測試時,它的性能明顯更差,對高維數據(〜50000個特徵)要慢得多,我仍然不確定爲什麼,但這是另一個問題。因爲我所有的其他代碼是在Python和節省時間的考慮,我決定最好的辦法可能只是能夠編寫利用PLS包河這裏的R函數的功能是:在Python中訪問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.
任何想法,我怎麼可能會得到這個工作,或者我願意接受建議,如果有可能是一個更好的方法。
由於
我很確定在sklearn中存在偏最小二乘迴歸和PCA分解。你有沒有試過看看它是否有你需要的東西?我意識到這不是對標題的直接回答,但它可能會有所幫助。 –
所以我確實使用sklearn.decomposition PCA和sklearn線性迴歸來構建PCR類,但是這並不等於R,我不知道爲什麼? –
儘管它本身並不執行pcr,但您可以隨時計算組件,然後用h2o執行lm/glm模型,該模型同時具有python和R接口。 http://docs.h2o.ai/h2o/latest-stable/h2o-docs/data-science/pca.html –