標準化二維直方圖並獲得邊緣
我有一個使用Matlab中的hist3函數生成的兩個向量s1和s2的二維直方圖:
[hist2D, binC] = hist3([s1' s2']);
我通過以下方式使其總體積等於單位來對其進行標準化:
L = binC{1}(2) - binC{1}(1); B = binC{2}(2) - binC{2}(1); totalVolume = sum(sum(hist2D.*L*B)); prob2D = hist2D/totalVolume;
**問題:**這是標準化二維直方圖的正確方法嗎?
我還對s1和s2的一維直方圖進行了標準化,如下所示。
[hist1, binCentres1] = hist(s1); binWidth1 = binCentres1(2) - binCentres1(1); prob1 = hist1 / (sum(hist1) * binWidth1); %same for s2
**問題:**如何從歸一化的二維直方圖中獲得邊緣(一維)直方圖?
我已經嘗試通過以下方式執行此操作:
prob1M = sum(prob2D, 2); %extract marginal for s1 prob2M = sum(prob2D, 1); %extract marginal for s2
如果我這樣做正確,我希望prob1等於prob1M。我似乎走在了正確的軌道上,因為條形圖(下圖)看起來很相似,但在垂直軸上進行了縮放。也許我做錯了規範化?
我也嘗試使用以下方法對 prob1M進行歸一化:
prob1M = prob1M / (sum(prob1M) * binWidth1);
**問題:**如果您從標準化的 2D 直方圖中獲得邊緣,是否仍然需要標準化?為什麼/為什麼不?
歸一化後, prob1和prob1M的**面積等於 1,其中面積計算為:
area = sum(binWidth1.*prob1) %same for prob1M
但是,prob1和prob1M(以及prob2和prob2M)仍然略有不同:
prob1 = 0.9412 0.4412 0.3235 0.3235 0.2941 0.3235 0.3235 0.4118 0.4706 1.1471 prob1M = 0.9706 0.4706 0.3824 0.3235 0.3235 0.3235 0.3530 0.3824 0.4412 1.0295
謝謝你的建議。
密度可能很難處理。只要有可能,就用總概率來計算。
通常,直方圖以點數據開頭,例如這 10,000 個點:
一個通用的 2D 直方圖通過一個集合來細分兩個變量的域(這裡是單位平方)不重疊的多邊形(通常是矩形或三角形)。對每個多邊形它指定密度(每單位面積的概率或相對頻率)。這計算為
這部分估計概率; 當它除以面積時,你得到密度。
在此 2D 直方圖中,單位正方形已由寬度為矩形的矩形細分和身高.
二維直方圖通過體積表示概率(或相對頻率) :對於每個多邊形,高度和底的乘積,或密度 * 面積,返回. 作為檢查,總概率是通過對所有多邊形的體積求和獲得的:
這等於團結,因為它應該。(在上圖中,直方圖高度範圍為幾乎達到; 總體積是.)
要獲得邊際密度(例如,沿 x 軸),您可以將該軸在切割點處分割成箱. (允許這些長度不等。)每個 bin確定二維區域的垂直切片(由所有點組成為此)。讓我們稱之為條帶. 與任何 (1D) 直方圖一樣,計算(或估計)每個 bin 內的總概率並除以 bin 寬度以獲得直方圖值。總概率通常估計為與該條相交的多邊形中的概率之和:
將此值除以給出邊際分佈直方圖的值. 對每個垃圾箱重複此操作。
x 邊緣直方圖為藍色,y 邊緣直方圖為紅色。每一個的總面積為.