网站整合discuz论坛,石家庄建设工程信息网官网,wordpress怎样添加轮播图,wordpress get the time随机森林是一种集成学习#xff08;Ensemble Learning#xff09; 算法#xff0c;核心思想是构建多个决策树#xff0c;通过投票或平均的方式输出结果#xff0c;以此降低单一决策树过拟合的风险#xff0c;提升模型的泛化能力。它在机器学习的分类、回归、特征重要性评…随机森林是一种集成学习Ensemble Learning算法核心思想是构建多个决策树通过投票或平均的方式输出结果以此降低单一决策树过拟合的风险提升模型的泛化能力。它在机器学习的分类、回归、特征重要性评估等任务中被广泛应用是工业界和学术界最常用的算法之一。一、核心原理“随机” “森林”随机森林的 “随机” 体现在两个层面“森林” 指由多棵决策树组成的集合样本随机Bootstrap 抽样从原始训练集中通过有放回抽样的方式为每一棵决策树生成一个独立的训练子集。这样做的目的是让每棵决策树的训练数据存在差异避免所有树都学习到相同的特征模式提升模型多样性。未被抽到的样本称为OOBOut-of-Bag样本可用于无额外验证集的模型评估。特征随机随机子空间在构建每一棵决策树的每个节点时不是从所有特征中选择最优特征进行划分而是随机选择一部分特征再从这部分特征中选最优。例如总共有 100 个特征每棵树的每个节点随机选 10 个特征来划分。这一步能进一步降低树与树之间的相关性让森林的 “投票” 更有意义。预测规则分类任务所有决策树分别预测类别最终结果由多数投票决定得票最多的类别为最终预测。回归任务所有决策树分别预测数值最终结果由所有树预测值的平均值决定。二、优缺点优点泛化能力强有效降低过拟合相比单一决策树在复杂数据集上表现更稳定。对噪声不敏感能处理含噪声的数据集不易受异常值影响。支持高维数据无需特征工程如降维也能处理高维数据同时可输出特征重要性帮助筛选关键特征。训练并行化每棵树的训练相互独立可利用多核 CPU 并行加速训练效率高。缺点模型解释性差决策树本身是 “白盒” 模型但随机森林由多棵树组成整体是 “黑盒”难以直观解释预测逻辑。对小样本数据集效果一般样本量过小时Bootstrap 抽样可能导致训练集多样性不足模型性能下降。内存占用较大需要存储多棵决策树的结构数据量大时内存消耗较高。三、关键超参数以 Pythonsklearn为例在使用sklearn.ensemble.RandomForestClassifier分类或RandomForestRegressor回归时需调整以下核心超参数超参数作用调优建议n_estimators决策树的数量通常越大效果越好但达到一定阈值后性能趋于稳定太大则会增加训练时间max_depth每棵树的最大深度限制树的生长防止过拟合值太小会欠拟合太大则过拟合max_features每个节点随机选择的特征数分类任务默认sqrt(n_features)回归任务默认n_features可手动调整为log2(n_features)或具体数值min_samples_split节点分裂所需的最小样本数样本数过少时停止分裂防止过拟合min_samples_leaf叶节点所需的最小样本数叶节点样本数过少时合并提升模型稳定性bootstrap是否使用 Bootstrap 抽样默认True若设为False则所有树都用原始训练集训练import pandas as pd from sklearn.ensemble import RandomForestClassifier from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score, classification_report # 1. 读取数据假设表格已保存为csv data pd.read_csv(电网电信客户流失数据.csv) X data.drop(流失状态, axis1) y data[流失状态] # 2. 划分训练集/测试集 X_train, X_test, y_train, y_test train_test_split( X, y, test_size0.2, random_state42, stratifyy # 保持标签分布 ) # 3. 初始化随机森林模型 rf RandomForestClassifier( n_estimators100, # 100棵树 max_depth8, # 限制树深度防过拟合 max_featuressqrt, # 特征随机选择 n_jobs-1, # 并行训练 random_state42 ) # 4. 训练与预测 rf.fit(X_train, y_train) y_pred rf.predict(X_test) # 5. 模型评估 print(准确率, accuracy_score(y_test, y_pred)) print(分类报告\n, classification_report(y_test, y_pred)) # 6. 查看关键流失特征 feature_importance pd.DataFrame({ 特征: X.columns, 重要性: rf.feature_importances_ }).sort_values(by重要性, ascendingFalse) print(影响流失的关键特征\n, feature_importance.head(5))