你可能正在處理來自不同醫院、不同設備或不同人羣的睡眠多導睡眠圖(PSG)材料集(比如 Sleep-EDF, SleepDG, HMC 等),並發現一個棘手的問題:在一個資料集上訓練得很好的模型,換到另一個內容集上效果就一落千丈。

這個問題,大家稱之為域偏差(Domain Bias)或域偏移(Domain Shift)

這篇博客的唯一目的,就是帶你——一個“小白”——從最基礎的統計學原理和公式出發,一步步學會如何量化評判這些數據集之間的差異。


路線圖

我們將分步驟進行,就像爬樓梯一樣:

  1. Step 1: 描述性統計- <em>給你的內容集“量體温”</em>
  2. Step 2: 數據分佈- <em>看清數據集的“長相”</em>
  3. Step 3: 假設檢驗- <em>判斷“差異”是否真的存在</em>
  4. Step 4: 分佈相似性度量- <em>域偏差的“量化”</em>
  5. Step 5: 綜合分析- <em>如何向他人展示你的發現</em>

Step 1: 描述性統計 (Descriptive Statistics)

這是最基礎的第一步。我們要為每個數據集計算一些“身份信息”。

  • 類比:想象你有兩組人(兩個數據集),你應該先知道他們的平均身高、體重範圍等主要信息。

1.1 中心趨勢 (Central Tendency)

它告訴我們數據的“中心”在哪裏。

a) 均值 (Mean)

就是我們常説的“平均數”。它對“異常值”(比如一個特定大的偽影)非常敏感。

公式:
對於一個特徵(比如C4-A1通道的EEG信號幅度),其均值為像數據科學家一樣思考:12步指南(中) - 阿里云云棲社區的個人空間 -_資料集
像數據科學家一樣思考:12步指南(中) - 阿里云云棲社區的個人空間 -_方差_02
其中,像數據科學家一樣思考:12步指南(中) - 阿里云云棲社區的個人空間 -_數據集_03是樣本總數(比如總Epochs數),像數據科學家一樣思考:12步指南(中) - 阿里云云棲社區的個人空間 -_資料集_04 是第 像數據科學家一樣思考:12步指南(中) - 阿里云云棲社區的個人空間 -_資料集_05個樣本的值。

b) 中位數 (Median)

將所有素材從高到低排序,排在最中間的那個數。它對異常值不敏感,更“穩健”。

公式:
像數據科學家一樣思考:12步指南(中) - 阿里云云棲社區的個人空間 -_資料集_06

1.2 離散程度 (Dispersion)

它告訴我們材料有多“分散”或多“集中”。

a) 方差 (Variance)

衡量每個數據點離均值有多遠。方差越大,信息越分散。

公式:
像數據科學家一樣思考:12步指南(中) - 阿里云云棲社區的個人空間 -_方差_07

b) 標準差 (Standard Deviation)

方差的平方根。它的好處是單位和原始數據相同(比如像數據科學家一樣思考:12步指南(中) - 阿里云云棲社區的個人空間 -_數據集_08),因此更容易解釋。

公式:
像數據科學家一樣思考:12步指南(中) - 阿里云云棲社區的個人空間 -_數據集_09


PSG應用與域偏差初探:

假設你計算了兩個PSG素材集(數據集A 和 數據集B)的統計數據:

特徵

指標

信息集 A (醫院A)

資料集 B (醫院B)

患者年齡

均值 ()

45.2 歲

58.7 歲

EEG (C4-A1) 幅度

標準差 ()

15.3

28.1

結論:

  1. 年齡差異:數據集B的患者平均年齡顯著大於A。這是一個協變量偏移 (Covariate Shift)。這可能導致模型學到的“年齡相關的睡眠特徵”在另一個數據集上失效。
  2. 信號幅度差異:數據集B的EEG信號標準差遠大於A。這可能意味着B的設備靈敏度不同,或者偽影(Artifacts)更多。這是內容本身的偏移

Step 2: 數據分佈 (Data Distribution)

均值和方差只是“總結”。我們更想知道資料整體的“長相”

  • 類比:知道兩組人的平均身高還不夠,我想知道他們中“高個子”和“矮個子”各佔多少比例。

這就是概率密度函數 (Probability Density Function, PDF)直方圖 (Histogram) 要做的事。

