導航:首頁 > 源碼編譯 > 高斯混合模型聚類演算法代碼

高斯混合模型聚類演算法代碼

發布時間:2022-11-27 18:16:29

1. 怎樣算高斯煙團模型的演算法,編程的代碼

% gauss.m
function x = gauss(A,B)
%The sizes of matrices A,B are supposed to be NA x NA and NA x NB.
%This function solves Ax = B by Gauss elimination algorithm.
NA = size(A,2); [NB1,NB] = size(B);
if NB1 ~= NA, error('A and B must have compatible dimensions'); end
N = NA + NB; AB = [A(1:NA,1:NA) B(1:NA,1:NB)]; % Augmented matrix
epss = eps*ones(NA,1);
for k = 1:NA
%Scaled Partial Pivoting at AB(k,k) by Eq.(2.2.20)
[akx,kx] = max(abs(AB(k:NA,k))./max(abs([AB(k:NA,k + 1:NA) epss(1:NA - k + 1)]'))');
if akx < eps, error('Singular matrix and No unique solution'); end
mx = k + kx - 1;
if kx > 1 % Row change if necessary
tmp_row = AB(k,k:N);
AB(k,k:N) = AB(mx,k:N);
AB(mx,k:N) = tmp_row;
end
% Gauss forward elimination
AB(k,k + 1:N) = AB(k,k+1:N)/AB(k,k);
AB(k,k) = 1; %make each diagonal element one
for m = k + 1: NA
AB(m,k+1:N) = AB(m,k+1:N) - AB(m,k)*AB(k,k+1:N); %Eq.(2.2.5)
AB(m,k) = 0;
end
end
%backward substitution for a upper-triangular matrix eqation
% having all the diagonal elements equal to one
x(NA,:) = AB(NA,NA+1:N);
for m = NA-1: -1:1
x(m,:) = AB(m,NA + 1:N)-AB(m,m + 1:NA)*x(m + 1:NA,:); %Eq.(2.2.7)
end

例:
>> A = [0 1 1;2 -1 -1;1 1 -1]; b = [2 0 1]';
>> x = gauss(A,b)
x =
1.00000000000000
1.00000000000000
1.00000000000000

2. 高斯混合模型(GMM)及EM演算法的初步理解

高斯混合模型(Gaussian Mixed Model)指的是多個高斯分布函數的線性組合,理論上GMM可以擬合出任意類型的分布,通常用於解決同一集合下的數據包含多個不同的分布的情況(或者是同一類分布但參數不一樣,或者是不同類型的分布,比如正態分布和伯努利分布)。

如圖1,圖中的點在我們看來明顯分成兩個聚類。這兩個聚類中的點分別通過兩個不同的正態分布隨機生成而來。但是如果沒有GMM,那麼只能用一個的二維高斯分布來描述圖1中的數據。圖1中的橢圓即為二倍標准差的正態分布橢圓。這顯然不太合理,畢竟肉眼一看就覺得應該把它們分成兩類。

這時候就可以使用GMM了!如圖2,數據在平面上的空間分布和圖1一樣,這時使用兩個二維高斯分布來描述圖2中的數據,分別記為N(μ1,Σ1)和N(μ2,Σ2) 。圖中的兩個橢圓分別是這兩個高斯分布的二倍標准差橢圓。可以看到使用兩個二維高斯分布來描述圖中的數據顯然更合理。實際上圖中的兩個聚類的中的點是通過兩個不同的正態分布隨機生成而來。如果將兩個二維高斯分布N(μ1,Σ1)和N(μ2,Σ2) 合成一個二維的分布,那麼就可以用合成後的分布來描述圖2中的所有點。最直觀的方法就是對這兩個二維高斯分布做線性組合,用線性組合後的分布來描述整個集合中的數據。這就是高斯混合模型(GMM)。

高斯混合模型(GMM)的數學表示:

期望極大(Expectation Maximization)演算法,也稱EM演算法,是一種迭代演算法,由Dempster et. al 在1977年提出,用於含有隱變數的概率參數模型的極大似然估計。

EM演算法作為一種數據添加演算法,在近幾十年得到迅速的發展,主要源於當前科學研究以及各方面實際應用中數據量越來越大的情況下,經常存在數據缺失或者不可用的的問題,這時候直接處理數據比較困難,而數據添加辦法有很多種,常用的有神經網路擬合、添補法、卡爾曼濾波法等,但是EM演算法之所以能迅速普及主要源於它演算法簡單,穩定上升的步驟能相對可靠地找到「最優的收斂值」。

(個人的理解就是用含有隱變數的含參表達式不斷擬合,最終能收斂並擬合出不含隱變數的含參表達式)

模型的EM訓練過程,直觀的來講是這樣:我們通過觀察采樣的概率值和模型概率值的接近程度,來判斷一個模型是否擬合良好。然後我們通過調整模型以讓新模型更適配采樣的概率值。反復迭代這個過程很多次,直到兩個概率值非常接近時,我們停止更新並完成模型訓練。現在我們要將這個過程用演算法來實現,所使用的方法是模型生成的數據來決定似然值,即通過模型來計算數據的期望值。通過更新參數μ和σ來讓期望值最大化。這個過程可以不斷迭代直到兩次迭代中生成的參數變化非常小為止。該過程和k-means的演算法訓練過程很相似(k-means不斷更新類中心來讓結果最大化),只不過在這里的高斯模型中,我們需要同時更新兩個參數:分布的均值和標准差.[3]

GMM常用於聚類。如果要從 GMM 的分布中隨機地取一個點的話,實際上可以分為兩步:首先隨機地在這 K 個 Component 之中選一個,每個 Component 被選中的概率實際上就是它的系數Πk ,選中 Component 之後,再單獨地考慮從這個 Component 的分布中選取一個點就可以了──這里已經回到了普通的 Gaussian 分布,轉化為已知的問題。

根據數據來推算概率密度通常被稱作 density estimation 。特別地,當我已知(或假定)概率密度函數的形式,而要估計其中的參數的過程被稱作『參數估計』。

(推導和迭代收斂過程這里省略,可參考資料1)

一個實際的例子:用GMM對iris數據集進行聚類,並通過make_ellipses表示出來

make_ellipses方法概念上很簡單,它將gmm對象(訓練模型)、坐標軸、以及x和y坐標索引作為參數,運行後基於指定的坐標軸繪制出相應的橢圓圖形。

在特定條件下,k-means和GMM方法可以互相用對方的思想來表達。在k-means中根據距離每個點最接近的類中心來標記該點的類別,這里存在的假設是每個類簇的尺度接近且特徵的分布不存在不均勻性。 這也解釋了為什麼在使用k-means前對數據進行歸一會有效果。高斯混合模型則不會受到這個約束 ,因為它對每個類簇分別考察特徵的協方差模型。

K-means演算法可以被視為高斯混合模型(GMM)的一種特殊形式。 整體上看,高斯混合模型能提供更強的描述能力,因為聚類時數據點的從屬關系不僅與近鄰相關,還會依賴於類簇的形狀。n維高斯分布的形狀由每個類簇的協方差來決定。在協方差矩陣上添加特定的約束條件後,可能會通過GMM和k-means得到相同的結果。

在k-means方法中使用EM來訓練高斯混合模型時對初始值的設置非常敏感。而對比k-means,GMM方法有更多的初始條件要設置。實踐中不僅初始類中心要指定,而且協方差矩陣和混合權重也要設置。可以運行k-means來生成類中心,並以此作為高斯混合模型的初始條件。由此可見並兩個演算法有相似的處理過程,主要區別在於模型的復雜度不同。

高斯混合模型的基本假設是 已知類別的比例 和 類別的個數 ,但是不知道每個樣例的具體標簽,據此用EM的模式為每個樣本進行最優的標注。也就是說它適合的是 無標簽學習的分類問題 ,並且需要已知基本假設。

整體來看,所有無監督機器學習演算法都遵循一條簡單的模式:給定一系列數據,訓練出一個能描述這些數據規律的模型(並期望潛在過程能生成數據)。 訓練過程通常要反復迭代,直到無法再優化參數獲得更貼合數據的模型為止。

【1】https://blog.csdn.net/jinping_shi/article/details/59613054  高斯混合模型(GMM)及其EM演算法的理解

【2】https://cloud.tencent.com/developer/news/231599    機器學習中的數學(4)-EM演算法與高斯混合模型(GMM)

【3】https://zhuanlan.hu.com/p/31103654    一文詳解高斯混合模型原理

3. 如何用高斯混合模型 GMM 做聚類

當我們在做聚類任務時,
如果每一類的分布已知的話,那麼要求出每個樣本屬於哪一類,
只需要計算出它歸屬於 k 個不同簇的概率,然後選擇概率值最高的那個簇作為它最終的歸屬即可。

但很多時候,樣本分布的參數乃至概率密度函數的形式都是未知的
這時,我們通過設定一個目標,在優化目標的時候求出這些未知的參數。

在聚類這個問題中,我們希望達到的目標是:
第 i 個樣本 x(i) 之所以被歸屬到了第 k 個簇,是因為 它在這一類的概率是所有類中概率最大的。

所以目標為最大化樣本集的集體概率:

這其實是一個似然函數,要優化它,可以用極大化對數似然函數的方法,所以取對數。
這裡面的每個 ϕ 都是一個獨立的概率密度函數形式,而 θ 是對應的參數集合,
這時 K 個分模型的概率分布都不相同——每個概率密度函數的形式不同,對應參數集合不同,參數本身又都是未知的,如果直接求解就會非常困難,

所以,這時我們可以把所有的 ϕ 都當作高斯分布即可。也就是說這些樣本分屬的模型對應的概率密度函數形式相同,參數類型也相同,只是參數的具體取值有所差別:

高斯分布(Gaussian Distribution),又名正態分布(Normal distribtion),它的密度函數如上圖公式所示。

現實生活中的許多自然現象都被發現近似地符合高斯分布,比如人類的壽命、身高、體重等,在金融、科研、工業等各個領域都有大量現實業務產生的數據被證明是符合高斯分布的。

這時就用到了 高斯混合模型(GMM),
就是將若干個概率分布為高斯分布的分模型混合在一起的模型。

之所以可以把所有的 ϕ 都當作高斯分布,
是高斯分布有一個非常重要的性質:中心極限定理

中心極限定理:
在適當的條件下,大量相互獨立的隨機變數的均值經適當標准化後,依分布收斂於高斯分布,
即無論 xi 的自身分布是什麼,隨著 n 變大,這些樣本平均值經過標准化處理—後的分布,都會逐步接近高斯分布。

有了這個定理,當我們遇到一個問題的時候,如果對某一變數做定量分析時其確定的分布情況未知,只要掌握了大量的觀測樣本,都可以按照服從高斯分布來處理這些樣本。
例如我們要做一個聚類任務,無論原本每一簇自身的分布如何,我們都可以用高斯模型來近似表示它們。這個混合模型,就可以是一個高斯混合模型(GMM)

GMM 的學習目標為:

x(i) 是已經觀測到的樣本觀測數據,是已知的,zik 是未知的。
因為有沒被觀測到的隱變數存在,這樣的對數似然函數需要用 EM 演算法來優化。

用 EM 演算法學習 GMM 的參數分為4步:

各參數取初始值開始迭代;
E 步;
M 步;
重復 E 步和 M 步,直到收斂

E 步的任務是求 Q
M 步的任務是求 arg max Q

在 E 步,求出了 zik,代入 Q,得到 Q 只和參數 α,μ,σ 有關,
在 M 步,通過分別對各個自變數求偏導,再令導數為0,來求取 α,μ,σ 的極值點,
然後再帶回到函數中去求整體 arg max Q 的值。

4. 高斯混合模型(GMM)和EM演算法

學號:20021110074     電院    姓名:梁雪玲

【嵌牛導讀】:GMM與EM演算法的學習與推導。

【嵌牛鼻子】:GMM    EM  

【嵌牛提問】:GMM是什麼?EM演算法是什麼?二者之間的關系?演算法的推導?如何深入學習?

【嵌牛正文】:

在深度學習的路上,從頭開始了解一下各項技術。本人是DL小白,連續記錄我自己看的一些東西,大家可以互相交流。

本文參考:

http://www.ituring.com.cn/article/497545(GMM)

https://blog.csdn.net/xmu_jupiter/article/details/50889023(GMM)

http://www.cnblogs.com/wjy-lulu/p/7010258.html(EM演算法)

https://blog.csdn.net/zouxy09/article/details/8537620(EM演算法)

一、前言

    高斯混合模型(Gaussian Mixture Model)簡稱GMM,是一種業界廣泛使用的聚類演算法。它是多個高斯分布函數的線性組合,理論上GMM可以擬合出任意類型的分布,通常用於解決同一集合下的數據包含多種不同的分布的情況。高斯混合模型使用了期望最大(Expectation Maximization, 簡稱EM)演算法進行訓練,故此我們在了解GMM之後,也需要了解如何通過EM演算法訓練(求解)GMM。

二、高斯混合模型(GMM)

    在了解高斯混合模型之前,我們先了解一下這種模型的具體參數模型-高斯分布。高斯分布又稱正態分布,是一種在自然界中大量存在的,最為常見的分布形式。

    如上圖,這是一個關於身高的生態分布曲線,關於175-180對稱,中間高兩邊低,相信大家在高中已經很了解了,這里就不再闡述。

    現在,我們引用《統計學習方法》-李航 書中的定義,如下圖:

    根據定義,我們可以理解為,GMM是多個高斯分布的加權和,並且權重α之和等於1。這里不難理解,因為GMM最終反映出的是一個概率,而整個模型的概率之和為1,所以權重之和即為1。高斯混合模型實則不難理解,接下來我們介紹GMM的訓練(求解)方法。

PS.從數學角度看,對於一個概率模型的求解,即為求其最大值。從深度學習角度看,我們希望降低這個概率模型的損失函數,也就是希望訓練模型,獲得最大值。訓練和求解是不同專業,但相同目標的術語。

三、最大似然估計

     想要了解EM演算法,我們首先需要了解最大似然估計這個概念。我們通過一個簡單的例子來解釋一下。

    假設,我們需要調查學校男女生的身高分布。我們用抽樣的思想,在校園里隨機抽取了100男生和100女生,共計200個人(身高樣本數據)。我們假設整個學校的身高分布服從於高斯分布。但是這個高斯分布的均值u和方差∂2我們不知道,這兩個參數就是我們需要估計的值。記作θ=[u, ∂]T。

    由於每個樣本都是獨立地從p(x|θ)中抽取的,並且所有的樣本都服從於同一個高斯分布p(x|θ)。那麼我們從整個學校中,那麼我抽到男生A(的身高)的概率是p(xA|θ),抽到男生B的概率是p(xB|θ)。而恰好抽取出這100個男生的概率,就是每個男生的概率乘積。用下式表示:

    這個概率反映了,在概率密度函數的參數是θ時,得到X這組樣本的概率。在公式中,x已知,而θ是未知,所以它是θ的函數。這個函數放映的是在不同的參數θ取值下,取得當前這個樣本集的可能性,因此稱為參數θ相對於樣本集X的似然函數(likehood function)。記為L(θ)。

    我們先穿插一個小例子,來闡述似然的概念。

某位同學與一位獵人一起外出打獵,一隻野兔從前方竄過。只聽一聲槍響,野兔應聲到下,如果要你推測,這一發命中的子彈是誰打的?你就會想,只發一槍便打中,由於獵人命中的概率一般大於這位同學命中的概率,看來這一槍是獵人射中的。

      這個例子所作的推斷就體現了極大似然法的基本思想,我們並不知道具體是誰打的兔子,但是我們可以估計到一個看似正確的參數。回到男生身高的例子中。在整個學校中我們一次抽到這100個男生(樣本),而不是其他的人,那麼我們可以認為這100個男生(樣本)出現的概率最大,用上面的似然函數L(θ)來表示。

    所以,我們就只需要找到一個參數θ,其對應的似然函數L(θ)最大,也就是說抽到這100個男生(的身高)概率最大。這個叫做θ的最大似然估計量,記為:

因為L(θ)是一個連乘函數,我們為了便於分析,可以定義對數似然函數,運用對數的運算規則,把連乘轉變為連加:

PS.這種數學方法在MFCC中我們曾經用過,可以回溯一下上一篇文章。

    此時,我們要求θ,只需要使θ的似然函數L(θ)極大化,然後極大值對應的θ就是我們的估計。在數學中求一個函數的最值問題,即為求導,使導數為0,解方程式即可(前提是函數L(θ)連續可微)。在深度學習中,θ是包含多個參數的向量,運用高等數學中的求偏導,固定其中一個變數的思想,即可求出極致點,解方程。

總結而言:

    最大似然估計,只是一種概率論在統計學的應用,它是參數估計的方法之一。說的是已知某個隨機樣本滿足某種概率分布,但是其中具體的參數不清楚,參數估計就是通過若干次試驗,觀察其結果,利用結果推出參數的大概值。最大似然估計是建立在這樣的思想上:已知某個參數能使這個樣本出現的概率最大,我們當然不會再去選擇其他小概率的樣本,所以乾脆就把這個參數作為估計的真實值。

    求最大似然函數估計值的一般步驟:

(1)寫出似然函數;

(2)對似然函數取對數,並整理;(化乘為加)

(3)求導數,令導數為0,得到似然方程;

(4)解似然方程,得到的參數即為所求。

四、EM演算法

    期望最大(Expectation Maximization, 簡稱EM)演算法,稱為機器學習十大演算法之一。它是一種從不完全數據或有數據丟失的數據集(存在隱含變數)中求解概率模型參數的最大似然估計方法。

    現在,我們重新回到男女生身高分布的例子。我們通過抽取100個男生身高,並假設身高分布服從於高斯分布,我們通過最大化其似然函數,可以求的高斯分布的參數θ=[u, ∂]T了,對女生同理。但是,假如這200人,我們只能統計到其身高數據,但是沒有男女信息(其實就是面對200個樣本,抽取得到的每個樣本都不知道是從哪個分布抽取的,這對於深度學習的樣本分類很常見)。這個時候,我們需要對樣本進行兩個東西的猜測或者估計了。

      EM演算法就可以解決這個問題。假設我們想估計知道A和B兩個參數,在開始狀態下二者都是未知的,但如果知道了A的信息就可以得到B的信息,反過來知道了B也就得到了A。可以考慮首先賦予A某種初值,以此得到B的估計值,然後從B的當前值出發,重新估計A的取值,這個過程一直持續到收斂為止。

    在男女生身高分布的例子中,我們運用EM演算法的思想。首先隨便猜一下男生的高斯分布參數:均值和方差。假設均值是1.7米,方差是0.1米,然後計算出每個人更可能屬於第一個還是第二個正態分布中。這是第一步,Expectation。在分開了兩類之後,我們可以通過之前用的最大似然,通過這兩部分,重新估算第一個和第二個分布的高斯分布參數:均值和方差。這是第二步,Maximization。然後更新這兩個分布的參數。這是可以根據更新的分布,重新調整E(Expectation)步驟...如此往復,迭代到參數基本不再發生變化。

    這里原作者提到了一個數學思維,很受啟發,轉給大家看一眼(比較雞湯和啰嗦,大家可以跳過)

這時候你就不服了,說你老迭代迭代的,你咋知道新的參數的估計就比原來的好啊?為什麼這種方法行得通呢?有沒有失效的時候呢?什麼時候失效呢?用到這個方法需要注意什麼問題呢?呵呵,一下子拋出那麼多問題,搞得我適應不過來了,不過這證明了你有很好的搞研究的潛質啊。呵呵,其實這些問題就是數學家需要解決的問題。在數學上是可以穩當的證明的或者得出結論的。那咱們用數學來把上面的問題重新描述下。(在這里可以知道,不管多麼復雜或者簡單的物理世界的思想,都需要通過數學工具進行建模抽象才得以使用並發揮其強大的作用,而且,這裡面蘊含的數學往往能帶給你更多想像不到的東西,這就是數學的精妙所在啊)

五、EM演算法的簡單理解方式

    在提出EM演算法的推導過程之前,先提出中形象的理解方式,便於大家理解整個EM演算法,如果只是實現深度學習模型,個人認為可以不需要去看後面的演算法推導,看這個就足夠了。

    坐標上升法(Coordinate ascent):

    圖中的直線式迭代優化的途徑,可以看到每一步都會向最優值靠近,而每一步前進的路線都平行於坐標軸。那麼我們可以將其理解為兩個未知數的方程求解。倆個未知數求解的方式,其實是固定其中一個未知數,求另一個未知數的偏導數,之後再反過來固定後者,求前者的偏導數。EM演算法的思想,其實也是如此。使用坐標上升法,一次固定一個變數,對另外的求極值,最後逐步逼近極值。對應到EM上,E步:固定θ,優化Q;M步:固定Q,優化θ;交替將極值推向最大。 

六、EM演算法推導

    現在很多深度學習框架可以簡單調用EM演算法,實際上這一段大家可以不用看,直接跳過看最後的總結即可。但是如果你希望了解一些內部的邏輯,可以看一下這一段推導過程。

    假設我們有一個樣本集{x(1),…,x(m)},包含m個獨立的樣本(右上角為樣本序號)。但每個樣本i對應的類別z(i)是未知的(相當於聚類),也即隱含變數。故我們需要估計概率模型p(x,z)的參數θ(在文中可理解為高斯分布),但是由於裡麵包含隱含變數z,所以很難用最大似然求解,但如果z知道了,那我們就很容易求解了。

首先放出似然函數公式,我們接下來對公式進行化簡:

    對於參數估計,我們本質上的思路是想獲得一個使似然函數最大化的參數θ,現在多出一個未知變數z,公式(1)。那麼我們的目標就轉變為:找到適合的θ和z讓L(θ)最大。

    對於多個未知數的方程分別對未知的θ和z分別求偏導,再設偏導為0,即可解方程。

    因為(1)式是和的對數,當我們在求導的時候,形式會很復雜。

    這里我們需要做一個數學轉化。我們對和的部分,乘以一個相等的函數,得到(2)式,利用Jensen不等式的性質,將(2)式轉化為(3)式。(Jensen不等式數學推到比較復雜,知道結果即可)

Note:

Jensen不等式表述如下:

如果f是凸函數,X是隨機變數,那麼:E[f(X)]>=f(E[X])

特別地,如果f是嚴格凸函數,當且僅當X是常量時,上式取等號。參考鏈接: https://blog.csdn.net/zouxy09/article/details/8537620

    至此,上面的式(2)和式(3)不等式可以寫成:似然函數L(θ)>=J(z,Q),那麼我們可以通過不斷的最大化這個下界J(z,Q)函數,來使得L(θ)不斷提高,最終達到它的最大值。

    現在,我們推導出了在固定參數θ後,使下界拉升的Q(z)的計算公式就是後驗概率,解決了Q(z)如何選擇的問題。這一步就是E步,建立L(θ)的下界。接下來的M步,就是在給定Q(z)後,調整θ,去極大化L(θ)的下界J(在固定Q(z)後,下界還可以調整的更大)。

總結而言

EM演算法是一種從不完全數據或有數據丟失的數據集(存在隱藏變數)中,求解概率模型參數的最大似然估計方法。

EM的演算法流程:

1>初始化分布參數θ;

重復2>, 3>直到收斂:

    2>E步驟(Expectation):根據參數初始值或上一次迭代的模型參數來計算出隱性變數的後驗概率,其實就是隱性變數的期望。作為隱藏變數的現估計值:

    3>M步驟(Maximization):將似然函數最大化以獲得新的參數值:

這個不斷迭代的過程,最終會讓E、M步驟收斂,得到使似然函數L(θ)最大化的參數θ。

在L(θ)的收斂證明:

5. 05 EM演算法 - 高斯混合模型 - GMM

04 EM演算法 - EM演算法收斂證明

GMM (Gaussian Mixture Model, 高斯混合模型)是指該演算法由多個高斯模型線性疊加混合而成。每個高斯模型稱之為component。

GMM演算法 描述的是數據的本身存在的一種分布,即樣本特徵屬性的分布,和預測值Y無關。顯然GMM演算法是無監督的演算法,常用於聚類應用中,component的個數就可以認為是類別的數量。

回到昨天說的例子:隨機選擇1000名用戶,測量用戶的身高;若樣本中存在男性和女性,身高分別服從高斯分布N(μ1,σ1)和N(μ2,σ2)的分布,試估計參數:μ1,σ1,μ2,σ2;

1、如果明確的知道樣本的情況(即男性和女性數據是分開的),那麼我們使用極大似然估計來估計這個參數值。

2、如果樣本是混合而成的,不能明確的區分開,那麼就沒法直接使用極大似然估計來進行參數的估計。

我們可以認為當前的1000條數據組成的集X,是由兩個高斯分布疊加而成的(男性的分布和女性的分布)。

如果能找到一種辦法把每一個高斯分布對應的參數π、 μ、σ求出來,那麼對應的模型就求解出來了。

如果模型求解出來後,如何對數據進行聚類?

這個公式求出來的分別是男性和女性身高分布的概率密度,如果把π、 μ、σ都求出來,以後我們可以構建出一個 能夠根據樣本特徵 計算出樣本屬於男性或女性的可能性。

實際做樣本分類的時候,我們把樣本X的特徵x1~xn分別代入兩個公式中,求出來的兩個結果分別是:樣本X的性別是男、是女的可能性。如果是男的可能性大於是女的可能性,我們就把樣本X歸入男性的分類。

假定 GMM 由k個Gaussian分布線性疊加而成,那麼概率密度函數如下:

分析第1個等式:
p(x): 概率密度函數,k個Gaussian分布線性疊加而成的概率密度函數。
∑p(k)p(x|k): k個某種模型疊加的概率密度函數。
p(k): 每個模型占的權重,即上面提到的π。
p(x|k): 給定類別k後,對應的x的概率密度函數。

分析第2個等式: 目標 - 將公式寫成高斯分布的樣子。
π k : 即p(k)
p(x;μ k ,∑ k ): 多元高斯(正態)分布。有了觀測數據x後,在 給定了條件 下的高斯分布。這個 條件 1、第k個分類的均值μ k ; 2、第k個分類的方差∑ k ;

深入分析p(x;μ k ,∑ k )的參數:
如果樣本有n個特徵,所有的特徵x1~xn一起服從一個多元的高斯分布(正態分布),所有特徵的均值應該是一個向量 (μ 1 ~μ n );
μ k : 第k個分類的情況下(第k個高斯分布的情況下對應的每一列的均值);μ k = (μ k1 ~μ kn )

∑ k : 協方差矩陣(對稱陣)。現在有n個特徵,協方差矩陣是一個n×n的矩陣。現在我們要算的是:

cov(x1,x1),cov(x1,x2),...,cov(x1,xn)

cov(x2,x1),cov(x2,x2),...,cov(x2,xn)
....
cov(xn,x1),cov(x1,x2),...,cov(xn,xn)

其中, 對角線 cov(x1,x1)、cov(x2,x2), ... ,cov(xn,xn)中,x1和x1的協方差 = x1的方差;即cov(x1,x1) = var(x1);所以 對角線上兩個特徵的協方差 = 對應的特徵的方差。

協方差 (Covariance)在 概率論 和 統計學 中用於衡量兩個變數的總體 誤差 。而 方差 是協方差的一種特殊情況,即當兩個變數是相同的情況。

協方差表示的是兩個變數的總體的 誤差 ,這與只表示一個變數誤差的 方差 不同。 如果兩個 變數 的變化趨勢一致,也就是說如果其中一個大於自身的期望值,另外一個也大於自身的期望值,那麼兩個變數之間的協方差就是正值。 如果兩個變數的變化趨勢相反,即其中一個大於自身的期望值,另外一個卻小於自身的期望值,那麼兩個變數之間的協方差就是負值。

理解了公式後,再來看看公式在圖像上是如何體現的:

如果樣本X只有一個特徵x1,在二維的坐標繫上的表示出來。特徵x1是由n個單變數樣本的高斯分布疊加而成的。向量x1 k = ∑ k (x1 (1) ,x1 (2) ,~,x1 (n) ),如k=(男、女),累加男性分類下的特徵高斯分布和女性分類下的高斯分布;

圖中 紅色曲線 表示原有數據的分布情況,我認為這個原有數據是由多個比較的高斯分布疊加而成的, 藍色曲線 表示單個單個高斯分布的分布情況。向量x1 = (x1 (1) ,x1 (2) ,~,x1 (n) );

PS: 藍1+藍2=紅 體現的就是公式 p(x) = ∑πp(x;μ,∑k);

在得知數據的特徵 x=(x1~xn) 後,如果我們想把數據合理得聚類到一個分類中,我們該如何去計算呢?

既然我已經得到了k個高斯分布對應的概率密度函數(現在設k=3,共3個分類),將當前特徵的x=(x1~xn)代入我們的概率密度函數: p(x) = ∑πp(x;μ,∑k);

我們分別計算p(藍1)、p(藍2)、p(藍3),藍色三條線各對應k分類中的一個,哪個數大,我認為當前的樣本該分到哪一類。

GMM演算法的兩個前提:
1、數據服從高斯分布;
2、我們人為定義了分類個數k。

問:我們人為假定了高斯分布的分類個數k,就類似於我們聚簇時分的聚簇中心個數一樣。參數π、μ、σ該如何求出來?

答:和K-Means演算法一樣,我們可以用 EM演算法 來求解這個問題。 GMM也滿足EM演算法的聚類思想,首先人為得定義了聚類的個數k,從數據特徵X中發掘潛在關系的一種模型。而且我還默認數據是服從多個高斯分布的。

GMM演算法中的隱含條件是:第k個模型占的權重 - 、 第k個高斯分布的情況下對應的每一列的均值 - 、協方差矩陣 cov(xi,xj) - ;因為本質上我們是知道數據原有的分類狀況的,只是無法觀測到隱含在數據中的這些特性,使用EM的思想可以迭代得求解出這些隱含變數。

對聯合概率密度函數求對數似然函數:

對聯合概率密度函數求對數後,原本 連乘 的最大似然估計變成了 連加 的函數狀態。

EM演算法求解 - E步:

套用公式後,我們可以假定隱含變數z的分布:Q(z (i) = j);
我們認為分布wj (i) = 第i個觀測值對應的隱含分類第z (i) 類; = 以(看不見的參數π、μ、∑)為參數的情況下,輸入第i觀測值的特徵x後得到的分類z (i) 類;

EM演算法求解 - M步:
M步第1行就是上一章通過化簡找到 下界 的那個函數:

1、對均值求偏導:

2、對方差求偏導:

3、對概率使用拉格朗日乘子法求解:

06 EM演算法 - 案例一 - EM分類初識及GMM演算法實現

6. [譯] 高斯混合模型 --- python教程

本文翻譯自 https://jakevdp.github.io/PythonDataScienceHandbook/05.12-gaussian-mixtures.html

上一節中探討的k-means聚類模型簡單易懂,但其簡單性導致其應用中存在實際挑戰。具體而言,k-means的非概率特性及簡單地計算點與類蔟中心的歐式距離來判定歸屬,會導致其在許多真實的場景中性能較差。本節,我們將探討高斯混合模型(GMMs),其可以看成k-means的延伸,更可以看成一個強有力的估計工具,而不僅僅是聚類。

我們將以一個標準的import開始

我們看下k-means的缺陷,思考下如何提高聚類模型。正如上一節所示,給定簡單,易於分類的數據,k-means能找到合適的聚類結果。
舉例而言,假設我們有些簡單的數據點,k-means演算法能以某種方式很快地將它們聚類,跟我們肉眼分辨的結果很接近:

從直觀的角度來看,我可能期望聚類分配時,某些點比其他的更確定:舉例而言,中間兩個聚類之間似乎存在非常輕微的重疊,這樣我們可能對這些數據點的分配沒有完全的信心。不幸的是,k-means模型沒有聚類分配的概率或不確定性的內在度量(盡管可能使用bootstrap 的方式來估計這種不確定性)。為此,我們必須考慮泛化這種模型。
k-means模型的一種理解思路是,它在每個類蔟的中心放置了一個圈(或者,更高維度超球面),其半徑由聚類中最遠的點確定。該半徑充當訓練集中聚類分配的一個硬截斷:任何圈外的數據點不被視為該類的成員。我們可以使用以下函數可視化這個聚類模型:

觀察k-means的一個重要發現,這些聚類模式必須是圓形的。k-means沒有內置的方法來計算橢圓形或橢圓形的簇。因此,舉例而言,假設我們將相同的數據點作變換,這種聚類分配方式最終變得混亂:

高斯混合模型(GMM)試圖找到一個多維高斯概率分布的混合,以模擬任何輸入數據集。在最簡單的情況下,GMM可用於以與k-means相同的方式聚類。

但因為GMM包含概率模型,因此可以找到聚類分配的概率方式 - 在Scikit-Learn中,通過調用predict_proba方法實現。它將返回一個大小為[n_samples, n_clusters]的矩陣,用於衡量每個點屬於給定類別的概率:

我們可以可視化這種不確定性,比如每個點的大小與預測的確定性成比例;如下圖,我們可以看到正是群集之間邊界處的點反映了群集分配的不確定性:

本質上說,高斯混合模型與k-means非常相似:它使用期望-最大化的方式,定性地執行以下操作:

有了這個,我們可以看看四成分的GMM為我們的初始數據提供了什麼:

同樣,我們可以使用GMM方法來擬合我們的拉伸數據集;允許full的協方差,該模型甚至可以適應非常橢圓形,伸展的聚類模式:

這清楚地表明GMM解決了以前遇到的k-means的兩個主要實際問題。

如果看了之前擬合的細節,你將看到covariance_type選項在每個中都設置不同。該超參數控制每個類簇的形狀的自由度;對於任意給定的問題,必須仔細設置。默認值為covariance_type =「diag」,這意味著可以獨立設置沿每個維度的類蔟大小,並將得到的橢圓約束為與軸對齊。一個稍微簡單和快速的模型是covariance_type =「spherical」,它約束了類簇的形狀,使得所有維度都相等。盡管它並不完全等效,其產生的聚類將具有與k均值相似的特徵。更復雜且計算量更大的模型(特別是隨著維數的增長)是使用covariance_type =「full」,這允許將每個簇建模為具有任意方向的橢圓。
對於一個類蔟,下圖我們可以看到這三個選項的可視化表示:

盡管GMM通常被歸類為聚類演算法,但從根本上說它是一種密度估算演算法。也就是說,GMM適合某些數據的結果在技術上不是聚類模型,而是描述數據分布的生成概率模型。
例如,考慮一下Scikit-Learn的make_moons函數生成的一些數據:

如果我們嘗試用視為聚類模型的雙成分的GMM模擬數據,則結果不是特別有用:

但是如果我們使用更多成分的GMM模型,並忽視聚類的類別,我們會發現更接近輸入數據的擬合:

這里,16個高斯分布的混合不是為了找到分離的數據簇,而是為了對輸入數據的整體分布進行建模。這是分布的一個生成模型,這意味著GMM為我們提供了生成與我們的輸入類似分布的新隨機數據的方法。例如,以下是從這個16分量GMM擬合到我們原始數據的400個新點:

GMM非常方便,可以靈活地建模任意多維數據分布。

GMM是一種生成模型這一事實為我們提供了一種確定給定數據集的最佳組件數的自然方法。生成模型本質上是數據集的概率分布,因此我們可以簡單地評估模型下數據的可能性,使用交叉驗證來避免過度擬合。校正過度擬合的另一種方法是使用一些分析標准來調整模型可能性,例如 Akaike information criterion (AIC) 或 Bayesian information criterion (BIC) 。Scikit-Learn的GMM估計器實際上包含計算這兩者的內置方法,因此在這種方法上操作非常容易。
讓我們看看在moon數據集中,使用AIC和BIC函數確定GMM組件數量:

最佳的聚類數目是使得AIC或BIC最小化的值,具體取決於我們希望使用的近似值。 AIC告訴我們,我們上面選擇的16個組件可能太多了:大約8-12個組件可能是更好的選擇。與此類問題一樣,BIC建議使用更簡單的模型。
注意重點:這個組件數量的選擇衡量GMM作為密度估算器的效果,而不是它作為聚類演算法的效果。我鼓勵您將GMM主要視為密度估算器,並且只有在簡單數據集中保證時才將其用於聚類。

我們剛剛看到了一個使用GMM作為數據生成模型的簡單示例,以便根據輸入數據定義的分布創建新樣本。在這里,我們將運行這個想法,並從我們以前使用過的標准數字語料庫中生成新的手寫數字。
首先,讓我們使用Scikit-Learn的數據工具載入數字數據:

接下來讓我們繪制前100個,以准確回憶我們正在看的內容:

我們有64個維度的近1,800位數字,我們可以在這些位置上構建GMM以產生更多。 GMM可能難以在如此高維空間中收斂,因此我們將從數據上的可逆維數減少演算法開始。在這里,我們將使用一個簡單的PCA,要求它保留99%的預測數據方差:

結果是41個維度,減少了近1/3,幾乎沒有信息丟失。根據這些預測數據,讓我們使用AIC來計算我們應該使用的GMM組件的數量:

似乎大約110個components最小化了AIC;我們將使用這個模型。我們迅速將其與數據擬合並確保它已收斂合:

現在我們可以使用GMM作為生成模型在這個41維投影空間內繪制100個新點的樣本:

最後,我們可以使用PCA對象的逆變換來構造新的數字:

大部分結果看起來像數據集中合理的數字!
考慮一下我們在這里做了什麼:給定一個手寫數字的樣本,我們已經模擬了數據的分布,這樣我們就可以從數據中生成全新的數字樣本:這些是「手寫數字」,不是單獨的出現在原始數據集中,而是捕獲混合模型建模的輸入數據的一般特徵。這種數字生成模型可以證明作為貝葉斯生成分類器的一個組成部分非常有用,我們將在下一節中看到。

7. 怎樣用matlab作聚類分析啊求操作T_T T_T

展示如何使用MATLAB進行聚類分析
分別運用分層聚類、K均值聚類以及高斯混合模型來進行分析,然後比較三者的結果
生成隨機二維分布圖形,三個中心
% 使用高斯分布(正態分布)
% 隨機生成3個中心以及標准差
s = rng(5,'v5normal');
mu = round((rand(3,2)-0.5)*19)+1;
sigma = round(rand(3,2)*40)/10+1;
X = [mvnrnd(mu(1,:),sigma(1,:),200); ...
mvnrnd(mu(2,:),sigma(2,:),300); ...
mvnrnd(mu(3,:),sigma(3,:),400)];
% 作圖
P1 = figure;clf;
scatter(X(:,1),X(:,2),10,'ro');
title('研究樣本散點分布圖')

K均值聚類
% 距離用傳統歐式距離,分成兩類
[cidx2,cmeans2,sumd2,D2] = kmeans(X,2,'dist','sqEuclidean');
P2 = figure;clf;
[silh2,h2] = silhouette(X,cidx2,'sqeuclidean');
從輪廓圖上面看,第二類結果比較好,但是第一類有部分數據表現不佳。有相當部分的點落在0.8以下。

分層聚類

eucD = pdist(X,'euclidean');
clustTreeEuc = linkage(eucD,'average');
cophenet(clustTreeEuc,eucD);
P3 = figure;clf;
[h,nodes] = dendrogram(clustTreeEuc,20);
set(gca,'TickDir','out','TickLength',[.002 0],'XTickLabel',[]);

可以選擇dendrogram顯示的結點數目,這里選擇20 。結果顯示可能可以分成三類

重新調用K均值法
改為分成三類
[cidx3,cmeans3,sumd3,D3] = kmeans(X,3,'dist','sqEuclidean');
P4 = figure;clf;
[silh3,h3] = silhouette(X,cidx3,'sqeuclidean');

圖上看,比前面的結果略有改善。

將分類的結果展示出來
P5 = figure;clf
ptsymb = {'bo','ro','go',',mo','c+'};
MarkFace = {[0 0 1],[.8 0 0],[0 .5 0]};
hold on
for i =1:3
clust = find(cidx3 == i);
plot(X(clust,1),X(clust,2),ptsymb{i},'MarkerSize',3,'MarkerFace',MarkFace{i},'MarkerEdgeColor','black');
plot(cmeans3(i,1),cmeans3(i,2),ptsymb{i},'MarkerSize',10,'MarkerFace',MarkFace{i});
end
hold off

運用高斯混合分布模型進行聚類分析
分別用分布圖、熱能圖和概率圖展示結果 等高線

% 等高線
options = statset('Display','off');
gm = gmdistribution.fit(X,3,'Options',options);
P6 = figure;clf
scatter(X(:,1),X(:,2),10,'ro');
hold on
ezcontour(@(x,y) pdf(gm,[x,y]),[-15 15],[-15 10]);
hold off
P7 = figure;clf
scatter(X(:,1),X(:,2),10,'ro');
hold on
ezsurf(@(x,y) pdf(gm,[x,y]),[-15 15],[-15 10]);
hold off
view(33,24)

熱能圖
cluster1 = (cidx3 == 1);
cluster3 = (cidx3 == 2);
% 通過觀察,K均值方法的第二類是gm的第三類
cluster2 = (cidx3 == 3);
% 計算分類概率
P = posterior(gm,X);
P8 = figure;clf
plot3(X(cluster1,1),X(cluster1,2),P(cluster1,1),'r.')
grid on;hold on
plot3(X(cluster2,1),X(cluster2,2),P(cluster2,2),'bo')
plot3(X(cluster3,1),X(cluster3,2),P(cluster3,3),'g*')
legend('第 1 類','第 2 類','第 3 類','Location','NW')
clrmap = jet(80); colormap(clrmap(9:72,:))
ylabel(colorbar,'Component 1 Posterior Probability')
view(-45,20);
% 第三類點部分概率值較低,可能需要其他數據來進行分析。

% 概率圖
P9 = figure;clf
[~,order] = sort(P(:,1));
plot(1:size(X,1),P(order,1),'r-',1:size(X,1),P(order,2),'b-',1:size(X,1),P(order,3),'y-');
legend({'Cluster 1 Score' 'Cluster 2 Score' 'Cluster 3 Score'},'location','NW');
ylabel('Cluster Membership Score');
xlabel('Point Ranking');

通過AIC准則尋找最優的分類數
高斯混合模型法的最大好處是給出分類好壞的標准
AIC = zeros(1,4);
NlogL = AIC;
GM = cell(1,4);
for k = 1:4
GM{k} = gmdistribution.fit(X,k);
AIC(k)= GM{k}.AIC;
NlogL(k) = GM{k}.NlogL;
end
[minAIC,numComponents] = min(AIC);
按AIC准則給出的最優分類數為: 3 對應的AIC值為: 8647.63

後記
(1)pluskid指出K均值演算法的初值對結果很重要,但是在運行時還沒有發現類似的結果。也許Mathworks對該演算法進行過優化。有時間會仔細研究下代碼,將結果放上來。
分享:

56
喜歡
4
贈金筆
閱讀(21209)┊ 評論 (4)┊ 收藏(1) ┊轉載原文 ┊ 喜歡▼ ┊列印┊舉報

前一篇:[轉載]拉普拉斯矩陣
後一篇:[轉載]用matlab做聚類分析

8. 單高斯模型SGM & 高斯混合模型GMM

在了解高斯混合模型之前,我們先來看看什麼是高斯分布,高斯分布大家應該都比較熟悉了,就是我們平時所說的正態分布,也叫高斯分布。正態分布是一個在數學、物理及工程等領域都非常重要的概率分布,在統計學的許多方面有著重大的影響力。

正態分布的特點
集中性:正態曲線的高峰位於正中央,即均數所在的位置。
對稱性:正態曲線以均數為中心,左右對稱,曲線兩端永遠不與橫軸相交。
均勻變動性:正態曲線由均數所在處開始,分別向左右兩側逐漸均勻下降。

若隨機變數 服從一個數學期望為 、方差為 的正態分布,記為 。其中期望值 決定了其位置,標准差 決定了分布的幅度。當 = 0, = 1時,正態分布是標准正態分布。

正態分布有極其廣泛的實際背景, 生產與科學實驗中很多隨機變數的概率分布都可以近似地用正態分布來描述 。例如,在生產條件不變的情況下,產品的強力、抗壓強度、口徑、長度等指標;同一種生物體的身長、體重等指標;同一種種子的重量;測量同一物體的誤差;彈著點沿某一方向的偏差;某個地區的年降水量;以及理想氣體分子的速度分量,等等。一般來說,如果一個量是由許多微小的獨立隨機因素影響的結果,那麼就可以認為這個量具有正態分布(見中心極限定理)。從理論上看,正態分布具有很多良好的性質 ,許多概率分布可以用它來近似;還有一些常用的概率分布是由它直接導出的,例如對數正態分布、t分布、F分布等。

高斯模型有單高斯模型(SGM)和混合高斯模型(GMM)兩種。

概率密度函數服從上面的正態分布的模型叫做單高斯模型,具體形式如下:

當樣本數據 是一維數據(Univariate)時,高斯模型的概率密度函數為:


其中: 為數據的均值, 為數據的標准差。

當樣本數據 是多維數據(Univariate)時,高斯模型的概率密度函數為:

其中: 為數據的均值, 為協方差,d為數據維度。

高斯混合模型(GMM)是單高斯概率密度函數的延伸,就是用多個高斯概率密度函數(正態分布曲線)精確地量化變數分布,是將變數分布分解為若干基於高斯概率密度函數(正態分布曲線)分布的統計模型。

用通俗一點的語言解釋就是, 個單高斯模型混合在一起,生成的模型,就是高斯混合模型。這 個子模型是混合模型的隱變數(Hidden variable)。一般來說,一個混合模型可以使用任何概率分布,這里使用高斯混合模型是因為高斯分布具備很好的數學性質以及良好的計算性能。

GMM是工業界使用最多的一種聚類演算法。它本身是一種概率式的聚類方法,假定所有的樣本數據X由K個混合多元高斯分布組合成的混合分布生成。

高斯混合模型的概率密度函數可以表示為:

其中:
是觀察數據屬於第 個子模型的概率, ;
是第 個的單高斯子模型的概率密度函數, 或
,具體函數見上方單高斯模型的概率密度函數。

參數估計有多種方法,有矩估計、極大似然法、一致最小方差無偏估計、最小風險估計、同變估計、最小二乘法、貝葉斯估計、極大驗後法、最小風險法和極小化極大熵法等。最基本的方法是最小二乘法和極大似然法。

極大似然估計的思想是 :隨機試驗有多個可能的結果,但在一次試驗中,有且只有一個結果會出現,如果在某次試驗中,結果w出現了,則認為該結果發生的概率最大。

1)寫出似然函數:
假設單個樣本的概率函數為 ,對每個樣本的概率函數連乘,就可以得到樣本的似然函數

2)對似然函數取對數:

