2017-07-26 16 views
0

pythonスクリプトにrpy2を使っていくつかのRライブラリを埋め込みたいと思います。私はすでに "stats.lm"をうまく埋め込んでいますが、今は "randomForest"を埋め込みたいと思います。rpy2を使ってPythonからRライブラリ "randomForest"を呼び出す

import pandas as pd 
from rpy2.robjects.packages import importr 
from rpy2.robjects import r, pandas2ri 
import rpy2.robjects as robjects 

randomForest=importr('randomForest') 

pandas2ri.activate() 

#read data 
df = pd.read_csv('train.csv',index_col=0) 
rdf = pandas2ri.py2ri(df) 

#check 
print(type(rdf)) 
print(rdf) 

#Random Forest 
formula = 'target ~ .' 
fit_full = randomForest(formula, data=rdf) 

出力は次のようになります。私はすでにこのデータセットをモデル化するためにRに正常このパッケージを使用

Traceback (most recent call last): 

    File "<ipython-input-5-776f4072f19e>", line 2, in <module> 
    fit_full = randomForest(formula, data=rdf) 

TypeError: 'InstalledSTPackage' object is not callable 

。 "train.csv"は、数十万個のサンプル(行)と約94個の列(93個のフィーチャ(クラス整数)、1個のターゲット(クラスファクタ))のマトリックスです。ターゲット列には9つのクラス(Class_1、...、Class_9)があります。

----------------- EDIT -----------------

部分的な解決策は、直接であってもよいですモデルや予測が含まれている機能にコードを埋め込む:

import rpy2.robjects as robjects 
import rpy2 
from rpy2.robjects import pandas2ri 

rpy2.__version__ 

robjects.r(''' 
      f <- function() { 

        library(randomForest) 

        train <- read.csv("train.csv") 
        train1 <- train[sample(c(1:60000), 5000, replace = TRUE),2:95] 

        train1.rf <- randomForest(target ~ ., data = train1, 
              importance = TRUE, 
              do.trace = 100) 

        pred <- as.data.frame(predict(train1.rf, train1[1:100,1:93])) 

      } 
      ''') 

r_f = robjects.globalenv['f'] 
pred=pandas2ri.ri2py(r_f()) 

が、よりよい解決策は、(それも、モデル「train1.rf」を記憶)があれば、私はまだ思ったんだけど。

答えて

0

これは私が探していたものです。

import rpy2.robjects as robjects 
from rpy2.robjects import pandas2ri 
import pandas as pd 
import random 

pandas2ri.activate() 

df = pd.read_csv('train.csv',index_col=0) 



train=df.iloc[random.sample(range(1,60000), 5000),0:94] 
test=df.iloc[random.sample(range(1,60000), 100),0:93] 


rtrain = pandas2ri.py2ri(train) 
print(rtrain) 
rtest = pandas2ri.py2ri(test) 
print(rtest) 


robjects.r(''' 
      f <- function(train) { 

        library(randomForest) 
        train1.rf <- randomForest(target ~ ., data = train, importance = TRUE, do.trace = 100) 

      } 
      ''') 
r_f = robjects.globalenv['f'] 
rf_model=(r_f(rtrain)) 


robjects.r(''' 
      g <- function(model,test) { 

        pred <- as.data.frame(predict(model, test)) 

      } 
      ''') 

r_g = robjects.globalenv['g'] 
pred=pandas2ri.ri2py(r_g(rf_model,rtest)) 
関連する問題