⌛ 本弹窗10秒后关闭。
抑郁检测概率计算分析

📊 抑郁检测概率计算详细分析

🎯 文档概述

本文档详细分析多模态抑郁检测系统中抑郁概率的计算过程,包括模型训练、推理计算、多模态融合、阈值判断和严重程度评估等完整流程。通过具体实例和数学公式,帮助您理解概率计算的每一步。

🏗️ 目录


🧠 训练阶段:模型学习过程

1.1 逻辑回归模型训练

逻辑回归是本项目的核心分类算法,其训练过程如下:


pipeline = Pipeline([

    ('scaler', StandardScaler()),

    ('selector', SelectKBest(f_classif, k=25)),

    ('smote', SMOTE(random_state=42, k_neighbors=2)),

    ('clf', LogisticRegression(

        penalty='l1',

        solver='liblinear',

        class_weight='balanced',

        random_state=42,

        max_iter=1000

    ))

])

pipeline.fit(X_train, y_train)

1.2 模型学习原理

逻辑回归模型通过以下步骤学习特征权重:

  1. 线性组合计算

“`math

z = w_0 + w_1 \times \text{特征}_1 + w_2 \times \text{特征}_2 + \dots + w_n \times \text{特征}_n

“`

  1. Sigmoid函数转换

“`math

P(y=1|X) = \frac{1}{1 + e^{-z}}

“`

  1. 权重优化:通过最大似然估计优化权重 w_0, w_1, w_2, …, w_n

1.3 关键组件

  • 特征选择:使用SelectKBest选择最具判别力的特征
      – 多模态模型:选择25个特征
      – 单模态模型:最多选择20个特征
  • 特征标准化:使用StandardScaler将特征标准化为均值0、标准差1的分布
  • 类别不平衡处理:使用SMOTE算法生成合成样本,平衡抑郁样本(约30%)和正常样本(约70%)的分布

1.4 实例说明

假设我们有以下特征:

  • 音频特征:基频(f0_mean) = 85Hz,能量(energy) = 0.32
  • 视频特征:微笑强度(AU12) = 0.25,眉毛降低(AU04) = 2.0
    训练后的权重可能如下:
    w_0 = -1.2, w_1 = -0.05, w_2 = -0.8, w_3 = 0.6, w_4 = 0.9
    线性组合计算:

z = -1.2 + (-0.05) \times 85 + (-0.8) \times 0.32 + 0.6 \times 0.25 + 0.9 \times 2.0

z = -1.2 – 4.25 – 0.256 + 0.15 + 1.8 = -3.756
Sigmoid转换:


P(y=1|X) = \frac{1}{1 + e^{-(-3.756)}} = \frac{1}{1 + e^{3.756}} \approx \frac{1}{1 + 42.7} \approx 0.023

这表示该样本有2.3%的概率是抑郁。


🔍 推理阶段:概率计算

2.1 单模态概率计算

在推理阶段,系统根据输入特征计算抑郁概率:


# 音频模型概率计算

p_a = float(self.models['audio'].predict_proba(X_a)[0][1])

  

# 视频模型概率计算

p_v = float(self.models['visual'].predict_proba(X_v)[0][1])

2.2 概率计算步骤

  1. 特征准备:从输入数据中提取对应模态的特征向量

  2. 特征标准化:使用训练时保存的 scaler 进行标准化

  3. 模型预测:调用 predict_proba() 方法获取预测概率

  4. 结果提取[0][1] 表示第一个样本的正类(抑郁)概率

2.3 概率范围

  • 最小值:0.0(完全不可能抑郁)

  • 最大值:1.0(确定抑郁)

  • 实际意义:表示样本属于抑郁类别的概率

2.4 实例说明

假设我们有以下输入特征:

音频特征


audio_features = {

    'aud_f0_mean': 75,

    'aud_energy': 0.28,

    'aud_voiced_ratio': 0.6

}

视频特征


visual_features = {

    'vis_AU12_r_mean': 0.15,

    'vis_AU04_r_mean': 2.5,

    'vis_gaze_angle_x_mean': 0.12

}

模型预测结果:

  • 音频模型输出:p_a = 0.78(78%概率抑郁)

  • 视频模型输出:p_v = 0.65(65%概率抑郁)


🔄 多模态融合:加权决策融合

3.1 融合策略

系统采用加权决策融合策略,结合音频和视频模型的预测结果:


# 加权融合:音频权重0.55,视频权重0.45

proba = p_a * 0.55 + p_v * 0.45

