R语言rpart等模型用于脆弱家庭数据集青少年GPA预测相关问题
脆弱家庭挑战赛数据集GPA预测问题解答
1. 算法选择说明
你可以根据研究目的和模型需求从三类算法中选择,选择rpart的合理依据如下:
- 符合你的研究定位:你核心需求是探究哪些个体/家庭因子会影响青少年GPA,rpart(单棵回归树)可解释性极强,每一条分裂规则都可以直观对应到变量对GPA的影响逻辑,完全不需要分析黑箱模型的间接特征重要性,非常适合因果探索类研究
- 适配你的数据规模:你的数据集只有4898条样本、14个输入特征,维度很小,rpart不会出现严重欠拟合,反而可以快速输出清晰的变量作用规律
- 上手成本极低:不需要复杂调参就能得到稳定结果,非常适合机器学习初学者完成初期数据探索
如果后续你只追求GPA的预测精度,不要求输出可解释的变量影响逻辑,可以切换为随机森林(集成多棵决策树降低单棵树的方差,精度比单棵树高),如果对精度要求更高再换XGBoost即可。
2. 现有操作问题与核心概念解答
现有步骤错误点
你当前的操作存在2个核心错误:
- 不应该在测试集上训练rpart模型,测试集绝对不能参与任何模型拟合过程
- 预测代码里的数据集名称
ffc.final1_train和你之前定义的final_train不一致,运行会报错
训练集/测试集拆分的作用
拆分的核心目的是评估模型的泛化能力:训练集用来拟合模型参数,测试集是完全未参与模型训练的「未知数据」,用来模拟模型落地后遇到新数据的真实表现,避免模型只在训练数据上表现好(过拟合)、在真实场景下效果大幅下降的问题。
两个树模型的选择与结果解读
你在测试集上训练的树模型完全没有实用价值,直接删除即可:所有模型训练只能在训练集上完成,测试集仅可用来评估模型效果。训练集拟合出的单棵树就是你可以用来分析影响因子的最终模型,越靠近树根的分裂变量对GPA的影响越大,每个叶节点的数值就是对应特征组合下的预测GPA均值。
3. 正确分步操作指引
步骤1:加载依赖包
library(tidyverse) library(tidymodels) library(rpart) library(rpart.plot)
步骤2:构建分析数据集(你当前步骤正确)
final <- ffc %>% select(Gender, PPVT, WJ10, Grit, Self-control, Attention, Externalization, Anxiety, Depression, PCG_Income, PCG_Education, Teen_Mom, PCG_Exp, School_connectedness, GPA)
步骤3:拆分训练集和测试集(补充随机种子保证结果可复现)
set.seed(123) # 固定随机种子,每次运行拆分结果一致,方便复现结论 final_split <- initial_split(final, prop = .7) final_train <- training(final_split) final_test <- testing(final_split)
步骤4:仅在训练集上拟合模型
gpa_model <- rpart(GPA ~., method = "anova", data = final_train, control=rpart.control(cp = 0.2, minsplit = 5, minbucket = 5, maxdepth = 10))
步骤5:可视化决策树
rpart.plot(gpa_model, type = 3, digits = 3, fallen.leaves = TRUE)
步骤6:分别在训练集、测试集做预测
pred_train <- predict(gpa_model, final_train) pred_test <- predict(gpa_model, final_test)
步骤7:计算MAE评估模型效果
MAE <- function(actual, predicted) { mean(abs(actual - predicted)) } # 训练集MAE MAE(final_train$GPA, pred_train) # 测试集MAE MAE(final_test$GPA, pred_test)
步骤8:结果解读
- 输入变量的重要性可以通过
gpa_model$variable.importance查看,数值越大的变量对GPA的预测能力越强 - 如果测试集MAE和训练集MAE差距小于10%,说明模型泛化能力较好;如果测试集MAE远大于训练集,说明模型过拟合,可以调大cp值或者减小maxdepth降低模型复杂度
- 决策树图的每一条分支对应变量的取值规则,叶节点的数值就是该特征分组下人群的平均预测GPA
内容的提问来源于stack exchange,提问作者Tannya Kumar
相关产品推荐
相关产品推荐

