2017-09-11 4 views
0

je le script R suivant mis en place qui est conçu pour construire un modèle à partir d'une trame de données en utilisant le package caret:Comment formater un script Python qui utilise rpy2 afin de construire un modèle avec une fonction R-caret?

library(caret) 
library(broom) 

data<- data.table("mydata.csv") 

splitprob <- 0.8 

traintestindex <- createDataPartition(data$fluorescence, p=splitprob, list=F) 
testset <- data[-traintestindex,] 
trainingset <- data[traintestindex,] 

model <- train(fluorescence~., trainingset, method = "glmStepAIC", preProc = c("center","scale"), trControl = cvCtrl) 

final_model<- tidy(model$finalModel) 

write.csv(tidy, "model_glm.csv") 

Je voudrais être en mesure d'avoir les fonctionnalités de ce code soit exprimé dans un Script Python. Après la génération d'une trame de données pandas, celle-ci sera ensuite convertie en une trame de données R et ensuite exécutée par la fonction de train du caret qui est définie sur les mêmes paramètres que dans le script R ci-dessus.

import pandas as pd 
from rpy2.robjects import r 
import sys 
import rpy2.robjects.packages as rpackages 
from rpy2.robjects.vectors import StrVector 
from rpy2.robjects import r, pandas2ri 

pandas2ri.activate() 
caret = rpackages.importr('caret') 
broom= rpackages.importr('broom') 

my_data= pd.read_csv("my_data.csv") 
r_dataframe= pandas2ri.py2ri(my_data) 

preprocessing= ["center", "scale"] 

center_scale= StrVector(preprocessing) 

cvCtrl = caret.trainControl(method = "repeatedcv", number= 20, repeats = 100) 

model_R= caret.train("fluorescence~.", data= r_dataframe, method = "glmStepAIC", preProc = center_scale, trControl = cvCtrl) 

print(model_R.finalModel) 

Cependant, ce script est évidemment pas correctement configuré, comme mes tentatives pour exécuter le script Python avec des rendements rpy2 SyntaxError: invalid syntax à la ligne model_R= caret.train("fluorescence~., r_dataframe, method = "glmStepAIC", preProc = center_scale, trControl = cvCtrl"). J'ai essayé de suivre la syntaxe donnée dans la documentation (source: https://rpy2.github.io/doc/latest/html/introduction.html?highlight=linear%20model), mais la façon dont on pourrait mettre en place un code comme celui-ci est clairsemée.

Qu'est-ce qui doit être corrigé dans mon code Python pour que le code fonctionne et que je puisse construire un modèle à partir de mes données?

Répondre

0

Je compris le format de mise en œuvre des fonctions de caret via rpy2:

import pandas as pd 
from rpy2.robjects import r 
import sys 
import rpy2.robjects.packages as rpackages 
from rpy2.robjects.vectors import StrVector 
from rpy2.robjects import r, pandas2ri 

pandas2ri.activate() 
caret = rpackages.importr('caret') 
broom= rpackages.importr('broom') 

my_data= pd.read_csv("my_data.csv") 
r_dataframe= pandas2ri.py2ri(my_data) 

preprocessing= ["center", "scale"] 
center_scale= StrVector(preprocessing) 

#these are the columns in my data frame that will consist of my predictors in the model 
predictors= ['predictor1','predictor2','predictor3'] 
predictors_vector= StrVector(predictors) 

#this column from the dataframe consists of the outcome of the model 
outcome= ['fluorescence'] 
outcome_vector= StrVector(outcome) 

#this line extracts the columns of the predictors from the dataframe 
columns_predictors= r_dataframe.rx(True, columns_vector) 

#this line extracts the column of the outcome from the dataframe 
column_response= r_dataframe.rx(True, column_response) 

cvCtrl = caret.trainControl(method = "repeatedcv", number= 20, repeats = 100) 

model_R= caret.train(columns_predictors, columns_response, method = "glmStepAIC", preProc = center_scale, trControl = cvCtrl) 

print(model_R.rx('finalModel'))