目的是為了讓乘積變成加法,方便後續運算

3)求導數,令導數為0,得到似然方程:
和 在同一點取到最大值,所以可以通過對 求導,令導數為零,實現同個目的

4)解似然方程,得到的參數即為所求

對於單高斯模型,可以使用極大似然估計(MLE)來求解出參數的值。

單高斯模型的對數似然函數為:





上式分別對 和 求偏導數,然後令其等於0,可以得到對應的參數估計值:

如果依然按照上面的極大似然估計方法求參數

GMM的對數似然函數為:

對上式求各個參數的偏導數,然後令其等於0,並且還需要附件一個條件: 。
我們會發現,直接求導無法計算出參數。所以我們需要用其它方式去解決參數估計問題,一般情況下我們使用的是迭代的方法,用期望最大演算法(Expectation Maximization,EM)進行估計。

EM演算法的具體原理以及示例見我的另外一篇文章。

9. 建議收藏!10 種 Python 聚類演算法完整操作示例

聚類或聚類分析是無監督學習問題。它通常被用作數據分析技術,用於發現數據中的有趣模式,例如基於其行為的客戶群。有許多聚類演算法可供選擇,對於所有情況,沒有單一的最佳聚類演算法。相反,最好探索一系列聚類演算法以及每種演算法的不同配置。在本教程中,你將發現如何在 python 中安裝和使用頂級聚類演算法。完成本教程後,你將知道:

