基于剪枝规则的分类树(PART算法)

Pruning rule based classification tree (PART algorithm)

我在 R 中使用 PART 算法(通过包 RWeka)进行多重class class化。目标属性是客户支付发票的时间范围(如 7-15 天、15-30 天等)。我正在使用以下代码从模型中进行拟合和预测:

fit <- PART(DELAY_CLASS ~ AMT_TO_PAY + NUMBER_OF_CREDIT_DAYS + AVG_BASE_PRICE, data= trainingData)
predictedTrainingValues <- predict(fit, trainingData)    

通过使用这个模型,我在训练数据上的准确率达到了 82% 左右。但测试数据的准确率约为 59%。我知道我过度拟合了模型。我试图减少预测变量的数量(上面代码中的预测变量是减少的变量),但这无济于事 much.Reducing 变量的数量将测试数据的准确性提高到 61% 左右,并降低了训练数据的准确性到 79% 左右。

由于 PART 算法基于部分决策树,另一种选择是修剪树。但我不知道如何为 PART 算法修剪树。在互联网上搜索,我发现 FOIL 标准可以用于基于规则的剪枝算法。但是我无法在 R 或 RWeka 中找到 FOIL 标准的实现。

我的问题是如何为 PART 算法修剪树,或任何其他提高测试数据准确性的建议也欢迎。

提前致谢!!

注意:我将准确度计算为正确 classified 实例数除以实例总数。

为了用 PART 修剪树,您需要在函数的控制参数中指定它:

您可以传递到控制参数的命令的完整列表here

我在这里引用一些与修剪相关的选项:

Valid options are:

-C confidence

Set confidence threshold for pruning. (Default: 0.25)

M number

Set minimum number of instances per leaf. (Default: 2)

-R

Use reduced error pruning.

-N number

Set number of folds for reduced error pruning. One fold is used as the pruning set. (Default: 3)

看起来上面的 C 论点可能对您有帮助,然后可能对 R、N 和 M 有帮助。

为了在函数中使用那些:

fit <- PART(DELAY_CLASS ~ AMT_TO_PAY + NUMBER_OF_CREDIT_DAYS + AVG_BASE_PRICE,
       data= trainingData,
       control = Weka_control(R = TRUE, N = 5, M = 100)) #random choices

关于准确性指标的单独注释:

在我看来,比较训练集和测试集之间的准确性来确定过度拟合并不是最优的。该模型是在训练集上训练的,因此您希望它在那里比测试集工作得更好。更好的测试是交叉验证。首先尝试执行 10 折交叉验证(您可以使用插入符号的函数 train) and then compare the average cross-validation accuracy to your test set's accuracy. I think this will better. If you do not know what cross-validation is, in general it splits your training set into smaller training and tests sets and trains on the training and tests on the test set. Can read more about it here.