在一般的分類問題中,通常的套路都是提取特徵,將特徵輸入分類器訓練,得到最終的模型。但是在具體操作時,一開始提出的特徵和輸入分類器訓練的特徵是不一樣的。比如假設有N張 100×100 100×100的映像,分別提取它們的HoG特徵 x∈Rp×q x∈Rp×q, p p為特徵的維數, q q為這幅映像中HoG特徵的個數。
如果把直接把這樣的一萬個 x x直接投入分類器訓練,效果不一定好,因為不一定每個像素點的資訊都是有價值的,裡面可能有很多是冗餘的資訊。而且特徵維度太高會導致最終的訓練時間過長。
所以通常會對raw features做一些預先處理。最常用的就是詞袋模型(bag of words)。
上圖中k-means+featuresc encoding這一步就是典型的詞袋模型。K-means是最常用的聚類方法之一,我們的例子中,有N幅映像,每幅映像有 x∈Rp×q x∈Rp×q的特徵,那麼所有資料的特徵矩陣為 X∈Rp×Nq X∈Rp×Nq。也就是說現在一共存在 Nq Nq個資料點,它們分布在一個 p p維的空間中,通過聚類後可以找到 M M個聚類中心。然後對於每一幅映像而言,分別計算它的 q q個 p p維特徵屬於哪一個聚類中心(距離最近),最終統計 M M個聚類中心分別擁有多少特徵,得到一個 M M維的向量。這個向量就是最終的特徵。
k-means的缺點在於,它是一個hard聚類的方法,比如有一個點任何一個聚類中心都不屬於,但是詞袋模型仍然可能會把它強行劃分到一個聚類中心去。對於一個點,它屬不屬於某個聚類中心的可能性是個屬於 (0,1) (0,1)的整數值。
相反,高斯混合模型(Gaussian Mixture Model) 就是一種soft聚類的方法,它建立在一個重要的假設上,即任意形狀的機率分布都可以用多個高斯分布函數去近似。顧名思義,高斯混合模型是由很多個高斯分布組成的模型,每一個高斯分布都是一個component。每一個component Nk∼(μk,σk),k=1,2,…K Nk∼(μk,σk),k=1,2,…K對應的是一個聚類中心,這個聚類中心的座標可以看作 (μk,σk) (μk,σk),對於一個點 xi xi它屬於第 k k個聚類中心的可能性 pik pki是一個屬於 0,1 0,1的機率值,也就是說在高斯混合模型中,一個點可以看作是由多個component聯合產生的, pik pki也是資料 xi xi由第 k k個component產生的機率。
所以當給定N張映像的訓練集合 x1,x2,…,xN x1,x2,…,xN,那麼自然而然的想到可以嘗試利用多個高斯分布函數的線性組合擬合 x x的分布。 那麼假設有 k k個高斯分布,每個分布稱為一個component,則 P(x)=∑k=1Kp(x|k)p(k) P(x)=∑k=1Kp(x|k)p(k)
其中 p(x|k)~N(μk,σk) p(x|k)~N(μk,σk),設 p(k)=πk p(k)=πk表示的是第 k k個高斯分布的被選中的機率,也就是權重。現在的任務就是找到 (μk,σk,πk)k=1,…,K (μk,σk,πk)k=1,…,K,令已知的 x1,x2,…,xN x1,x2,…,xN 分布存在的可能性最大,也就是i似然函數最大。
故有 L(μ,Σ,ϕ|x)=log∏i=1Np(xi;μ,Σ,ϕ)=∑i=1Nlogp(xi;μ,Σ,ϕ)=∑i=1Nlog∑k=1Kp(xi|μk,Σk)p(k;ϕk) L(μ,Σ,ϕ|x)=log∏i=1Np(xi;μ,Σ,ϕ)=∑i=1Nlogp(xi;μ,Σ,ϕ)=∑i=1Nlog∑k=1Kp(xi|μk,Σk)p(k;ϕk)
對上式分別對於 μ,Σ,ϕ μ,Σ,ϕ求偏導共置於0,就可以求出最優的參數。但是上式中又有加和,我們沒法直接用求導解方程的辦法直接求得最大值。
所以一般解高斯混合模型都用的是EM演算法。
EM演算法分為兩步:
在E-step中,估計資料由每個component產生的機率。
假設 μ,Σ,ϕ μ,Σ,ϕ已知,對於每個資料 xi xi 來說,它由第 k k個component 產生的機率為 pik=πkN(xi|μk,σk)∑Kk=1πkN(xi|μk,σk) pki=πkN(xi|μk,σk)∑k=1KπkN(xi|μk,σk)
在M-step中,估計每個component的參數 μk,Σk,πkk=1,…K μk,Σk,πkk=1,…K。
利用上一步得到的 pik pki,它是對於每個資料 xi xi 來說,它由第 k k個component產生的機率,也可以當做第 k k個component在產生這個資料上所做的貢獻,或者說,我們可以看作 xi這個值其中有pikxi xi這個值其中有pkixi 這部分是由 第 k k個component所產生的。現在考慮所有的資料,可以看做第 k k個component產生了 p1kx1,…,pNkxN pk1x1,…,pkNxN 這些點。由於每個component 都是一個標準的 Gaussian 分布,可以很容易的根據期望、方差的定義求出它們: μk=1N∑i=1Npikxi μk=1N∑i=1Npkixi σk=1N∑i=1Npik(xi−μk)(xi−μk)T σk=1N∑i=1Npki(xi−μk)(xi−μk)T πk=1N∑i=1Npik πk=1N∑i=1Npki
重複迭代前面兩步,直到似然函數的值收斂為止。
from: http://bucktoothsir.github.io/blog/2014/12/04/11-thblog/