【问题标题】:RPART model ignoring variable while fitting the modelRPART 模型在拟合模型时忽略变量
【发布时间】:2021-06-03 10:06:30
【问题描述】:

当我尝试使用 Survival~Sex+Pclass 拟合分类树模型时,它不考虑 Pclass 而只考虑性别(当代码中显示 Survival、Sex 和 Pclass 时)无论如何控制参数已指定。

代码:

library(titanic)
library(rpart)
library(rpart.plot)

train = titanic_train
titanic_train$Survived = factor(titanic_train$Survived)
titanic_train$Sex = factor(titanic_train$Sex)
titanic_train$Pclass = factor(titanic_train$Pclass)
ctrl=rpart.control(minsplit = 6, cp=0.001)
fit = rpart(Survived ~  Pclass + Sex , data = titanic_train,control=ctrl)
rpart.plot(fit)

【问题讨论】:

  • 最优分类树不需要使用模型中的所有变量。如果你只是插入随机噪声,你应该很高兴这不是一个因素

标签: r machine-learning classification decision-tree rpart


【解决方案1】:

它真的真的不想再分裂了。即使设置cp = 0 也不起作用(使用minsplit = 1)。但是cp = -1 确实如此,使每个类的树分支都变成了叶子。 (这是否可取是另一回事......)

【讨论】:

    【解决方案2】:

    这确实是一个有趣的观察,因为

    • 我们知道 Pclass 是一个信息量很大的变量,
    • 大多数其他分类树软件将在Pclass上进一步拆分(例如tree::treepartykit::ctreesklearn.tree.DecisionTreeClassifier、...),
    • 完全相同的代码的回归树版本(即不将 Survived 转换为因子,而是保持数值。)产生 4 个叶子,即使 Gini 杂质与方差损失函数相同对于 0/1 数据。

    也很难解释为什么 cp = 0minsplit = 1 生成的树可能不是最深的。

    【讨论】:

      【解决方案3】:

      rpart 作者允许我使用他的答案,我将其粘贴在下面:

      train <- titanic_train
      names(train) <- tolower(names(train))  # I'm lazy
      
      train$pclass <- factor(train$pclass)
      
      fit1 <- rpart(survived ~ pclass + sex, data=train)
      fit2 <- rpart(survived ~ pclass + sex, data=train, method="class")
      fit1
      
      n= 891 
      
      node), split, n, deviance, yval
            * denotes terminal node
      
      1) root 891 210.727300 0.3838384  
        2) sex=male 577  88.409010 0.1889081  
          4) pclass=2,3 455  54.997800 0.1406593 *
          5) pclass=1 122  28.401640 0.3688525 *
        3) sex=female 314  60.105100 0.7420382  
          6) pclass=3 144  36.000000 0.5000000 *
          7) pclass=1,2 170   8.523529 0.9470588 *
      
      fit2
      n= 891 
      
      node), split, n, loss, yval, (yprob)
            * denotes terminal node
      
      1) root 891 342 0 (0.6161616 0.3838384)  
        2) sex=male 577 109 0 (0.8110919 0.1889081) *
        3) sex=female 314  81 1 (0.2579618 0.7420382) *
      

      问题:当您选择“分类”作为方法时,无论是像我上面所做的那样明确地还是通过将结果设置为一个因素来隐式地,您已经声明损失函数是一个简单的“正确/不正确”的存活/死的。对于男性,存活率为 0.189,即

      女性也一样:整体和两个子类都 >= .5,因此根据您选择的标准,第二次拆分不会改进预测。

      当我将响应保持为连续时,最终标准是 MSE,进一步的拆分被视为改进。

      【讨论】:

        猜你喜欢
        • 2018-07-11
        • 1970-01-01
        • 1970-01-01
        • 2017-09-27
        • 1970-01-01
        • 1970-01-01
        • 2019-12-31
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多