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」を記憶)があれば、私はまだ思ったんだけど。