RF KNN XGBoost LR,机器学习模型图
时间: 2025-04-20 11:37:24 浏览: 38
### 关于RF、KNN、XGBoost 和 LR 的可视化
对于 RF (随机森林),可以通过绘制特征重要性图来理解哪些输入变量对预测有较大影响。此外,还可以通过决策树的结构展示单棵决策树的工作原理[^1]。
```python
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
from sklearn.ensemble import RandomForestClassifier
data = load_iris()
rf_model = RandomForestClassifier().fit(data.data, data.target)
plt.figure(figsize=(8, 6))
plt.barh(range(len(rf_model.feature_importances_)), rf_model.feature_importances_)
plt.yticks(range(len(data.feature_names)), data.feature_names)
plt.title('Feature Importance of Random Forest')
plt.show()
```
针对 KNN (K 近邻算法), 常见的是绘制不同 k 值下模型性能的变化曲线以及数据点之间的距离分布情况。这有助于找到最优参数设置并直观感受分类边界[^2]。
```python
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import cross_val_score
import numpy as np
k_range = range(1, 30)
scores = []
for k in k_range:
knn = KNeighborsClassifier(n_neighbors=k)
score = cross_val_score(knn, data.data, data.target, cv=5).mean()
scores.append(score)
plt.plot(k_range, scores)
plt.xlabel('Value of K for KNN')
plt.ylabel('Cross-Validated Accuracy')
plt.title('Performance vs Number of Neighbors')
plt.show()
```
至于 XGBoost (极端梯度提升),可以创建 SHAP value 或者 Gain/Loss 图形来解释各个特征的重要性及其如何共同作用以做出最终预测;也可以查看每棵树的学习过程和贡献程度[^3]。
```python
import xgboost as xgb
from xgboost import plot_tree
import graphviz
dtrain = xgb.DMatrix(data.data, label=data.target)
params = {'max_depth': 3}
bst = xgb.train(params, dtrain)
plot_tree(bst, num_trees=0)
plt.show()
# For SHAP values visualization
import shap
shap.initjs()
explainer = shap.TreeExplainer(bst)
shap_values = explainer.shap_values(dtrain)
shap.force_plot(explainer.expected_value, shap_values[0,:], data.feature_names)
```
最后,在处理 LR (逻辑回归) 模型时,通常会关注系数大小及正负方向,以此评估各因素的影响力度,并可通过 ROC 曲线衡量二元分类器的表现质量[^4]。
```python
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import roc_curve, auc
lr_model = LogisticRegression().fit(data.data, data.target)
y_pred_proba = lr_model.predict_proba(data.data)[::,1]
fpr, tpr, _ = roc_curve(data.target, y_pred_proba)
roc_auc = auc(fpr, tpr)
plt.plot(fpr,tpr,label="Logistic Regression, AUC="+str(round(roc_auc, 2)))
plt.legend(loc=4)
plt.title('ROC Curve for Logistic Regression')
plt.show()
```
阅读全文
相关推荐


