聚類分析,即聚類,是一項無監督的機器學習任務。它包括自動發現數據中的自然分組。與監督學習(類似預測建模)不同,聚類演算法只解釋輸入數據,並在特徵空間中找到自然組或群集。

群集通常是特徵空間中的密度區域,其中來自域的示例(觀測或數據行)比其他群集更接近群集。群集可以具有作為樣本或點特徵空間的中心(質心),並且可以具有邊界或范圍。

聚類可以作為數據分析活動提供幫助,以便了解更多關於問題域的信息,即所謂的模式發現或知識發現。例如:

聚類還可用作特徵工程的類型,其中現有的和新的示例可被映射並標記為屬於數據中所標識的群集之一。雖然確實存在許多特定於群集的定量措施,但是對所識別的群集的評估是主觀的,並且可能需要領域專家。通常,聚類演算法在人工合成數據集上與預先定義的群集進行學術比較,預計演算法會發現這些群集。

有許多類型的聚類演算法。許多演算法在特徵空間中的示例之間使用相似度或距離度量,以發現密集的觀測區域。因此,在使用聚類演算法之前,擴展數據通常是良好的實踐。

一些聚類演算法要求您指定或猜測數據中要發現的群集的數量,而另一些演算法要求指定觀測之間的最小距離,其中示例可以被視為「關閉」或「連接」。因此,聚類分析是一個迭代過程,在該過程中,對所識別的群集的主觀評估被反饋回演算法配置的改變中,直到達到期望的或適當的結果。scikit-learn 庫提供了一套不同的聚類演算法供選擇。下面列出了10種比較流行的演算法:

