【问题标题】:Applying logistic regression in titanic dataset在 Titanic 数据集中应用逻辑回归
【发布时间】:2017-01-15 02:11:38
【问题描述】:

我有来自 Kaggle 网站的著名的 Titanic 数据集。我想使用逻辑回归预测乘客的生存情况。我在 R 中使用 glm() 函数。我首先将我的数据帧(总行数 = 891)分成两个数据帧,即训练(从第 1 行到第 800 行)和测试(从第 801 行到第 891 行)。 代码如下

`
>> data <- read.csv("train.csv", stringsAsFactors = FALSE)

>> names(data)

 `[1] "PassengerId" "Survived"    "Pclass"      "Name"        "Sex"             "Age"         "SibSp"      
 [8] "Parch"       "Ticket"      "Fare"        "Cabin"       "Embarked" `  

#Replacing NA values in Age column with mean value of non NA values of Age.
>> data$Age[is.na(data$Age)] <- mean(data$Age, na.rm = TRUE)

#Converting sex into binary values. 1 for males and 0 for females.
>> sexcode <- ifelse(data$Sex == "male",1,0)
#dividing data into train and test data frames
>> train <- data[1:800,]

>> test <- data[801:891,]
#setting up the model using glm()

>> model <- glm(Survived~sexcode[1:800]+Age+Pclass+Fare,family=binomial(link='logit'),data=train, control = list(maxit = 50))

#creating a data frame
>> newtest <- data.frame(sexcode[801:891],test$Age,test$Pclass,test$Fare)

>> prediction <- predict(model,newdata = newtest,type='response')

`

当我运行最后一行代码时

prediction <- predict(model,newdata = newtest,type='response')

我收到以下错误

eval 中的错误(expr、envir、enclos):找不到对象“年龄”

谁能解释一下问题是什么。我检查了 newteset 变量,似乎没有任何问题。

这里是泰坦尼克号数据集https://www.kaggle.com/c/titanic/download/train.csv的链接

【问题讨论】:

  • 问题是你的newtest数据框没有AgePclassFare作为列名,而是test.Agetest.Pclasstest.Fare。您必须重命名它们。

标签: r prediction


【解决方案1】:

首先,您应该将sexcode 直接添加到数据框:

data$sexcode <- ifelse(data$Sex == "male",1,0)

然后,正如我评论的那样,newtest 数据框中的列名称存在问题,因为您手动创建了它。您可以直接使用test 数据框。

所以这是你的完整工作代码:

  data <- read.csv("train.csv", stringsAsFactors = FALSE)
  data$Age[is.na(data$Age)] <- mean(data$Age, na.rm = TRUE)
  data$sexcode <- ifelse(data$Sex == "male",1,0)

  train <- data[1:800,]
  test <- data[801:891,]

  model <- glm(Survived~sexcode+Age+Pclass+Fare,family=binomial(link='logit'),data=train, control = list(maxit = 50))

  prediction <- predict(model,newdata = test,type='response')

【讨论】:

    猜你喜欢
    • 2018-05-06
    • 2016-09-13
    • 1970-01-01
    • 2015-05-15
    • 1970-01-01
    • 2016-01-31
    • 1970-01-01
    • 2014-04-02
    • 1970-01-01
    相关资源
    最近更新 更多