3.2 融合原理

  • 权重来源:基于实验结果优化得到的最佳权重组合

  • 音频权重更高:0.55(音频)vs 0.45(视频)

  • 原理:音频特征对抑郁检测的贡献更大

3.3 融合优势

  • 信息互补:音频和视频特征提供不同维度的信息

  • 鲁棒性增强:单个模态质量不佳时仍能获得较好结果

  • 准确性提升:融合结果通常优于单模态预测

3.4 融合示例

示例1:正常情况


# 音频模型输出概率:p_a = 0.85

# 视频模型输出概率:p_v = 0.65

# 融合后概率:0.85 × 0.55 + 0.65 × 0.45 = 0.76(76%概率抑郁)

示例2:单模态质量差


# 音频模型输出概率:p_a = 0.90(高质量音频)

# 视频模型输出概率:p_v = 0.40(模糊视频,质量差)

# 融合后概率:0.90 × 0.55 + 0.40 × 0.45 = 0.675(67.5%概率抑郁)

# 即使视频质量差,系统仍能基于音频特征给出合理判断

示例3:双模态一致


# 音频模型输出概率:p_a = 0.80

# 视频模型输出概率:p_v = 0.80

# 融合后概率:0.80 × 0.55 + 0.80 × 0.45 = 0.80(80%概率抑郁)


✅ 阈值判断:最终分类

4.1 阈值获取

系统通过以下优先级获取阈值:


threshold, th_source = self.get_threshold(mode)

is_depressed = proba >= threshold

4.2 阈值确定方法

  1. 手动配置阈值:优先使用用户手动设置的阈值

  2. 自动校准阈值:基于F2分数优化的阈值(0.05-0.75范围)

  3. 默认阈值:音频0.55,视频0.5,多模态0.5

4.3 阈值优化

阈值通过最大化F2分数进行优化:


def _optimal_f2_threshold(probas, y_true, default=0.50):

    best_th, best_f2 = default, -1.0

    for th in np.linspace(0.1, 0.9, 41):

        y_pred = (probas >= th).astype(int)

        f2 = fbeta_score(y_true, y_pred, beta=2)

        if f2 > best_f2:

            best_f2, best_th = f2, th

    return float(best_th)

4.4 阈值作用

  • 将连续的概率值转换为二分类结果(抑郁/非抑郁)

  • 平衡召回率和精确率(优先保证高召回率,减少漏诊)

4.5 判断示例

示例1:高于阈值


# 融合后概率:proba = 0.76

# 多模态阈值:threshold = 0.5

# 判断:0.76 >= 0.5 → 判定为抑郁

示例2:低于阈值


# 融合后概率:proba = 0.45

# 多模态阈值:threshold = 0.5

# 判断:0.45 < 0.5 → 判定为非抑郁

示例3:接近阈值


# 融合后概率:proba = 0.52

# 多模态阈值:threshold = 0.5

# 判断:0.52 >= 0.5 → 判定为抑郁(临界情况)


📈 严重程度评估:PHQ-8分数计算

5.1 双重评估机制

系统采用双重机制评估严重程度:


# 方法1:回归模型预测(优先)

predicted_score = float(self.score_models[mode].predict(X_score)[0])

  

# 方法2:概率映射(备用)

if final_score <= 0:

    if proba < threshold:

        final_score = (proba / threshold) * 9.9  # 映射到0~9.9

    else:

        ratio = (proba - threshold) / (1.0 - threshold)

        final_score = 10.0 + ratio * 14.0  # 映射到10~24

5.2 回归模型

系统训练了Ridge回归模型预测PHQ-8分数:


reg_pipeline = Pipeline([

    ('scaler', StandardScaler()),

    ('selector', SelectKBest(f_regression, k=25)),

    ('reg', Ridge(alpha=1.0, random_state=42))

])

5.3 严重程度分级标准

根据PHQ-8分数进行严重程度分级:

| 分数范围 | 严重程度 | 颜色标识 |

|———|———|——–|

| 0-4分 | 无抑郁倾向 | 绿色 |

| 5-9分 | 轻度抑郁 | 黄色 |

| 10-14分 | 中度抑郁 | 橙色 |

| 15-19分 | 中重度抑郁 | 橙红色 |

| 20-24分 | 重度抑郁 | 红色 |

5.4 分数融合逻辑

系统实现了智能的分数融合逻辑,确保分类结果与分数保持一致:


# 如果分类器判定为抑郁但分数过低,强制提升分数

