Day 9 随机森林调参与时间序列交叉验证 目录随机森林核心超参数详解超参数对模型的影响调参策略与顺序时间序列交叉验证网格搜索与随机搜索学习曲线与验证曲线过拟合诊断第一部分随机森林核心超参数详解1.5小时理论1.1 超参数分类类别参数作用影响模型复杂度n_estimators树的数量越多越稳定树结构max_depth最大深度控制过拟合分裂条件min_samples_split分裂最小样本数正则化叶节点min_samples_leaf叶节点最小样本数平滑预测特征选择max_features特征子集大小增加多样性采样bootstrap是否自助采样通常为True1.2n_estimators树的数量定义随机森林中决策树的数量。原理每棵树独立训练通过投票/平均得到最终结果根据大数定律树越多方差越小数学性质ErrorBias2VarianceNoise \text{Error} \text{Bias}^2 \text{Variance} \text{Noise}ErrorBias2VarianceNoise增加n_estimators主要降低方差不影响偏差。参数影响n_estimators训练时间预测时间内存性能太少50快快小不稳定适中100-200中等中等中等良好太多500慢慢大边际收益递减选择策略# 观察OOB误差随n_estimators的变化oob_scores[]forninrange(10,301,10):rfRandomForestClassifier(n_estimatorsn,oob_scoreTrue)rf.fit(X_train,y_train)oob_scores.append(rf.oob_score_)# 选择OOB误差收敛时的n_estimators1.3 max_depth最大深度定义每棵树的最大深度。原理深度越大树越复杂越容易过拟合限制深度是最直接的正则化方法参数影响max_depth模型复杂度过拟合风险训练时间小3-5低低快中10-20中中中等大None高高慢选择策略# 观察不同深度下的训练/测试误差depthsrange(3,31,3)train_scores,test_scores[],[]fordepthindepths:rfRandomForestClassifier(max_depthdepth)rf.fit(X_train,y_train)train_scores.append(rf.score(X_train,y_train))test_scores.append(rf.score(X_test,y_test))# 选择测试误差最低的深度1.4 min_samples_split分裂最小样本数定义内部节点再划分所需的最小样本数。原理值越大树越难分裂模型越简单防止模型学习局部噪声参数影响min_samples_split分裂次数树大小过拟合风险小2多大高中5-20中中中大50少小低选择策略# 从小值开始逐步增加min_samples_split_values[2,5,10,20,50,100]1.5 min_samples_leaf叶节点最小样本数定义叶节点所需的最小样本数。原理与min_samples_split类似但作用于叶节点确保每个叶节点有足够样本避免过拟合与min_samples_split的区别参数作用节点对树的影响min_samples_split内部节点限制分裂min_samples_leaf叶节点限制叶节点大小1.6 max_features特征子集大小定义每次分裂时随机选择的特征数量。原理增加树的多样性防止强特征主导所有树常用设置任务推荐值说明分类sqrt(n_features)默认值回归n_features/3默认值特征少None使用所有特征高维数据log2(n_features)增加随机性第二部分超参数对模型的影响2.1 单个参数的影响分析# 参数影响矩阵## 欠拟合 ←──────────────→ 过拟合## n_estimators: 小 ←→ 大# max_depth: 小 ←→ 大# min_samples_split: 大 ←→ 小# min_samples_leaf: 大 ←→ 小# max_features: 小 ←→ 大2.2 参数交互作用参数组合效果max_depth小 min_samples_split大强正则化可能欠拟合max_depth大 min_samples_split小弱正则化可能过拟合n_estimators大 max_depth小稳定且不易过拟合2.3 偏差-方差权衡高偏差欠拟合 最优 高方差过拟合 ←─────────────────────────────────────────→ 增加 max_depth ────────────────────────────────→ 增加 n_estimators ────────────────────────────→ 增加 min_samples_split ←─────────────────────── 增加 min_samples_leaf ←───────────────────────第三部分调参策略与顺序3.1 推荐调参顺序第1步: 固定其他参数确定 n_estimators └── 观察OOB误差收敛点 第2步: 调整 max_depth └── 找到最佳深度范围 第3步: 调整 min_samples_split 和 min_samples_leaf └── 进一步正则化 第4步: 调整 max_features └── 微调特征随机性 第5步: 联合调优 └── 使用网格搜索/随机搜索3.2 粗调 vs 精调阶段参数范围步长目的粗调大范围大找到最优区域精调小范围小找到最优值3.3 调参注意事项避免数据泄露只用训练集调参使用交叉验证评估泛化能力记录实验保存每次调参结果关注边际收益性能提升不明显时停止第四部分时间序列交叉验证4.1 为什么不能用普通K折普通K折的问题随机打乱数据破坏时间顺序用未来数据训练过去数据验证前视偏差# 错误做法 ❌fromsklearn.model_selectionimportKFold kfKFold(n_splits5,shuffleTrue)# 随机打乱4.2 TimeSeriesSplit原理工作方式Fold 1: Train [0:100] | Test [100:120] Fold 2: Train [0:120] | Test [120:140] Fold 3: Train [0:140] | Test [140:160] Fold 4: Train [0:160] | Test [160:180] Fold 5: Train [0:180] | Test [180:200]特点训练集始终在测试集之前测试集不重叠训练集大小递增# 正确做法 ✅fromsklearn.model_selectionimportTimeSeriesSplit tscvTimeSeriesSplit(n_splits5)4.3 TimeSeriesSplit参数参数说明默认值n_splits分割次数5max_train_size最大训练集大小Nonetest_size测试集大小Nonegap训练集和测试集之间的间隔04.4 带间隔的TimeSeriesSplit# 防止数据泄露设置间隔tscvTimeSeriesSplit(n_splits5,gap5)# 训练集和测试集间隔5天# 示意# Fold 1: Train [0:100] | Gap [100:105] | Test [105:125]4.5 时间序列交叉验证的变体变体描述适用场景滚动窗口固定窗口大小非平稳数据扩展窗口窗口不断增大数据量小带间隔防止短期依赖高频数据第五部分网格搜索与随机搜索5.1 GridSearchCV网格搜索原理遍历所有参数组合找到最佳参数。fromsklearn.model_selectionimportGridSearchCV param_grid{max_depth:[10,20,30],min_samples_split:[2,5,10]}# 总共 3×3 9 种组合grid_searchGridSearchCV(rf,param_grid,cv5)grid_search.fit(X_train,y_train)优点保证找到最优组合缺点计算量大组合爆炸5.2 RandomizedSearchCV随机搜索原理随机采样参数组合而非遍历。fromsklearn.model_selectionimportRandomizedSearchCVfromscipy.statsimportrandint param_dist{max_depth:randint(10,50),min_samples_split:randint(2,20)}# 可以指定n_iter控制搜索次数random_searchRandomizedSearchCV(rf,param_dist,n_iter20,cv5)优点效率高适合大参数空间缺点可能错过最优组合5.3 搜索策略选择场景推荐方法参数少10种组合GridSearchCV参数多50种组合RandomizedSearchCV参数连续分布RandomizedSearchCV追求最优GridSearchCV 分步搜索5.4 分步搜索策略# 第1步粗调大范围param_grid1{max_depth:[5,10,20,30,None]}# 第2步精调小范围param_grid2{max_depth:[10,12,14,16,18,20]}# 第3步联合调优param_grid3{max_depth:[12,14,16],min_samples_split:[2,4,6,8]}第六部分学习曲线与验证曲线6.1 学习曲线Learning Curve定义展示模型性能随训练集大小的变化。作用判断欠拟合/过拟合判断增加数据的收益解读训练误差高验证误差高 → 欠拟合 训练误差低验证误差高 → 过拟合 两者都低且接近 → 良好拟合6.2 验证曲线Validation Curve定义展示模型性能随单个参数的变化。作用找到参数的最佳范围观察参数对过拟合的影响fromsklearn.model_selectionimportvalidation_curve train_scores,test_scoresvalidation_curve(rf,X_train,y_train,param_namemax_depth,param_range[3,5,10,15,20,30],cv5)6.3 学习曲线 vs 验证曲线曲线类型X轴目的学习曲线训练集大小判断数据需求验证曲线参数值判断参数影响第七部分过拟合诊断7.1 诊断方法方法指标过拟合信号训练vs测试误差准确率差训练测试OOB评分OOB vs 测试OOB低于测试学习曲线误差差距差距随数据增大验证曲线参数影响复杂度过高7.2 过拟合应对策略增加正则化减小max_depth增大min_samples_split增大min_samples_leaf增加数据收集更多历史数据数据增强减少特征特征选择降维PCA降低模型复杂度减少n_estimators边际效应减小max_features