2016-07-17 18 views
0

Ich versuche ein Vorhersagemodell in Python zu erstellen, indem ich mehrere verschiedene Regressionsmodelle durch Kreuzvalidierung vergleiche. Um eine Ordnungs logistisches Modell (MASS.polr) zu passen, habe ich musste mit R durch rpy2 Schnittstelle wie folgt:Validieren einer ordinalen logistischen Regression in R (mit rpy2)

from rpy2.robjects.packages import importr 
import rpy2.robjects as ro 

df = pd.DataFrame() 
df = df.append(pd.DataFrame({"y":25,"X":7},index=[0])) 
df = df.append(pd.DataFrame({"y":50,"X":22},index=[0])) 
df = df.append(pd.DataFrame({"y":25,"X":15},index=[0])) 
df = df.append(pd.DataFrame({"y":75,"X":27},index=[0])) 
df = df.append(pd.DataFrame({"y":25,"X":12},index=[0])) 
df = df.append(pd.DataFrame({"y":25,"X":13},index=[0])) 

# Loads R packages. 
base = importr('base') 
mass = importr('MASS') 

# Converts df to an R dataframe. 
from rpy2.robjects import pandas2ri 
pandas2ri.activate() 
ro.globalenv["rdf"] = pandas2ri.py2ri(df) 

# Makes R recognise y as a factor. 
ro.r("""rdf$y <- as.factor(rdf$y)""") 

# Fits regression. 
formula = "y ~ X"  
ordlog = mass.polr(formula, data=base.as_symbol("rdf")) 
ro.globalenv["ordlog"] = ordlog 
print(base.summary(ordlog)) 

Bisher habe ich vor allem meine Modelle wurden zu vergleichen sklearn.cross_validation.test_train_split und sklearn.metrics.accuracy_score mit, wodurch man eine Reihe von 0 bis 1, was die Genauigkeit des Trainingssatzmodells bei der Vorhersage der Testsatzwerte darstellt.

Wie kann ich diesen Test mit rpy2 und MASS.polr replizieren?

Antwort

2

Das Problem wurde schließlich behoben, indem das Modell unter Verwendung von rms.lrm, das eine -Funktion bereitstellt, interpretiert wurde (folgend interpretiert this example).