【问题标题】:Cross Validation function for logistic regression in RR中逻辑回归的交叉验证函数
【发布时间】:2017-01-25 18:46:50
【问题描述】:

我主要来自 python + scikit 学习背景,我想知道如何获得 R 中逻辑回归模型的交叉验证准确性?我正在寻找并惊讶于没有简单的方法。我正在寻找等价物:

import pandas as pd
from sklearn.cross_validation import cross_val_score
from sklearn.linear_model import LogisticRegression

## Assume pandas dataframe of dataset and target exist.

scores = cross_val_score(LogisticRegression(),dataset,target,cv=10)
print(scores)

对于 R:我有:

model = glm(df$Y~df$X,family=binomial')
summary(model) 

现在我被困住了。原因是,我的 R 模型的偏差是 1900,这意味着它不适合,但是 python 模型给了我 85% 的 10 倍交叉验证准确度.. 这意味着它很好。似乎有点奇怪......所以我想在 R 中运行 cross val 看看它的结果是否相同。

感谢任何帮助!

【问题讨论】:

  • 偏差本身的信息量不是很大,因此并不意味着不合适。对于运行 CV,为什么不手动安装它或查看插入符号 pkg
  • 简单地谷歌搜索会立即将我带到引导包中的插入符号包或 cv.glm。

标签: r machine-learning logistic-regression


【解决方案1】:

使用插入符号包的R版本:

library(caret)

# define training control
train_control <- trainControl(method = "cv", number = 10)

# train the model on training set
model <- train(target ~ .,
               data = train,
               trControl = train_control,
               method = "glm",
               family=binomial())

# print cv scores
summary(model)

【讨论】:

  • 只是补充一下,summary(model) 不会显示准确度分数。 model$results 可以。
  • 澄清一下,您不需要将createDataPartition 放入单独的训练和测试数据集,因为train_controltrain() 函数会在caret 包中自动执行此操作?
【解决方案2】:

下面我回答了from here 并做了一些更改。

我所做的更改是使其成为一个 logit(逻辑)模型、添加建模和预测、存储 CV 的结果,并使其成为一个完整的工作示例。

另请注意,您可以使用许多包和函数,包括来自bootcv.glm()

data(ChickWeight)

df                    <- ChickWeight
df$Y                  <- 0
df$Y[df$weight > 100] <- 1
df$X                  <- df$Diet 

df     <- df[sample(nrow(df)),]
folds  <- cut(seq(1,nrow(df)),breaks=10,labels=FALSE)
result <- list()

for(i in 1:10){
  testIndexes <- which(folds==i,arr.ind=TRUE)
  testData    <- df[testIndexes, ]
  trainData   <- df[-testIndexes, ]
  model       <- glm(Y~X,family=binomial,data=trainData)
  result[[i]] <- predict(model, testData) 
}
result

您可以添加一行来计算循环内的准确性,或者在循环完成后进行。

【讨论】:

  • 这适用于逻辑模型吗?
  • @EmmanuelGoldstein 是的,如果我现在写这篇文章,我可能会使用一些包,但如果你问 CV 是否适合逻辑模型,那肯定是。它们非常适合作为分类器的 ML 统计数据和最佳实践。
  • 谢谢。您将如何处理存储在 [i] 中的结果?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-11-20
  • 2017-01-02
  • 2017-07-07
  • 2019-04-20
  • 2020-09-27
  • 2016-09-10
  • 2021-05-06
相关资源
最近更新 更多