【问题标题】:Cross-validating an ordinal logistic regression in R (using rpy2)交叉验证 R 中的序数逻辑回归(使用 rpy2)
【发布时间】:2016-11-20 04:04:20
【问题描述】:

我正在尝试在 Python 中创建一个预测模型,通过交叉验证比较几种不同的回归模型。为了适应序数逻辑模型 (MASS.polr),我必须通过 rpy2 与 R 进行交互,如下所示:

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))

到目前为止,我主要使用sklearn.cross_validation.test_train_splitsklearn.metrics.accuracy_score 比较我的模型,得到一个从 0 到 1 的数字,代表训练集模型预测测试集值的准确性。

如何使用rpy2MASS.polr 复制此测试?

【问题讨论】:

    标签: r regression cross-validation python scikit-learn


    【解决方案1】:

    问题最终通过使用rms.lrm 重新拟合模型来解决,它提供了一个validate() 函数(在this example 之后解释)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-25
      • 1970-01-01
      • 2017-01-02
      • 2017-07-07
      • 2019-04-20
      • 2017-09-13
      • 2014-05-06
      • 2017-10-17
      相关资源
      最近更新 更多