【问题标题】:unable to apply learned model to test data in R无法将学习模型应用于 R 中的测试数据
【发布时间】:2013-10-14 04:50:49
【问题描述】:

我正在使用来自 Kaggle 的 Titanic 数据集,并想学习一个简单的逻辑回归模型。

我读入了训练和测试数据,train$Survivedtrain$Sextest$Survivedtest$Sex 都是因素。

我想执行一个非常简单的逻辑回归,其中性别是唯一的自变量。

fit <- glm(formula = Survived ~ Sex, family = binomial)

对我来说看起来不错:

> fit

Call:  glm(formula = Survived ~ Sex, family = binomial)

Coefficients:
(Intercept)      Sexmale  
      1.057       -2.514  

Degrees of Freedom: 890 Total (i.e. Null);  889 Residual
Null Deviance:      1187 
Residual Deviance: 917.8    AIC: 921.8

问题是,我无法将此学习模型应用于测试数据。当我执行以下操作时:

predict(fit, train$Sex)

我得到一个包含 891 个值的向量,它是训练集中的训练样本数量。

我似乎找不到任何有关如何正确执行此操作的信息。

任何帮助将不胜感激!

【问题讨论】:

  • 在您的fit 代码中,数据在哪里?predict(fit, newdata = test) 将完成这项工作。
  • 谢谢,这成功了! predict 的文档中没有提到这一点,仅在 predict.glm 下... Predict 似乎输出的是浮点数,而不是最初用于学习模型的“标签”。有什么办法可以纠正这个吗? (原来我的 train$Survived 是整数类型...让我尝试使用因子...)不走运,仍然作为输出浮动...
  • 是的,您必须为此使用predict.glm。我错过了.glm。很抱歉。
  • 你可以使用predict.glm(..., type = "response")。像这样,您最终得到的概率表明您的记录最有可能是女性(高值)还是男性(低值)。
  • 谢谢,这样更好。不过,如果有一种输出预测类别的方法,那就太好了。猜测对于可能有多个标签的逻辑回归非常有用

标签: r machine-learning logistic-regression prediction kaggle


【解决方案1】:

我发布了一个答案,以纠正似乎被混淆的几点。确实没有predict-这样的功能。这就是帮助页面说“预测”是“通用函数”的意思。有时泛型函数确实有fun.default 方法,但在predict.* 的情况下,没有默认方法。所以 dispatch 是基于第一个参数的类。每种方法都有单独的帮助页面,“预测”的帮助页面列出了几个。包作者需要为新类编写自己的预测方法。

逻辑回归早于机器学习范式,因此期望它“预测类别”有点不切实际。即使您可以获得“响应”预测这一事实也是 30 年前当我们中的一些人参加回归课程时该软件所能提供的礼物。人们需要了解概率通常不是 0 或 1,而是介于两者之间。如果用户想要设置阈值并确定有多少案例超过阈值,那么这是分析师的决定,分析师需要对他们认为值得的类别进行任何转换。

执行:predict(fit, train$Sex) 预计会给出只要训练集中有值的结果,所以我猜您可能打算尝试predict(fit, test$Sex) 并感到失望。如果是这样,那么它应该是:predict(fit, list(Sex=test$Sex) )。 R 需要参数是可以强制转换为数据帧的值,因此命名值列表是predict-ors 的最低要求。

如果 predict.glm 得到第二个参数 newdata 的格式错误的参数,它会退回到原始数据参数并使用模型对象中保留的线性预测变量。

【讨论】:

    猜你喜欢
    • 2017-10-09
    • 2016-04-12
    • 2023-03-04
    • 1970-01-01
    • 2017-04-02
    • 1970-01-01
    • 2018-06-12
    • 2020-02-03
    • 1970-01-01
    相关资源
    最近更新 更多