公式 (概念):
生物信號)服從就是我們頻繁假設信息(尤其正態分佈(高斯分佈)
像數據科學家一樣思考:12步指南(中) - 阿里云云棲社區的個人空間 -_數據集_14
這個公式的重點是:一個分佈可以由它的像數據科學家一樣思考:12步指南(中) - 阿里云云棲社區的個人空間 -_資料集像數據科學家一樣思考:12步指南(中) - 阿里云云棲社區的個人空間 -_方差_16


PSG應用與可視化:

大家行畫出兩個材料集某個特徵(比如某個頻帶的能量)的分佈圖。

假設的可視化圖:

[一個顯示兩個不同分佈的假設圖表]
                 |
      數據集 A     |     .
     (μ=10, σ=2)   |    . .
                 |   .   .
                 |  .     .
   概率密度       | .       .        數據集 B
                 | .         .      (μ=15, σ=4)
                 | .           .
                 | .             .
                 |.               .
                 |________________._________________
                             特徵值 (例如: Delta波能量)
圖1:假設數據集A與數據集B的特徵分佈對比

結論:
從上圖(假設)中我們肉眼可見

  1. 均值不同:B的中心(15)遠大於A的中心(10)。
  2. 方差不同:B的分佈更“胖”(像數據科學家一樣思考:12步指南(中) - 阿里云云棲社區的個人空間 -_資料集_17),説明其特徵值更分散。

這就是最直觀的域偏差!


Step 3: 假設檢驗 (Hypothesis Testing)

我們在Step 1和Step 2中“看到”了差異。但這個差異是**“顯著的”(真的有不同),還是“偶然的”**(可能只是抽樣巧合)?

  • 類比:你在A組抽了10個人,B組抽了10個人,發現A組平均身高175cm,B組176cm。這個1cm的差異是“真的”嗎?還是你下次再抽10個人,可能A組就177cm了?

假設檢驗就是來回答這個問題的。

3.1 零假設 (像數據科學家一樣思考:12步指南(中) - 阿里云云棲社區的個人空間 -_資料集_18) vs 備擇假設 (像數據科學家一樣思考:12步指南(中) - 阿里云云棲社區的個人空間 -_資料集_19)

  • 零假設 (像數據科學家一樣思考:12步指南(中) - 阿里云云棲社區的個人空間 -_資料集_18):“沒有差異”。(例如:像數據科學家一樣思考:12步指南(中) - 阿里云云棲社區的個人空間 -_數據集_21
  • 備擇假設 (像數據科學家一樣思考:12步指南(中) - 阿里云云棲社區的個人空間 -_資料集_19):“存在差異”。(例如:像數據科學家一樣思考:12步指南(中) - 阿里云云棲社區的個人空間 -_資料集_23

我們的目標是**“拒絕”像數據科學家一樣思考:12步指南(中) - 阿里云云棲社區的個人空間 -_資料集_18**。

3.2 t-檢驗 (t-test)

最常用的檢驗之一,用於比較兩個組的均值是否有顯著差異。

公式 (獨立雙樣本t-test):
它會計算一個像數據科學家一樣思考:12步指南(中) - 阿里云云棲社區的個人空間 -_數據集_25,這個值越大,説明差異越“明顯”。
像數據科學家一樣思考:12步指南(中) - 阿里云云棲社區的個人空間 -_數據集_26
其中,像數據科學家一樣思考:12步指南(中) - 阿里云云棲社區的個人空間 -_方差_27是A和B的樣本均值;像數據科學家一樣思考:12步指南(中) - 阿里云云棲社區的個人空間 -_數據集_28 是樣本量;像數據科學家一樣思考:12步指南(中) - 阿里云云棲社區的個人空間 -_資料集_29是合併標準差(有點複雜,這裏先理解概念)。

3.3 p-值 (p-value)

t-test 會給我們一個像數據科學家一樣思考:12步指南(中) - 阿里云云棲社區的個人空間 -_資料集_30

  • p值的“小白”解釋:如果零假設(像數據科學家一樣思考:12步指南(中) - 阿里云云棲社區的個人空間 -_資料集_18)是真的(即A和B沒有差異),大家能觀測到當前這種(甚至更極端)差異的概率
  • 判斷標準:通常,我們設置一個顯著性水平像數據科學家一樣思考:12步指南(中) - 阿里云云棲社區的個人空間 -_數據集_32(比如 像數據科學家一樣思考:12步指南(中) - 阿里云云棲社區的個人空間 -_資料集_33)。
  • 如果 像數據科學家一樣思考:12步指南(中) - 阿里云云棲社區的個人空間 -_資料集_34 (例如 像數據科學家一樣思考:12步指南(中) - 阿里云云棲社區的個人空間 -_數據集_35):説明“如果A和B沒差異,大家基本不可能看到現在的資料”。因此,我們拒絕像數據科學家一樣思考:12步指南(中) - 阿里云云棲社區的個人空間 -_資料集_18,認為**“差異是顯著的”**。
  • 如果 像數據科學家一樣思考:12步指南(中) - 阿里云云棲社區的個人空間 -_資料集_37 (例如 像數據科學家一樣思考:12步指南(中) - 阿里云云棲社區的個人空間 -_方差_38):説明“這個差異很可能是偶然”。我們無法拒絕像數據科學家一樣思考:12步指南(中) - 阿里云云棲社區的個人空間 -_資料集_18

PSG應用:

你對Step 1中的“患者年齡”進行t-test:

  • 像數據科學家一樣思考:12步指南(中) - 阿里云云棲社區的個人空間 -_資料集_18:數據集A和B的患者平均年齡相同
  • 像數據科學家一樣思考:12步指南(中) - 阿里云云棲社區的個人空間 -_資料集_19:數據集A和B的患者平均年齡不同
  • 你運行檢驗,得到像數據科學家一樣思考:12步指南(中) - 阿里云云棲社區的個人空間 -_資料集_42
  • 結論:像數據科學家一樣思考:12步指南(中) - 阿里云云棲社區的個人空間 -_數據集_43,我們拒絕像數據科學家一樣思考:12步指南(中) - 阿里云云棲社區的個人空間 -_資料集_18。數據集A和B的患者年齡存在統計學上的顯著差異。這是一個必須在模型訓練中考慮的嚴重域偏差

Step 4: 分佈相似性度量 (深入域偏差)

t-test 只比較“均值”。但有時兩個分佈均值相同,但“形狀”完全不同(比如一個高瘦,一個矮胖)。我們需要更高級的工具來比較整個分佈

4.1 K-S 檢驗 (Kolmogorov-Smirnov Test)

K-S 檢驗用於比較兩個分佈的累積分佈函數 (CDF)

  • 類比:它不是比較“平均身高”,而是比較“身高在170cm以下的人的比例”、“180cm以下的人的比例”…等等所有點。
  • 公式 (概念):它計算兩個CDF之間的最大垂直距離像數據科學家一樣思考:12步指南(中) - 阿里云云棲社區的個人空間 -_數據集_45
    像數據科學家一樣思考:12步指南(中) - 阿里云云棲社區的個人空間 -_方差_46
  • K-S 檢驗也會給出一個像數據科學家一樣思考:12步指南(中) - 阿里云云棲社區的個人空間 -_資料集_30 值。如果 像數據科學家一樣思考:12步指南(中) - 阿里云云棲社區的個人空間 -_數據集_43,説明兩個分佈形狀顯著不同

4.2 JS 散度 (Jensen-Shannon Divergence)

這是信息論中一個非常強大的應用,用於衡量兩個概率分佈的“相似性”。

  • 小白解釋:它衡量“用一個分佈去描述另一個分佈”有多“困難”。
  • 基礎 - KL 散度 (Kullback-Leibler Divergence):
    像數據科學家一樣思考:12步指南(中) - 阿里云云棲社區的個人空間 -_資料集_49
    它衡量用 像數據科學家一樣思考:12步指南(中) - 阿里云云棲社區的個人空間 -_資料集_50像數據科學家一樣思考:12步指南(中) - 阿里云云棲社區的個人空間 -_資料集_51時的“信息損失”。注意:像數據科學家一樣思考:12步指南(中) - 阿里云云棲社區的個人空間 -_數據集_52(不對稱)。
  • JS 散度 (JSD):它是KL散度的“升級版”,具有對稱性
    像數據科學家一樣思考:12步指南(中) - 阿里云云棲社區的個人空間 -_數據集_53
    其中,像數據科學家一樣思考:12步指南(中) - 阿里云云棲社區的個人空間 -_數據集_54是兩個分佈的平均分佈。

用ln):就是JS 散度的值域是 [0, 1](如果用log2)或 [0, ln(2)](要

  • 像數據科學家一樣思考:12步指南(中) - 阿里云云棲社區的個人空間 -_方差_55:兩個分佈完全相同
  • 像數據科學家一樣思考:12步指南(中) - 阿里云云棲社區的個人空間 -_數據集_56越大:兩個分佈差異越大

PSG應用 (核心):

這才是你分析域偏差的“殺手鐗”!

  1. 提取特徵:對每個Epoch(例如30秒的PSG片段)提取特徵(比如功率譜密度 Power Spectral Density, PSD)。
  2. 創建分佈:將所有Epoch的特徵值做成直方圖(PDF),這就是像數據科學家一樣思考:12步指南(中) - 阿里云云棲社區的個人空間 -_數據集_57(數據集A的特徵分佈) 和像數據科學家一樣思考:12步指南(中) - 阿里云云棲社區的個人空間 -_資料集_58(材料集B的特徵分佈)。
  3. 計算 JSD:
    像數據科學家一樣思考:12步指南(中) - 阿里云云棲社區的個人空間 -_資料集_59

結論:
你得到了一個單一的數值(比如 0.42),它量化了兩個數據集在“這個特徵上”的域偏差有多大。你可以為所有重要特徵(不同通道、不同頻帶)都計算這個分數。


Step 5: 綜合分析 (可視化你的發現)

末了,你不能只給老闆看一堆像數據科學家一樣思考:12步指南(中) - 阿里云云棲社區的個人空間 -_資料集_30值和 JSD 分數。你要求一個直觀的全局視圖

技術:降維與可視化 (t-SNE / PCA)

PSG特徵(比如所有通道的PSD)可能有幾百甚至上千維。我們無法直接畫圖。我們需要用降維技巧把它們“壓”到2D或3D。

  • PCA (主成分分析):線性降維,尋找數據“方差最大”的方向。
  • t-SNE (t-分佈隨機鄰域嵌入):非線性降維,非常擅長“聚類”,能把相似的數據點“拉”到一起。

操作流程:

  1. 從內容集A和資料集B中抽取(比如各5000個)Epochs的特徵。
  2. 將數據集A的特徵標記為“藍色”
  3. 將數據集B的特徵標記為“紅色”
  4. 將所有(10000個)高維特徵數據扔進 t-SNE 算法,讓它降到2D。
  5. 繪製散點圖。

可能的分析結果:

  • 情況一:域偏差極大
  • 你看到的圖像是:左邊一大片“藍色”點,右邊一大片“紅色”點。兩坨分得清清楚楚。
  • 結論:域偏差非常嚴重。模型能輕易“記住”它在哪個數據集上。
  • 情況二:域偏差很小
  • 你看到的圖像是:“藍色”和“紅色”的點均勻地混合在一起,像一碗“紅豆藍莓粥”。
  • 結論:兩個數據集的特徵空間非常相似,模型泛化性會很好。

總結:你的最終評判流程

從0開始評判睡眠PSG資料集的域偏差,你應該:

  1. 看基本盤 (描述性統計): 計算 像數據科學家一樣思考:12步指南(中) - 阿里云云棲社區的個人空間 -_數據集_61。檢查患者元數據(年齡、性別)和信號基本屬性(幅度、噪聲水平)。
  2. 看差異 (假設檢驗):對你懷疑有差異的指標(如年齡)跑一個t-test,用 像數據科學家一樣思考:12步指南(中) - 阿里云云棲社區的個人空間 -_資料集_30值確認差異是否顯著
  3. 看全局 (分佈度量):對關鍵的EEG/EOG/EMG特徵(如頻帶能量),計算JS散度 (JSD),得到一個量化的偏差分數
  4. 看全貌 (可視化): 跑一個 t-SNE,用“顏色”區分數據集。如果能“一眼分開”,就是最直觀的域偏差證據。

通過這套組合拳,你就可以從一個“小白”變成一個能用信息和公式清晰説明“這兩個PSG材料集差異到底有多大”的專業分析師了。