如何将训练和测试数据集划分为 R 中决策树的比率?
How to divide train and test datasets into ratios in R for a decision tree?
这是作业中的说明,我有两个单独的代码实现,但我无法解释说明的要求:
使用以下比例划分数据集;
a) 50 次训练:50 次测试
b) 75 次训练:25 次测试
c) 25 次训练:75 次测试
d) 85 次训练:15 次测试
sample.split 中的参数 SplitRatio 让我感到困惑,我已经检查了文档,但我不清楚它的作用,它看起来像是我确定 true 或 false 的成功百分比决策树。 问题: 我是否将 SplitRatio 设置为 0.5 以获得 50 列、50 列测试比率,或者我只是修改数据集本身以包含 50 行、75、25 等的随机种子? ?我在这里将 SplitRatio 设置为 0.9,并将数据集本身修改为仅包含 50 个条目。如果我将它更改为 0.5,它会显着改变决策树,如果我包含整个数据集而不是 50,也会发生同样的事情。
#---------------------------------
# Ratio 50 Train : 50 Test
#---------------------------------
set.seed(1)
set50 <- sample(nrow(cancerdata), 50, replace=FALSE)
#set50
cancerset5050 <- cancerdata[set50,]
cancerset5050
?sample.split
spl = sample.split(cancerset5050$study.Diagnosis, SplitRatio = 0.9)
spl
dataTrain = subset(cancerset5050, spl==TRUE)
dataTest = subset(cancerset5050, spl==FALSE)
m5050 <- J48(as.factor(study.Diagnosis)~., dataTrain)
summary(m5050)
## visualization the model
## use partykit package
if(require("partykit", quietly = TRUE)) plot(m5050)
dataTest.pred <- predict(m5050, newdata = dataTest)
table(dataTest$study.Diagnosis, dataTest.pred)
我认为您对sample.split
函数的理解是正确的。如果你设置 SplitRatio = 0.5
,那么你将有 50% 的样本在训练集中,剩下的 50% 在测试集中。
我认为在分离训练集和测试集之前,您应该将响应变量转换为因子。
也就是
cancerset5050$study.Diagnosis <- as factor(cancerset5050$study.Diagnosis)
然后继续训练和测试
dataTrain = subset(cancerset5050, spl==TRUE)
dataTest = subset(cancerset5050, spl==FALSE)
m5050 <- J48(study.Diagnosis ~., dataTrain)
这是作业中的说明,我有两个单独的代码实现,但我无法解释说明的要求:
使用以下比例划分数据集;
a) 50 次训练:50 次测试
b) 75 次训练:25 次测试
c) 25 次训练:75 次测试
d) 85 次训练:15 次测试
sample.split 中的参数 SplitRatio 让我感到困惑,我已经检查了文档,但我不清楚它的作用,它看起来像是我确定 true 或 false 的成功百分比决策树。 问题: 我是否将 SplitRatio 设置为 0.5 以获得 50 列、50 列测试比率,或者我只是修改数据集本身以包含 50 行、75、25 等的随机种子? ?我在这里将 SplitRatio 设置为 0.9,并将数据集本身修改为仅包含 50 个条目。如果我将它更改为 0.5,它会显着改变决策树,如果我包含整个数据集而不是 50,也会发生同样的事情。
#---------------------------------
# Ratio 50 Train : 50 Test
#---------------------------------
set.seed(1)
set50 <- sample(nrow(cancerdata), 50, replace=FALSE)
#set50
cancerset5050 <- cancerdata[set50,]
cancerset5050
?sample.split
spl = sample.split(cancerset5050$study.Diagnosis, SplitRatio = 0.9)
spl
dataTrain = subset(cancerset5050, spl==TRUE)
dataTest = subset(cancerset5050, spl==FALSE)
m5050 <- J48(as.factor(study.Diagnosis)~., dataTrain)
summary(m5050)
## visualization the model
## use partykit package
if(require("partykit", quietly = TRUE)) plot(m5050)
dataTest.pred <- predict(m5050, newdata = dataTest)
table(dataTest$study.Diagnosis, dataTest.pred)
我认为您对sample.split
函数的理解是正确的。如果你设置 SplitRatio = 0.5
,那么你将有 50% 的样本在训练集中,剩下的 50% 在测试集中。
我认为在分离训练集和测试集之前,您应该将响应变量转换为因子。
也就是
cancerset5050$study.Diagnosis <- as factor(cancerset5050$study.Diagnosis)
然后继续训练和测试
dataTrain = subset(cancerset5050, spl==TRUE)
dataTest = subset(cancerset5050, spl==FALSE)
m5050 <- J48(study.Diagnosis ~., dataTrain)