R Rpart 在数据集上花费太多时间

数据挖掘 r 多类分类
2021-10-10 05:21:51

我正在尝试在大约 7k 行和 456 列的数据集上使用 rpart 构建 CART 模型

cmodel2=rpart(DV ~ .,data=teltrain2,method="class")

这还没有返回结果。我正在使用带有 R 3.2.3 的 16GB 内存机器。每次运行时,R 执行都会继续,我必须终止 R GUI 进程才能最终停止它。

列说明

  • id --> 唯一 id(我已从训练集中删除)

  • 位置 --> 号码

  • col3 到 col400 --> 这些已由我热编码,并且仅包含 0 或 1 作为值

  • col400-col456 --> 这些是具有数值的特征,例如 23,144 等,均小于 1000

  • DV --> 因变量是具有超过 2 个值的分类变量。

我试过用一组较小的 1000 行和 456 列运行 rpart,但仍然没有运气。我不想在第一次运行时进行任何类型的特征消除,截至目前我不知道它们是否会影响因变量。

我也试过minbucket=25,20,15,10没有运气提及。

我的目标是在整个数据集上获得 rpart 的结果模型。我有哪些选择?

3个回答

您是否尝试过使用randomForest而不是rpart例如,假设您有两个 data.frame:

train_data 和 test_data

在我的示例中,最后一列是类(并且是一个factor变量),所有其他变量(所有其他列)都是numeric. 例如,一个训练示例可能如下所示:

4 5 10 12 1 0

其中 0 是类标签。您可以执行以下操作来运行具有 50 棵树的随机森林:

library(randomForest)
model_pl_1 <- randomForest(train_data[,-ncol(train_data)], train_data[,ncol(train_data)], test_data[,-ncol(test_data)], test_data[,ncol(test_data)], ntree=50)

根据经验,我发现它ranger提供了一个快速实现randomForest(可能是因为它是专门为在高维数据集上运行而设计的)。randomForest它也比提供可比精度的同时更灵活。

首先,您需要了解 RPART 是如何工作的,它是一种决策树,它通过基于可用特征构建树来工作,即树(也称为决策树,递归分区)是预测统计中一个简单而强大的工具。这个想法是将协变量空间分成许多分区,并在每个分区中拟合响应变量的常数模型。在回归的情况下,一个节点中响应变量的平均值将分配给该节点。

该结构类似于一棵真正的树(自下而上):有一个根,第一次分裂发生的地方。每次拆分后,都会创建两个新节点(假设我们只进行二进制拆分)。每个节点只包含观察的一个子集。不再分裂的数据分区称为终端节点或叶子。这种简单的机制使模型的解释变得非常容易。用一个例子来解释它。

现在进入您的场景,正如您所提到的,它有 400 多个特征,现在它从一个目标变量开始,然后分成 2 部分,然后转到特征 1 并根据其中存在的值进行划分,如 0 或 1(对于例如左侧节点上的 0 和右侧节点上的 1)然后它一直持续到最后一个特征(有时它可能不会直到最后一个特征)就像字面上为每条记录生成 400 多个级别(但不是每次都生成 400因为有些记录是相似的,所以这些记录被概括了)。所以现在你想象一下,对于 400 多个特征、7000 条记录,树可能会变得多大,以及概括结果会有多困难。所以RPART不能给出任何结果。

现在,我们是如何通过使用 RF 获得结果的?RF作为树的集合,即它在行级别和列级别拆分数据,生成的树很小,它需要所有树的集合并给出所有小树的平均值(其他方式也像投票等) .

浏览这些链接以更好地理解RPART , Link-1

通过这些链接更好地理解RandomForestLink-2

我的建议是通过应用 PCA 或任何降维算法来减少特征数量,从而使用 Rpart 获得更好的结果。由于您使用不同的算法获得了预期的结果,因此以上内容仅供您理解。

如果您有任何其他问题,请告诉我。