You need to enable JavaScript to run this app. 如何使用R语言rpart包实现类似SkLearn的决策树准确率计算
优惠活动
大模型
产品
解决方案
定价
更多

如何使用R语言rpart包实现类似SkLearn的决策树准确率计算

基于rpart实现与Scikit-Learn决策树等效的准确率计算

参数映射对齐规则

要匹配Scikit-Learn的DecisionTreeClassifier行为,需要将参数一一对应到rpart的配置项中:

  • 随机状态对齐:提前用set.seed(rseed)固定全局随机数种子,等效sklearn的random_state参数
  • 最小分裂样本数:在rpart控制项中设置minsplit=2,等效sklearn的min_samples_split=2,即节点内样本数达到阈值才允许触发分裂
  • 代价复杂度剪枝参数:在rpart控制项中设置cp=0.005,等效sklearn的ccp_alpha=0.005,控制剪枝强度
  • 任务类型匹配:指定method="class"为分类树,且训练时的响应变量train_outputs必须转为因子类型,否则rpart会默认拟合回归树,与sklearn的分类任务逻辑完全不符

完整模型训练代码

# 加载rpart依赖
library(rpart)
# 固定随机种子
set.seed(rseed)

# 配置模型控制参数
tree_ctrl <- rpart.control(
  minsplit = 2,
  cp = 0.005
)

# 训练决策树模型(等效sklearn的tr.fit()逻辑)
# 注意:入参需要合并为单数据框,train_outputs需提前转为因子适配分类任务
train_df <- cbind(train_features, train_outputs = factor(train_outputs))
model_tree <- rpart(
  formula = train_outputs ~ .,
  data = train_df,
  method = "class",
  control = tree_ctrl
)

训练/测试集准确率计算(等效sklearn的model.score())

rpart没有内置直接输出准确率的方法,通过预测结果与真实值比对计算准确率,同时保持与示例一致的输出格式:

# 计算训练集准确率
train_pred <- predict(model_tree, newdata = train_df, type = "class")
train_acc <- mean(train_pred == train_df$train_outputs)
cat(sprintf("Model Train Accuracy: %.4f\n", train_acc))

# 计算测试集准确率(测试集特征列名、类型需与训练集保持一致)
test_df <- cbind(test_features, test_outputs = factor(test_outputs))
test_pred <- predict(model_tree, newdata = test_df, type = "class")
test_acc <- mean(test_pred == test_df$test_outputs)
cat(sprintf("Model Test Accuracy: %.4f\n", test_acc))

注意事项

  • 预测时传入的测试集特征列名、数据类型必须与训练集完全一致,列顺序调换不会影响rpart计算,但列名不匹配会导致预测结果报错
  • 通过type="class"获取分类预测标签时,输出结果的类别顺序与训练时因子的水平顺序一致,无需额外调整标签对齐
  • 代码输出精度设置为4位小数,与示例中Scikit-Learn的输出格式完全匹配
  • 受rpart与Scikit-Learn底层树分裂逻辑的细微差异影响,最终输出的准确率不会与Python端的结果完全相等,但计算流程、参数含义完全等效

内容的提问来源于stack exchange,提问作者billv1179

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.01 15:24:04