每個演算法都提供了一種不同的方法來應對數據中發現自然組的挑戰。沒有最好的聚類演算法,也沒有簡單的方法來找到最好的演算法為您的數據沒有使用控制實驗。在本教程中,我們將回顧如何使用來自 scikit-learn 庫的這10個流行的聚類演算法中的每一個。這些示例將為您復制粘貼示例並在自己的數據上測試方法提供基礎。我們不會深入研究演算法如何工作的理論,也不會直接比較它們。讓我們深入研究一下。

在本節中,我們將回顧如何在 scikit-learn 中使用10個流行的聚類演算法。這包括一個擬合模型的例子和可視化結果的例子。這些示例用於將粘貼復制到您自己的項目中,並將方法應用於您自己的數據。

1.庫安裝

首先,讓我們安裝庫。不要跳過此步驟,因為你需要確保安裝了最新版本。你可以使用 pip Python 安裝程序安裝 scikit-learn 存儲庫,如下所示:

接下來,讓我們確認已經安裝了庫,並且您正在使用一個現代版本。運行以下腳本以輸出庫版本號。

運行該示例時,您應該看到以下版本號或更高版本。

2.聚類數據集

我們將使用 make _ classification ()函數創建一個測試二分類數據集。數據集將有1000個示例,每個類有兩個輸入要素和一個群集。這些群集在兩個維度上是可見的,因此我們可以用散點圖繪制數據,並通過指定的群集對圖中的點進行顏色繪制。這將有助於了解,至少在測試問題上,群集的識別能力如何。該測試問題中的群集基於多變數高斯,並非所有聚類演算法都能有效地識別這些類型的群集。因此,本教程中的結果不應用作比較一般方法的基礎。下面列出了創建和匯總合成聚類數據集的示例。

