随机森林与CART模型的性能比较

机器学习领域,构建预测模型是一项基础且重要的任务。随机森林模型因其简单易构建而广受欢迎。本文是关于随机森林与CART模型比较系列的第二部分。在第一部分中,使用R语言内置的鸢尾花数据集来预测物种分类。本文将在此基础上,使用相同的数据集构建随机森林模型,并与之前构建的CART模型进行性能比较。在一周前进行了这个实验,发现结果非常有洞察力。建议读者在阅读本文之前先阅读第一部分。

鸢尾花数据集提供了三个鸢尾花品种的50朵花的萼片长度、萼片宽度、花瓣长度和花瓣宽度的测量值,单位为厘米。数据集包含150个案例(行)和5个变量(列),分别命名为萼片长度、萼片宽度、花瓣长度、花瓣宽度和物种。目标是基于这四个花的特征变量来预测物种。首先,将数据集加载到R中,然后查看一些关键统计数据。可以使用以下代码来实现。

data(iris) # 查看数据集 summary(iris) # 可视化查看数据集 qplot(Petal.Length, Petal.Width, colour=Species, data=iris)

CART模型结果

在任何建模练习中,首先将数据分为训练集和验证集。可以使用以下代码进行分割。(将在随机森林中使用相同的分割)

train.flag <- createDataPartition(y=iris$Species, p=0.5, list=FALSE) training <- iris[train.flag,] Validation <- iris[-train.flag,]

CART模型在训练和验证数据上的结果如下:

训练数据的误分类率 = 3/75

验证数据的误分类率 = 4/75

可以看出,CART模型在准确性和稳定性方面都取得了不错的结果。现在将在相同的训练数据集上对随机森林算法进行建模,并使用相同的验证数据集进行验证。

构建随机森林模型

使用了“caret”、“randomForest”和“randomForestSRC”包来构建这个模型。可以使用以下代码在训练数据集上生成随机森林模型。

library(randomForest) library(randomForestSRC) library(caret) modfit <- train(Species~., method="rf", data=training) pred <- predict(modfit, training) table(pred, training$Species)

训练数据的误分类率 = 0/75

[这简直是太棒了!]

模型验证

构建了如此精确的模型后,希望确保没有过度拟合训练数据。这是通过在独立数据集上验证相同模型来完成的。使用以下代码来实现。

train.cart <- predict(modfit, newdata=training) table(train.cart, training$Species)

75个观测值中只有3个被误分类,表明了良好的预测能力。然而,当将这个模型与训练误分类率进行比较时,发现预测能力有显著下降。

到目前为止,一切都符合书本上的知识。现在来到了棘手的部分。一旦拥有了所有的性能指标,需要根据业务需求选择最佳模型。在这种情况下,将根据三个标准(除了业务需求之外)来做出判断:

1. 稳定性:模型在训练和验证中应具有相似的性能指标。这对于业务来说非常重要,因为业务可以接受较低的准确性,但不能容忍较低的稳定性。将给予稳定性最高的权重。在这种情况下,将其视为5。

2. 训练数据上的表现:这是其中一个重要指标,但不能仅基于这个指标得出结论。这是因为过度拟合的模型在这个参数上会得到很高的分数,但这是不可接受的。因此,将给予这个参数较低的权重(比如说2)。

3. 验证数据上的表现:这个指标可以捕捉到过度拟合的模型,因此是一个重要的指标。将给予它比性能更高的分数,但低于稳定性。在这种情况下,将其视为3。

请注意,权重和分数完全取决于业务案例。以下是一个根据判断在这种情况下的评分表。

从表格中可以看出,尽管随机森林给了更好的性能,但由于稳定性因素,仍然会使用CART模型。支持CART模型的另一个因素是业务上的简单解释。随机森林很难向在领域工作的人解释。CART模型是简单的切割,可以通过简单的业务理由/原因来证明。但是,模型选择的选择完全取决于业务需求。

每个模型都有自己的优势。正如这个案例研究所见,随机森林在训练人群中具有非常高的准确性,因为它使用了许多不同的特征来进行预测。但是,由于同样的原因,它有时会过度拟合模型。CART模型则是一个简单的标准切割模型。这在某些情况下可能是过度简化,但在大多数业务场景中都运作得很好。然而,模型的选择可能取决于业务需求,但在做出这个决定之前,总是比较不同模型的性能是很好的。

是否觉得本文有用?本文是否解决了一些现有问题?是否在任何项目中比较了这两种模型?如果这样做了,请与分享对这个话题的想法。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485