告别炸机!为F450大机架调好BetaFlight滤波与PID的实战心得(附振动分析)
2026/5/28 8:56:00
随机森林是一种集成学习(Ensemble Learning)算法,核心思想是构建多个决策树,通过投票或平均的方式输出结果,以此降低单一决策树过拟合的风险,提升模型的泛化能力。
它在机器学习的分类、回归、特征重要性评估等任务中被广泛应用,是工业界和学术界最常用的算法之一。
随机森林的 “随机” 体现在两个层面,“森林” 指由多棵决策树组成的集合:
样本随机(Bootstrap 抽样)
特征随机(随机子空间)
预测规则
sklearn为例)在使用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("流失状态", axis=1) y = data["流失状态"] # 2. 划分训练集/测试集 X_train, X_test, y_train, y_test = train_test_split( X, y, test_size=0.2, random_state=42, stratify=y # 保持标签分布 ) # 3. 初始化随机森林模型 rf = RandomForestClassifier( n_estimators=100, # 100棵树 max_depth=8, # 限制树深度防过拟合 max_features="sqrt", # 特征随机选择 n_jobs=-1, # 并行训练 random_state=42 ) # 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="重要性", ascending=False) print("影响流失的关键特征:\n", feature_importance.head(5))