運行該示例將創建合成的聚類數據集,然後創建輸入數據的散點圖,其中點由類標簽(理想化的群集)著色。我們可以清楚地看到兩個不同的數據組在兩個維度,並希望一個自動的聚類演算法可以檢測這些分組。

已知聚類著色點的合成聚類數據集的散點圖接下來,我們可以開始查看應用於此數據集的聚類演算法的示例。我已經做了一些最小的嘗試來調整每個方法到數據集。3.親和力傳播親和力傳播包括找到一組最能概括數據的範例。

它是通過 AffinityPropagation 類實現的,要調整的主要配置是將「 阻尼 」設置為0.5到1,甚至可能是「首選項」。下面列出了完整的示例。

運行該示例符合訓練數據集上的模型,並預測數據集中每個示例的群集。然後創建一個散點圖,並由其指定的群集著色。在這種情況下,我無法取得良好的結果。

數據集的散點圖,具有使用親和力傳播識別的聚類

4.聚合聚類

聚合聚類涉及合並示例,直到達到所需的群集數量為止。它是層次聚類方法的更廣泛類的一部分,通過 AgglomerationClustering 類實現的,主要配置是「 n _ clusters 」集,這是對數據中的群集數量的估計,例如2。下面列出了完整的示例。

運行該示例符合訓練數據集上的模型,並預測數據集中每個示例的群集。然後創建一個散點圖,並由其指定的群集著色。在這種情況下,可以找到一個合理的分組。

