训练和测试数据集的模型性能度量的差异

数据挖掘 机器学习 分类 r 分类器
2022-02-16 00:36:59

我通过将数据集划分为训练集和测试集来使用 CART 分类技术。我一直在使用错误分类误差、按等级排序的 KS、AUC 和 Gini 作为 MPM(模型性能度量)。我面临的问题是 MPM 值相距甚远。

我尝试过 minsplit 等于 20 到 1400 之间的任何值,minbucket 等于 5 到 100 之间的任何值,但无法获得预期的结果。我也尝试过通过 ROSE 包进行过采样/欠采样,但没有任何改进。此外,误分类误差增加了很多。以下代码是通过它我可以获得最佳值,但它们还不够。

#Reading Data
pdata = read.csv("PL_XSELL.csv", header = TRUE)

#Converting ACC_OP_DATE from type factor to date
pdata$ACC_OP_DATE<-as.Date(pdata$ACC_OP_DATE, format = "%d-%m-%Y")

#Paritioning the data into training and test dataset
set.seed(2000)
n=nrow(pdata)
split= sample(c(TRUE, FALSE), n, replace=TRUE, prob=c(0.70, 0.30))
ptrain = pdata[split, ]
ptest = pdata[!split,]

#CART Model
#Taking the minsplit, minbucket values as low as possible, so that pruning 
#can be done later. Higher values didn't allow any scope for pruning
r.ctrl = rpart.control(minsplit=20, minbucket = 5,  cp = 0, xval = 10)

#Calling the rpart function to build the tree
cartModel <- rpart(formula = TARGET ~ ., 
    data = ptrain[,-1], method = "class", 
    control = r.ctrl)

#Pruning Tree Code
cartModel<- prune(cartModel, cp= 0.00225  ,"CP")

#Predicting class and scores
ptrain$predict.class <- predict(cartModel, ptrain, type="class")
ptrain$predict.score <- predict(cartModel, ptrain, type="prob")

我得到的结果-:训练数据错误分类错误-.103 AUC - 0.679 KS - 0.259 Gini - 0.313

测试数据误分类误差-.113 AUC - 0.664 KS - 0.226 Gini - 0.307

是由于数据集还是我做错了什么。我是数据分析的新手。这是我学术项目的一部分,所以我只需要使用 CART 技术。我将为随机森林和神经网络提出单独的问题。请帮忙。

1个回答

您的模型存在轻微的过度拟合,但似乎并不太显着。

如果随机抽样(当你有统计上显着的数量时),训练集的性能总是优于测试集

也许您可以通过控制 CP 参数来减少性能差距,尝试在修剪树时设置更高的cp(如 0.01)或使用根据树的长度修剪的参数maxdepth