[english][all] 如果我們假設在給定的資料集中,每一維的資料都是獨立的,在此假設下,每一類資料的PDF可以簡化成此類資料在每一維的PDF的乘積。換句話說,我們可以先算出每一類資料在每一個維度所對應的PDF,然後將同一類資料的數個PDF進行連乘,就可以得到這一類資料的PDF。我們的假設可以使用數學式子來表示如下:
p(X|C) = P(X1|C)P(X2|C) ... P(Xd|C) 其中 X = [X1, X2, ..., Xd] 是一個特徵向量,而 C 代表一個特定類別。這個假設看來似乎過強,一般實際世界的資料似乎無法滿足此假設,但由此假設所產生的單純貝氏分類器(naive Bayes classifier,簡稱 NBC)卻是相當有實用性,其辨識效能常常不輸給其它更複雜的辨識器。
在實做上,我們通常假設一維資料所對應的PDF是高斯機率密度函式,在此情況下,對應的NBC步驟可以說明如下:
- 假設每一個類別的資料均是由 d 維的高斯機率密度函數(Gaussian probability density function)所產生::
gi(x, m, S) = (2p)-d/2*det(S)-0.5*exp[-(x-m)TS-1(x-m)/2] 其中 m 是此高斯機率密度函數的平均向量(Mean vector),S 則是其共變異矩陣(Covariance matrix),我們可以根據 MLE,產生最佳的平均向量 m 和共變異矩陣 S。- 若有需要,可以對每一個高斯機率密度函數乘上一個權重 wi。
- 在實際進行分類時,wi*gi(x, m, S) 越大,則資料 x 隸屬於類別 i 的可能性就越高。
在實際進行運算時,我們通常不去計算 wi*gi(x, m, S) ,而是計算 log(wi*gi(x, m, S)) = log(wi) + log(gi(x, m, S)),以便避開計算指數時可能發生的種種問題(如精確度不足、計算耗時),log(gi(x, m, S)) 的公式如下:
log[p(ci)g(x, mi, Si)] = log(p(ci)) - (d*log(2p) + log|Si|)/2 - (x-mi)TSi-1(x-mi)/2 The decision boundary between class i and j is represented by the following trajectory:p(ci)g(x, mi, Si) = p(cj)g(x, mj, Sj). Taking the logrithm of both sides, we havelog(p(ci)) - (d*log(2p) + log|Si|)/2 - (x-mi)TSi-1(x-mi)/2 = log(p(cj)) - (d*log(2p) + log|S|j)/2 - (x-mj)TSj-1(x-mj)/2 After simplification, we have the decision boundary as the following equation:(x-mj)TSj-1(x-mj) - (x-mi)TSi-1(x-mi) = log{[|S|i p2(ci)]/[|S|j p2(cj)]} where the right-hand side is a constant. Since both (x-mj)TSj-1(x-mj) and (x-mi)TSi-1(x-mi) are quadratic, the above equation represents a decision boundary of the quadratic form in the d-dimensional feature space.例如,如果使用 NBC 來對 IRIS 資料的第三維及第四維進行分類,可使用下列範例程式:
上圖秀出資料點,以及分類錯誤的點(叉叉)。特別需要注意的是,在上述的程式碼中,我們用到 classWeight,這是一個向量,用來指定每一個類別的權重,通常有兩種做法:
- 如果要滿足貝氏分類的原理(請見後續章節),此權重可以設定是每一個類別的資料個數。(計算每個類別的資料個數,可由 dsClassSize.m 來達成。)
- 如果每個類別的資料出線的機率相差不大,我們可將每一個類別的權重都設定成 1。
我們可以畫出每個類別及每個維度的一維PDF函數,以及其對應的資料,請見下列範例:
我們也可以將每個類別的PDF函數以三維曲面呈現,並畫出其等高線,請見下列範例:
根據這些高斯密度函數,我們就可以畫出每個類別的邊界,如下:
Data Clustering and Pattern Recognition (資料分群與樣式辨認)![]()