使用聚集聚類識別出具有聚類的數據集的散點圖

5.BIRCHBIRCH

聚類( BIRCH 是平衡迭代減少的縮寫,聚類使用層次結構)包括構造一個樹狀結構,從中提取聚類質心。

它是通過 Birch 類實現的,主要配置是「 threshold 」和「 n _ clusters 」超參數,後者提供了群集數量的估計。下面列出了完整的示例。

運行該示例符合訓練數據集上的模型,並預測數據集中每個示例的群集。然後創建一個散點圖,並由其指定的群集著色。在這種情況下,可以找到一個很好的分組。

使用BIRCH聚類確定具有聚類的數據集的散點圖

6.DBSCANDBSCAN

聚類(其中 DBSCAN 是基於密度的空間聚類的雜訊應用程序)涉及在域中尋找高密度區域,並將其周圍的特徵空間區域擴展為群集。

它是通過 DBSCAN 類實現的,主要配置是「 eps 」和「 min _ samples 」超參數。下面列出了完整的示例。

運行該示例符合訓練數據集上的模型,並預測數據集中每個示例的群集。然後創建一個散點圖,並由其指定的群集著色。在這種情況下,盡管需要更多的調整,但是找到了合理的分組。

使用DBSCAN集群識別出具有集群的數據集的散點圖