if is_depressed and final_score < 10:

    confidence = (proba - threshold) / (1.0 - threshold)

    boost = 10.5 + confidence * 5.0

    final_score = max(final_score, boost)

  

# 如果分类器判定为非抑郁但分数过高,强制压低分数

if not is_depressed and final_score >= 10:

    final_score = min(final_score, 9.5)

5.5 分数计算示例

示例1:使用回归模型


# 回归模型预测分数:predicted_score = 16.5

# 分类结果:is_depressed = True(抑郁)

# 最终分数:16.5 → 中重度抑郁

示例2:使用概率映射(低于阈值)


# 融合后概率:proba = 0.4(低于阈值0.5)

# 计算:final_score = (0.4 / 0.5) × 9.9 = 7.92

# 最终分数:7.92 → 轻度抑郁

示例3:使用概率映射(高于阈值)


# 融合后概率:proba = 0.75(高于阈值0.5)

# 计算:ratio = (0.75 - 0.5) / (1.0 - 0.5) = 0.5

# final_score = 10.0 + 0.5 × 14.0 = 17.0

# 最终分数:17.0 → 中重度抑郁

示例4:分数融合修正


# 分类结果:is_depressed = True(抑郁)

# 回归模型预测:final_score = 8.5(低于10)

# 修正计算:

# confidence = (0.76 - 0.5) / (1.0 - 0.5) = 0.52

# boost = 10.5 + 0.52 × 5.0 = 13.1

# final_score = max(8.5, 13.1) = 13.1

# 最终分数:13.1 → 中度抑郁(与分类结果一致)


📊 完整流程图


输入数据 → 特征提取 → 特征预处理 → 模型预测 → 多模态融合 → 阈值判断 → 严重程度评估 → 最终结果

    ↓          ↓            ↓           ↓            ↓            ↓             ↓

音视频文件   音频特征      标准化     单模态概率      加权融合      抑郁/非抑郁     PHQ-8分数

            视频特征      特征选择                     0.55/0.45


🔢 示例计算过程

步骤1:特征提取

  • 音频特征aud_f0_mean=85, aud_energy=0.32, aud_voiced_ratio=0.75, ...

  • 视频特征vis_AU12_r_mean=0.25, vis_pose_Rx_mean=0.15, vis_gaze_angle_x_mean=0.08, ...

步骤2:模型预测

  • 音频模型:通过逻辑回归计算得到概率 p_a = 0.82

  • 视频模型:通过逻辑回归计算得到概率 p_v = 0.68

步骤3:多模态融合


\text{proba} = 0.82 \times 0.55 + 0.68 \times 0.45 = 0.451 + 0.306 = 0.757

步骤4:阈值判断

  • 阈值threshold = 0.5

  • 判断0.757 >= 0.5 → 判定为抑郁

步骤5:严重程度评估

  • 回归模型预测:PHQ-8分数 = 16.5

  • 严重程度:中重度抑郁(橙红色)

步骤6:最终结果


{

    'mode': 'multimodal',

    'proba': 0.757,

    'threshold': 0.5,

    'is_depressed': True,

    'phq8_score': 16.5,

    'severity': '中重度抑郁',

    'severity_color': '#eb5e34'

}


💡 技术要点总结

1. 概率计算基础

  • 算法核心:逻辑回归 + Sigmoid函数

  • 概率范围:0.0~1.0

  • 输出解释:样本属于抑郁类别的概率

2. 多模态融合优势

  • 权重优化:基于实验确定的最佳权重组合

  • 信息互补:音频和视频特征相互补充

  • 鲁棒性:支持单模态回退机制

3. 阈值优化策略

  • 优化目标:最大化F2分数(强调召回率)

  • 阈值范围:0.05~0.75(经过钳位处理)

  • 优先级:手动配置 > 自动校准 > 默认值

4. 严重程度评估

  • 双重机制:回归模型 + 概率映射

  • 分数范围:0~24分(PHQ-8量表)

  • 分级标准:5级严重程度,颜色编码

5. 系统设计特点

  • 模块化:清晰的组件划分

  • 灵活性:支持不同模态的输入

  • 可解释性:提供特征贡献度分析

  • 用户友好:直观的可视化结果


📚 相关文件

  • 3.训练模型.py:模型训练代码

  • 本地测试系统/inference.py:推理引擎实现

  • 本地测试系统/gui_main.py:用户界面


未经允许,禁止转载
如有侵权,联系删除
上一篇
下一篇