蜂群图理解

蜂群图(Swarm Plot)是一种用于可视化分类数据分布的图表类型。它将数据点沿着一个或多个分类变量轻微地分散,以避免它们之间的重叠,从而更好地显示数据的分布密度和分布趋势。蜂群图特别适用于较小的数据集。

下面通过一个简单的例子来说明蜂群图的概念:

假设我们有一个包含 “day”(星期几)和 “total_bill”(总账单金额)的数据集,其中包含吸烟者和非吸烟者的信息。我们想要查看每天总账单金额的分布情况,并根据是否吸烟者的信息进行区分。

import seaborn as sns
import matplotlib.pyplot as plt

# 创建一个示例数据集
data = {
    'day': ['Thur', 'Fri', 'Sat', 'Sun', 'Thur', 'Fri', 'Sat', 'Sun'],
    'total_bill': [20.5, 15.3, 35.4, 24.7, 12.5, 18.1, 40.3, 30.5],
    'smoker': ['No', 'No', 'Yes', 'No', 'Yes', 'No', 'Yes', 'No']
}

tips = sns.load_dataset("tips")

# 创建蜂群图
sns.catplot(data=tips, kind="swarm", x="day", y="total_bill", hue="smoker")

# 显示图形
plt.show()

在这里插入图片描述

在这个例子中,蜂群图将每个数据点(表示不同天的总账单金额)沿着 “day” 轴分散开来,避免了它们之间的重叠。不同吸烟者状态的数据点以不同的颜色表示,例如,非吸烟者用一种颜色表示,吸烟者用另一种颜色表示。这样,我们可以直观地看到每天总账单金额的分布情况,并观察到吸烟者和非吸烟者之间的差异。

### MATLAB 中绘制 SHAP 蜂群的方法 SHAP (SHapley Additive exPlanations) 是一种用于解释机器学习模型预测结果的技术。虽然 SHAP 值通常与 Python 库 `shap` 结合使用,但在 MATLAB 中也可以通过自定义绘函数来实现类似的可视化效果。 以下是基于 SHAP 数据在 MATLAB 中绘制蜂群的核心方法: #### 1. 准备数据 为了绘制 SHAP 蜂群,需要准备两个主要的数据集: - **特征值矩阵**:表示输入样本的各个特征值。 - **SHAP 值矩阵**:对应于每个样本及其特征的重要性得分。 假设已经计算好了这些数据,则可以按照如下方式处理[^1]。 ```matlab % 示例数据 featureValues = rand(100, 5); % 特征值矩阵 (100个样本, 5个特征) shapValues = randn(100, 5); % SHAP值矩阵 (100个样本, 对应5个特征) % 计算特征均值作为参考点 meanFeatureValues = mean(featureValues); ``` #### 2. 创建蜂群布局 蜂群的关键在于合理分布点的位置以避免重叠并保持清晰可读性。可以通过调整角度和半径的方式模拟这种布局[^2]。 ```matlab function [xPos, yPos] = createSwarmPositions(values, jitterFactor) nPoints = length(values); angles = linspace(0, 2*pi, nPoints + 1); % 圆周上均匀分配的角度 radii = abs(values) * jitterFactor; % 半径大小取决于绝对值 xPos = cos(angles(1:nPoints)) .* radii; yPos = sin(angles(1:nPoints)) .* radii; end ``` 调用此函数生成每列特征对应的坐标位置。 #### 3. 可视化部分 利用上述辅助函数完成最终形渲染过程。 ```matlab figure; for i = 1:size(shapValues, 2) featureName = sprintf('Feature %d', i); % 获取当前特征的相关数据 currentShap = shapValues(:, i); currentValue = featureValues(:, i); % 使用createSwarmPositions创建散点所需坐标 [swarmX, swarmY] = createSwarmPositions(currentValue, 0.1); scatter(swarmX, swarmY, [], currentShap, 'filled'); hold on; % 添加平均线指示器 plot([min(swarmX), max(swarmX)], [meanFeatureValues(i), meanFeatureValues(i)], ... '-k', 'LineWidth', 1.5); end xlabel('Jittered Position'); ylabel('Feature Value or Mean Reference'); title('SHAP Swarm Plot in MATLAB'); colorbar; colormap jet; legend({'Feature Impact'}, 'Location','bestoutside'); grid minor; axis equal tight; hold off; ``` 以上代码片段展示了如何手动构建一个接近标准库功能的效果[^3]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值