7.K均值

K-均值聚類可以是最常見的聚類演算法,並涉及向群集分配示例,以盡量減少每個群集內的方差。

它是通過 K-均值類實現的,要優化的主要配置是「 n _ clusters 」超參數設置為數據中估計的群集數量。下面列出了完整的示例。

運行該示例符合訓練數據集上的模型,並預測數據集中每個示例的群集。然後創建一個散點圖,並由其指定的群集著色。在這種情況下,可以找到一個合理的分組,盡管每個維度中的不等等方差使得該方法不太適合該數據集。

使用K均值聚類識別出具有聚類的數據集的散點圖

8.Mini-Batch

K-均值Mini-Batch K-均值是 K-均值的修改版本,它使用小批量的樣本而不是整個數據集對群集質心進行更新,這可以使大數據集的更新速度更快,並且可能對統計雜訊更健壯。

它是通過 MiniBatchKMeans 類實現的,要優化的主配置是「 n _ clusters 」超參數,設置為數據中估計的群集數量。下面列出了完整的示例。

運行該示例符合訓練數據集上的模型,並預測數據集中每個示例的群集。然後創建一個散點圖,並由其指定的群集著色。在這種情況下,會找到與標准 K-均值演算法相當的結果。

帶有最小批次K均值聚類的聚類數據集的散點圖

