• 多维高斯分布是一种特殊的多维随机分布,应用非常广泛,很多现实问题的原始特征分布都可以看作多维高斯分布。本文以数据特征服从多维高斯分布的多分类任务这一理想场景为例,从理论层面分析数据特征和分类问题难度的关系
  • 注意,本文分析不涉及算法层面,仅仅是对数据特征的分析,实用意义不强,纯机器学习层面可能只对特征挖掘有点作用,工程层面可以指导探测器设计。本文主旨在于借助这个场景说明多维高斯分布的信息熵和KL散度计算方法
  • 关于信息熵和KL散度(相对熵)的详细说明参考:信息论概念详细梳理:信息量、信息熵、条件熵、互信息、交叉熵、KL散度、JS散度


文章目录

  • 0. 场景
  • 1. 多维高斯分布
  • 2. 多维高斯分布的信息熵
  • 3. 两个多维高斯分布之间的相对熵(KL散度)
  • 4 总结


0. 场景

  • 考虑一般的多分类机器学习场景:设目标识别算法的原始输入多维高斯分布的信息熵和KL散度计算_相对熵,定义为 多维高斯分布的信息熵和KL散度计算_多维高斯分布_02 维随机向量 多维高斯分布的信息熵和KL散度计算_相对熵_03,设检测目标类别数为 多维高斯分布的信息熵和KL散度计算_信息熵_04
  • 进一步假设 多维高斯分布的信息熵和KL散度计算_KL散度_05 是多维高斯分布,这意味着原始观测中每个维度都服从高斯分布。当 多维高斯分布的信息熵和KL散度计算_信息熵_06 时,多维随机变量 多维高斯分布的信息熵和KL散度计算_多维高斯分布_07 沿维度 多维高斯分布的信息熵和KL散度计算_数据_08多维高斯分布的信息熵和KL散度计算_数据_09 的边缘分布示意图如下,使用不同颜色代表不同类别数据

    绘图代码供参考:
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.patches import Ellipse

# 高斯分布参数,f0和f1两个维度
means_2d = [(0, 0), (2, 3), (4, 2), (6, 5)]
covariances = [
    np.array([[0.35, 0.05], 
              [0.05, 0.35]]), 
    np.array([[0.75, 0.5], 
              [0.5, 0.75]]), 
    np.array([[0.2, 0.1], 
              [0.1, 0.2]]), 
    np.array([[1.25, -0.4], 
              [-0.4, 1.25]])
]
colors = ['blue', 'green', 'red', 'purple']
fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(8, 8))

# 绘制沿f0的的边缘分布
means_1d = [m[0] for m in means_2d]
std_devs = [c[0,0].item() for c in covariances]
# 概率密度曲线
x = np.linspace(-2, 10, 1000)
for i, (mean, std_dev, color) in enumerate(zip(means_1d, std_devs, colors)):
    y = (1/(std_dev * np.sqrt(2 * np.pi))) * np.exp(-0.5 * ((x - mean) / std_dev)**2)
    ax1.plot(x, y, color=color, label=f'Class {i}')
# 抽样样本用竖线表示
for mean, std_dev, color in zip(means_1d, std_devs, colors):
    samples = np.random.normal(mean, std_dev, 20)
    ax1.vlines(samples, ymin=0, ymax=(1/(std_dev * np.sqrt(2 * np.pi))) * np.exp(-0.5 * ((samples - mean) / std_dev)**2), color=color, linestyle='-', alpha=0.2)
# 图例和标题
ax1.legend()
ax1.set_title('Distribution of raw observation along feature $f_0$')
ax1.set_xlabel('$f_0$')
ax1.set_ylabel('Probability Density')


# 绘制沿f0和f1的的二维边缘分布
for mean, cov, color in zip(means_2d, covariances, colors):
    eigenvalues, eigenvectors = np.linalg.eigh(cov)
    order = eigenvalues.argsort()[::-1]
    eigenvalues, eigenvectors = eigenvalues[order], eigenvectors[:, order]
    angle = np.degrees(np.arctan2(*eigenvectors[:, 0][::-1]))
    width, height = 3 * np.sqrt(eigenvalues)
    ell = Ellipse(xy=mean, width=width, height=height, angle=angle, color=color, alpha=0.2)
    ax2.add_artist(ell)
