增加可视化过程
时间: 2025-06-01 20:55:25 浏览: 10
### 集成学习算法实现中的可视化功能添加方法
#### Bagging 算法的可视化 (随机森林为例)
在随机森林中,可以通过绘制特征重要性和误差曲线来进行可视化。以下是一个完整的示例:
```python
import numpy as np
import matplotlib.pyplot as plt
from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
# 加载数据集
data = load_iris()
X, y = data.data, data.target
# 数据划分
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# 初始化随机森林模型
rf_model = RandomForestClassifier(n_estimators=100, random_state=42)
rf_model.fit(X_train, y_train)
# 特征重要性可视化
feature_importances = rf_model.feature_importances_
indices = np.argsort(feature_importances)[::-1]
plt.figure(figsize=(8, 6))
plt.title("Feature Importances", fontsize=16)
plt.bar(range(X.shape[1]), feature_importances[indices], align="center")
plt.xticks(range(X.shape[1]), data.feature_names, rotation=90)
plt.tight_layout()
plt.show()
# 错误率随树的数量变化的曲线图
results = rf_model.oob_decision_function_
oob_error = 1 - rf_model.oob_score_
print(f"OOB Error Rate: {oob_error}")
```
该代码不仅实现了随机森林分类器的功能,还通过绘图展示了各个特征的重要性以及袋外(OOB)错误率的变化趋势[^1]。
---
#### Boosting 算法的可视化 (XGBoost 为例)
对于 XGBoost,可以使用内置工具来生成特征重要性的条形图或者树状图。此外也可以观察损失函数随着迭代次数减少的情况:
```python
import xgboost as xgb
from sklearn.metrics import mean_squared_error
import matplotlib.pyplot as plt
# 将数据转换为 DMatrix 格式
dtrain = xgb.DMatrix(X_train, label=y_train)
dtest = xgb.DMatrix(X_test, label=y_test)
params = {
'objective': 'multi:softmax',
'num_class': 3,
'eta': 0.1,
'max_depth': 3
}
# 进行训练并记录每轮的结果
evals_result = {}
bst = xgb.train(params=params, dtrain=dtrain, num_boost_round=100, evals=[(dtest, 'test')], early_stopping_rounds=10, verbose_eval=False, evals_result=evals_result)
# 绘制 MSE 曲线
epochs = len(evals_result['test']['merror'])
x_axis = range(0, epochs)
fig, ax = plt.subplots(figsize=(8, 6))
ax.plot(x_axis, evals_result['test']['merror'], label='Test')
ax.legend()
plt.ylabel('Mean Squared Error')
plt.xlabel('Iterations')
plt.title('XGBoost Test Mean Squared Error')
plt.show()
# 显示单棵树结构
xgb.to_graphviz(bst, num_trees=bst.best_iteration)
```
这里除了常规的训练流程之外,还包括了对测试集中均方误差(MSE)随着时间推移下降情况的监控图表,还有最终得到的最佳一棵决策树的具体形态[^4]。
---
#### Stacking 的可视化
由于 stacking 结合了多个基础模型和一个元模型,在此过程中我们可以分别查看各层贡献程度及整体表现对比图谱如下所示:
```python
import seaborn as sns
sns.set_theme(style="whitegrid")
# 假设我们已经得到了三个不同模型预测的概率分布矩阵 pred_rf,pred_gbdt 和真实标签 true_labels
model_predictions = {'Random Forest':pred_rf[:,-1],'Gradient Boosting':pred_gbdt[:,-1]}
df_preds = pd.DataFrame(model_predictions)
# 对比两个底层模型输出概率密度分布状况
fig, axes = plt.subplots(ncols=2, figsize=(12, 6), sharey=True)
for i,(name,col_data) in enumerate(df_preds.iteritems()):
sns.histplot(col_data[y==i], bins=25, kde=True, stat="density", color=sns.color_palette()[i],label=name,alpha=.7,ax=axes[i])
axes[i].set_title(name+" Probability Distribution on Class "+str(i))
handles, labels = [], []
for ax in fig.axes:
for h,l in zip(*ax.get_legend_handles_labels()):
if l not in labels:
handles.append(h);labels.append(l)
fig.legend(handles, labels,bbox_to_anchor=(1., .5))
plt.tight_layout(rect=[0,.03,1,.95])
plt.show()
# 元模型系数热力图表示各自权重关系
coefficients_df = pd.DataFrame({'Features':['RF','GBDT'],'Coefficients':[coef_rf, coef_gbdt]})
sns.barplot(data=coefficients_df,x='Features',y='Coefficients').set(title='Meta Model Coefficients Heatmap')
```
这部分代码先比较了两组初级预测器各自的类别条件下的概率直方图差异,再用柱状图形式呈现元模型给予这些输入源的不同信任水平即其对应的回归系数组合比例[^2]。
---
#### 总结
无论是 bagging、boosting 或者 stacking 方法都可以借助图形化手段帮助理解内部工作机制原理及其运行状态反馈信息。合理运用 Matplotlib/Seaborn/XGBoost 自带画图组件能够极大地方便调试诊断工作进展成效评估等方面操作[^3]。
阅读全文
相关推荐


