9.均值漂移聚類

均值漂移聚類涉及到根據特徵空間中的實例密度來尋找和調整質心。

它是通過 MeanShift 類實現的,主要配置是「帶寬」超參數。下面列出了完整的示例。

運行該示例符合訓練數據集上的模型,並預測數據集中每個示例的群集。然後創建一個散點圖,並由其指定的群集著色。在這種情況下,可以在數據中找到一組合理的群集。

具有均值漂移聚類的聚類數據集散點圖

10.OPTICSOPTICS

聚類( OPTICS 短於訂購點數以標識聚類結構)是上述 DBSCAN 的修改版本。

它是通過 OPTICS 類實現的,主要配置是「 eps 」和「 min _ samples 」超參數。下面列出了完整的示例。

運行該示例符合訓練數據集上的模型,並預測數據集中每個示例的群集。然後創建一個散點圖,並由其指定的群集著色。在這種情況下,我無法在此數據集上獲得合理的結果。

使用OPTICS聚類確定具有聚類的數據集的散點圖

11.光譜聚類

光譜聚類是一類通用的聚類方法,取自線性線性代數。

它是通過 Spectral 聚類類實現的,而主要的 Spectral 聚類是一個由聚類方法組成的通用類,取自線性線性代數。要優化的是「 n _ clusters 」超參數,用於指定數據中的估計群集數量。下面列出了完整的示例。

運行該示例符合訓練數據集上的模型,並預測數據集中每個示例的群集。然後創建一個散點圖,並由其指定的群集著色。在這種情況下,找到了合理的集群。

使用光譜聚類聚類識別出具有聚類的數據集的散點圖

12.高斯混合模型

高斯混合模型總結了一個多變數概率密度函數,顧名思義就是混合了高斯概率分布。它是通過 Gaussian Mixture 類實現的,要優化的主要配置是「 n _ clusters 」超參數,用於指定數據中估計的群集數量。下面列出了完整的示例。

運行該示例符合訓練數據集上的模型,並預測數據集中每個示例的群集。然後創建一個散點圖,並由其指定的群集著色。在這種情況下,我們可以看到群集被完美地識別。這並不奇怪,因為數據集是作為 Gaussian 的混合生成的。

使用高斯混合聚類識別出具有聚類的數據集的散點圖

在本文中,你發現了如何在 python 中安裝和使用頂級聚類演算法。具體來說,你學到了:

10. MATLAB 代碼,用高斯混合模型聚類分析處理xlsx文件,只需要三行代碼

MATLAB是以矩陣為基本的數據運算單位,它能夠很好的與C語言進行混合編程,對於符號運算,其可以直接調用maple的命令,增加了它的適用范圍。下面就為大家介紹MATLAB如何讀寫Excel數據文件的步驟

閱讀全文

與高斯混合模型聚類演算法代碼相關的資料

熱點內容
為什麼程序員的網速總是那麼快 瀏覽:954
單片機一個led閃爍 瀏覽:473
pdf顯示空白 瀏覽:449
基岩版伺服器怎麼添加常載入區域 瀏覽:651
蘋果雲服務伺服器地址 瀏覽:162
blue引擎gm命令如何修改 瀏覽:49
編程高手箴言pdf 瀏覽:702
那狗n1用的app叫什麼名字 瀏覽:336
python定義浮點數 瀏覽:604
酷安加密門禁卡 瀏覽:101
為什麼蘋果比安卓拍攝效果好 瀏覽:341
android網路中文亂碼 瀏覽:656
演算法就是程序這句話對不 瀏覽:930
數學建模蟻群演算法 瀏覽:110
雲伺服器如何選擇區域 瀏覽:374
小米標簽加密後 瀏覽:96
什麼是spdif源碼 瀏覽:55
有做軟體的源碼網站嗎 瀏覽:75
什麼app可以看韓國人化妝 瀏覽:173
做進口溯源碼的公司 瀏覽:193