【问题标题】:Pruning rule based classification tree (PART algorithm)基于修剪规则的分类树(PART算法)
【发布时间】:2015-05-18 11:08:46
【问题描述】:

我在 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 算法修剪树,或者任何其他提高测试数据准确性的建议也是受欢迎的。

提前致谢!!

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

【问题讨论】:

    标签: r statistics classification decision-tree rweka


    【解决方案1】:

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

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

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

    有效的选项是:

    -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),然后将平均交叉验证准确度与测试集的准确度进行比较。我认为这会更好。如果您不知道什么是交叉验证,通常它会将您的训练集拆分为较小的训练集和测试集,并在训练集上进行训练并在测试集上进行测试。可以阅读更多关于它的信息here

    【讨论】:

    • 感谢您的回答!决定修剪水平的是置信度因子 C。置信因子越小,算法进行的剪枝就越多。我之前没有使用过交叉验证。但会试一试。感谢您的建议!
    • 太棒了:)。很高兴我能帮上忙!
    猜你喜欢
    • 1970-01-01
    • 2015-05-15
    • 2021-01-25
    • 1970-01-01
    • 1970-01-01
    • 2012-05-05
    • 2015-05-22
    • 2012-06-18
    • 1970-01-01
    相关资源
    最近更新 更多