# 抽样样本用点表示
for i, (mean, cov, color) in enumerate(zip(means_2d, covariances, colors)):
    samples = np.random.multivariate_normal(mean, cov, 100)
    ax2.scatter(samples[:, 0], samples[:, 1], color=color, s=4, label=f'Class {i}')
# 添加图例和标题
ax2.legend()
ax2.set_title('Distribution of raw observation along feature $f_0$ & $f_1$')
ax2.set_xlabel('$f_0$')
ax2.set_ylabel('$f_1$')

# 显示图形
plt.tight_layout()
plt.show()
  • 注意图示为原始输入数据 多维高斯分布的信息熵和KL散度计算_信息熵_10 的样本分布情况,识别算法从中提取特征用于分类。注意到
  1. 数据 多维高斯分布的信息熵和KL散度计算_数据_11(分布 多维高斯分布的信息熵和KL散度计算_信息熵_12 )的集中程度描述了第 多维高斯分布的信息熵和KL散度计算_KL散度_13。分布越集中,说明探测系统对第 多维高斯分布的信息熵和KL散度计算_数据_14
  2. 不同数据 多维高斯分布的信息熵和KL散度计算_数据_11多维高斯分布的信息熵和KL散度计算_相对熵_16(分布 多维高斯分布的信息熵和KL散度计算_信息熵_12多维高斯分布的信息熵和KL散度计算_多维高斯分布_18。两类数据距离越大则差异越强,越容易区分。反之,若两类数据的原始数据分布有重叠(如 多维高斯分布的信息熵和KL散度计算_相对熵_19),则理论上重叠部分的样本所属类别无法准确区分
  • 为最大化识别准确率,从两方面考虑(以下准则可以用来指导探测器设计)
  1. 增大类内特征强度(同类数据尽量集中),形式化表示为最小化每一类数据分布信息熵的总和
  2. 增大类间特征差异(不同类数据尽量远离),形式化表示为最大化每一组数据分布相对熵(KL散度)的总和。值得注意的是,由于KL散度不对称,无法直接作为度量,这里还需要一些trick

1. 多维高斯分布

  • 设原始输入为 多维高斯分布的信息熵和KL散度计算_KL散度_20,定义为 多维高斯分布的信息熵和KL散度计算_多维高斯分布_21 维随机向量 多维高斯分布的信息熵和KL散度计算_相对熵_22,设检测目标类别数为 多维高斯分布的信息熵和KL散度计算_相对熵_23,第 多维高斯分布的信息熵和KL散度计算_KL散度_24 类目标的原始观测输入服从多维高斯分布,即:
    多维高斯分布的信息熵和KL散度计算_相对熵_25 称随机向量 多维高斯分布的信息熵和KL散度计算_数据_26 服从期望为 多维高斯分布的信息熵和KL散度计算_相对熵_27,协方差矩阵为 多维高斯分布的信息熵和KL散度计算_数据_28 的多维正态分布,记为 多维高斯分布的信息熵和KL散度计算_KL散度_29。其中 多维高斯分布的信息熵和KL散度计算_数据_28 为协方差矩阵:
    多维高斯分布的信息熵和KL散度计算_相对熵_31
  • 显然 多维高斯分布的信息熵和KL散度计算_KL散度_32 是实对称矩阵,通常情况下是正定矩阵(只要 多维高斯分布的信息熵和KL散度计算_KL散度_33 不为常数,其任意阶顺序主子式 > 0)。这种矩阵有一些良好性质,列举一些以便后续计算
  1. 多维高斯分布的信息熵和KL散度计算_数据_34
  2. 奇异值分解(SVD分解)结果和特征值分解(谱分解)一致,即有
    多维高斯分布的信息熵和KL散度计算_相对熵_35 其中 多维高斯分布的信息熵和KL散度计算_多维高斯分布_36 是正交矩阵,多维高斯分布的信息熵和KL散度计算_多维高斯分布_37 是对角阵且对角线上的元素是正的(正定矩阵),这意味着 多维高斯分布的信息熵和KL散度计算_数据_38 可以如下开方:
    多维高斯分布的信息熵和KL散度计算_信息熵_39多维高斯分布的信息熵和KL散度计算_多维高斯分布_40
  • 多维高斯分布有以下基本统计量(期望、方差、二阶矩)
    多维高斯分布的信息熵和KL散度计算_相对熵_41 其中二阶矩就是普通随机变量常见结论 多维高斯分布的信息熵和KL散度计算_信息熵_42

2. 多维高斯分布的信息熵

  • 设第 多维高斯分布的信息熵和KL散度计算_KL散度_24 类目标原始观测的分布 多维高斯分布的信息熵和KL散度计算_数据_44,计算其信息熵
    多维高斯分布的信息熵和KL散度计算_相对熵_45 最后一项的展开需要借助马哈拉诺比斯变换:对于任意服从多维高斯分布的随机向量 多维高斯分布的信息熵和KL散度计算_数据_46, 有随机向量 多维高斯分布的信息熵和KL散度计算_多维高斯分布_47 是标准高斯分布,即 多维高斯分布的信息熵和KL散度计算_多维高斯分布_48,注意到
    多维高斯分布的信息熵和KL散度计算_KL散度_49 故有
    多维高斯分布的信息熵和KL散度计算_数据_50
  • 综上所述,有
    多维高斯分布的信息熵和KL散度计算_KL散度_51

3. 两个多维高斯分布之间的相对熵(KL散度)

  • 下面计算第 多维高斯分布的信息熵和KL散度计算_信息熵_52 类和第 多维高斯分布的信息熵和KL散度计算_KL散度_53 类目标原始观测的分布 多维高斯分布的信息熵和KL散度计算_相对熵_54 之间的相对熵:
    多维高斯分布的信息熵和KL散度计算_相对熵_55 展开其中第二项:
    多维高斯分布的信息熵和KL散度计算_信息熵_56
    进一步展开其中最后一项:
    多维高斯分布的信息熵和KL散度计算_相对熵_57 注意到 多维高斯分布的信息熵和KL散度计算_多维高斯分布_58 时上式等于 多维高斯分布的信息熵和KL散度计算_多维高斯分布_02,退化到式 (2.4)
  • 综上所述,有
    多维高斯分布的信息熵和KL散度计算_多维高斯分布_60
  • 根据定义,KL 散度是非对称的,因此不能当作一个度量使用,为了使其称为有效度量,对于任意分布 多维高斯分布的信息熵和KL散度计算_KL散度_61,交互顺序计算两次 KL 散度,求和作为二者距离的度量,即
    多维高斯分布的信息熵和KL散度计算_数据_62

4 总结

  • 最后,把结论式 (2.4) 和 (3.5) 回带第0节的优化目标中,引入优化协调系数 多维高斯分布的信息熵和KL散度计算_数据_63,我们要最大化
    多维高斯分布的信息熵和KL散度计算_相对熵_64
    当任意第 多维高斯分布的信息熵和KL散度计算_KL散度_24 类目标原始观测分布 多维高斯分布的信息熵和KL散度计算_相对熵_66 为各项独立高斯分布时,有 多维高斯分布的信息熵和KL散度计算_数据_28 是对角矩阵,设为 多维高斯分布的信息熵和KL散度计算_多维高斯分布_68,上式可表示为
    多维高斯分布的信息熵和KL散度计算_相对熵_69
  • 直观理解:
  1. 多维高斯分布的信息熵和KL散度计算_相对熵_70:本项中 多维高斯分布的信息熵和KL散度计算_信息熵_71,故此处希望每个分布 多维高斯分布的信息熵和KL散度计算_信息熵_72 的协方差矩阵行列式尽量小。协方差矩阵行列式的值反映了数据分布的总体不确定性,行列式越小,表示数据在各个维度上的分布越集中
  2. 多维高斯分布的信息熵和KL散度计算_数据_73 :矩阵的迹等于矩阵特征值之和,特征值代表线性变换对空间的拉伸程度,因此迹反映了线性变换对空间的拉伸和压缩的总量多维高斯分布的信息熵和KL散度计算_数据_74 可以看作对空间连续施加两个线性变换,多维高斯分布的信息熵和KL散度计算_信息熵_75 时对空间没有变换,此项取得最小,反之二者对空间每一维度拉伸和压缩程度差异越大(特征值比例越大)时,此项越大。故此项意味着不同分布的散布特性应尽量不同
  3. 多维高斯分布的信息熵和KL散度计算_KL散度_76:本项表示均值向量之间的差异,权重由协方差矩阵的逆矩阵决定。它衡量了均值向量之间的方差加权距离