我在R(通过包RWeka)中使用PART算法进行多类分类。目标属性是时间段,其中发票将由客户支付(如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算法的树,或任何其他建议,以提高测试数据的准确性也是受欢迎的。
提前致谢!!
注意:我将准确度计算为正确分类的实例数除以实例总数。
答案 0 :(得分:2)
为了用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。