<jupyter_start><jupyter_text>`beeswarm` plot这个笔记本是用来演示（和记录）如何使用`shap.plots.beeswarm`函数。它使用了一个在UCI成人收入数据集上训练的XGBoost模型（这是一个分类任务，预测人们在20世纪90年代的收入是否超过5万美金）。<jupyter_code>import xgboost
import shap

# train XGBoost model
X,y = shap.datasets.adult()
model = xgboost.XGBClassifier().fit(X, y)

# compute SHAP values
explainer = shap.Explainer(model, X)
shap_values = explainer(X)<jupyter_output>98%|===================| 32071/32561 [00:58<00:00]<jupyter_text>A simple beeswarm summary plot蜂群图的设计是为了显示一个信息密集的摘要，说明数据集中的顶级特征如何影响模型的输出。每一个给定的解释实例都由每个特征图上的一个点表示。点的X位置由该特征的SHAP值（`shap_values.value[instance,feature]`）决定，点沿着每个特征行 "堆积 "起来以显示密度。颜色是用来显示一个特征的原始值（`shap_values.data[instance,feature]`）。在下面的图中，我们可以看到年龄是最重要的特征，比起年轻（蓝色）的人更不可能赚到超过5万美金。<jupyter_code>shap.plots.beeswarm(shap_values)<jupyter_output><empty_output><jupyter_text>默认情况下，显示的最大特征数是10个，但这可以通过`max_display`参数来调整。<jupyter_code>shap.plots.beeswarm(shap_values, max_display=20)<jupyter_output><empty_output><jupyter_text>Feature ordering默认情况下，特征的排序采用`shap_values.abs.mean(0)`，即每个特征的SHAP值的平均绝对值。然而，这种排序更强调广泛的平均影响，而较少强调罕见但幅度大的影响。如果我们想找到对个人有高影响的特征，我们可以改用最大绝对值来排序。<jupyter_code>shap.plots.beeswarm(shap_values, order=shap_values.abs.max(0))<jupyter_output><empty_output><jupyter_text>Useful transforms有时，在我们绘制SHAP值之前，对其进行转换是有帮助的。下面我们绘制绝对值并将颜色固定为红色。这与标准的`shap_values.abs.mean(0)`条形图形成了更丰富的平行关系，因为条形图只是绘制了蜂巢图中各点的平均值。<jupyter_code>shap.plots.beeswarm(shap_values.abs, color="shap_red")
shap.plots.bar(shap_values.abs.mean(0))<jupyter_output><empty_output><jupyter_text>Custom colors默认情况下，`beeswarm`使用`shap.plots.color.red_blue`颜色图谱，但你可以使用`color`参数传递任何matplotlib颜色或颜色图谱。<jupyter_code>import matplotlib.pyplot as plt
shap.plots.beeswarm(shap_values, color=plt.get_cmap("cool"))<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.13402061855670103, 'fraction_numerical': 0.019473081328751432, 'mean_word_length': 19.55294117647059, 'pattern_counts': {'":': 0, '<': 25, '<?xml version=': 0, '>': 24, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '6', 'dir': 'jupyter-structured-clean-dedup', 'id': '182769', 'license': 'MIT', 'n_tokens_mistral': 1063, 'n_tokens_neox': 1113, 'n_words': 41, 'path': 'notebooks/api_examples/plots/beeswarm.ipynb', 'repo_name': 'johnson7788/shap', 'size': '1746'}