3

我在 R 中使用 PART 算法(通过包 RWeka)进行多类分类。目标属性是客户支付发票的时间段(如 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%。我知道我过度拟合了模型。我试图减少预测变量的数量(上面代码中的预测变量是减少的变量),但这并没有多大帮助。减少变量的数量将测试数据的准确度提高到 61% 左右,并将训练数据的准确度降低到大约79%。

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

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

提前致谢!!

注意:我将准确率计算为正确分类的实例数除以实例总数。

4

1 回答 1

2

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

您可以在此处传递给控制参数的命令的完整列表

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

有效的选项是:

-C 信心

设置修剪的置信度阈值。(默认值:0.25)

M号

设置每个叶子的最小实例数。(默认:2)

-R

使用减少的错误修剪。

-N 号码

设置折叠次数以减少错误修剪。一个折叠用作修剪集。(默认: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),然后将平均交叉验证准确度与测试集的准确度进行比较。我认为这会更好。如果您不知道什么是交叉验证,通常它会将您的训练集拆分为较小的训练集和测试集,并在训练集上进行训练并在测试集上进行测试。可以在这里阅读更多信息。

于 2015-03-16T11:58:33.680 回答