高斯混合模型(GMM):理念、數學、EM算法和python實現

2020-12-06 不靠譜的貓

高斯混合模型是一種流行的無監督學習算法。GMM方法類似於K-Means聚類算法,但是由於其複雜性,它更健壯,更有用。

K-means聚類使用歐式距離函數來發現數據中的聚類。只要數據相對於質心呈圓形分布,此方法就可以很好地工作。但是,如果數據是非線性的呢?或者數據具有非零的協方差呢?如果聚類具有不同的均值和協方差怎麼辦?

這就要用到高斯混合模型了!

GMM假設生成數據的是一種混合的高斯分布。與將數據點硬分配到聚類的K-means方法(假設圍繞質心的數據呈圓形分布)相比,它使用了將數據點軟分配到聚類的方法(即概率性,因此更好)。

簡而言之,GMM效果更好,因為:(A)通過使用軟分配捕獲屬於不同聚類的數據點的不確定性,(B)對圓形聚類沒有偏見。即使是非線性數據分布,它也能很好地工作。

GMM

GMM的目標函數是最大化數據X、p(X)或對數似然值L的似然值(因為對數是單調遞增函數)。通過假設混合了K個高斯來生成數據,我們可以將p(X)寫為邊緣概率,對所有數據點的K個聚類求和。

似然值
對數似然值

利用上面對數函數的求和,我們不能得到解析解。看起來很討厭,但這個問題有一個很好的解決方案:Expectation-Maximization(EM)算法。

數學

EM算法是一種迭代算法,用於在無法直接找到參數的情況下尋找模型的最大似然估計(MLE)。它包括兩個步驟:期望步驟和最大化步驟。

1.期望步驟:計算成員值r_ic。這是數據點x_i屬於聚類c的概率。

2. 最大化步驟:計算一個新參數mc,該參數確定屬於不同聚類的點的分數。 通過計算每個聚類c的MLE來更新參數μ,π,Σ。

重複EM步驟,直到對數似然值L收斂。

Python編碼

讓我們從頭開始用python編寫GMM的基本實現。

生成一維數據。

初始化GMM的參數:μ,π,Σ。

運行EM算法的第一次迭代

將此代碼放在for循環中,並將其放在類對象中。

我們已經建立並運行了一個一維數據模型。同樣的原理也適用於更高維度(≥2D)。唯一的區別是我們將使用多元高斯分布。讓我們為2D模型編寫Python代碼。

讓我們生成一些數據並編寫我們的模型

讓我們對此模型進行一些預測

y = np.random.randint(-10, 20, size=(12, 2))gmm2d = GMM2D(num_clusters=3, max_iterations=10)gmm2d.run(X)gmm2d.predict(y)

如果使用sklearn,可以在幾行代碼中完成相同的任務。

GMM將樣本分類為第二類。

結論

實現高斯混合模型並不難。一旦你清楚了數學,它將為模型找到最大似然估計(無論是一維數據還是高維數據)。該方法具有較強的魯棒性,在執行聚類任務時非常有用。現在您已經熟悉了GMM的python實現,可以使用數據集執行一些很酷的操作。

相關焦點

  • python實現高斯樸素貝葉斯分類器
    python實現高斯樸素貝葉斯分類器    在這篇文章中,我們將使用我最喜歡的機器學習庫scikit-learn在Python中實現樸素貝葉斯分類器。接下來,我們將使用經過訓練的樸素貝葉斯(監督分類法)模型來預測人口收入。
  • 理解高斯混合模型中期望最大化的M-Step
    在本篇文章中將解釋高斯混合模型(GMM)的關鍵部分背後的數學原理,即期望最大化(EM),以及如何將這些概念轉換為Python。 這個故事的重點是EM或M-Step。  注意:這不是有關端到端GMM算法的全面說明。 要進行更深入的研究,請參閱我們以前翻譯的文章。
  • Python多階段框架實現虛擬試衣間,超逼真
    為了更好地保留顯著區域的細節,如服裝和面部區域,我們提出了一個樹塊(樹擴張融合塊)來利用多尺度特徵在發生器網絡。通過多個階段的端到端訓練,可以聯合優化整個框架,最終使得視覺逼真度得到了顯著的提高、同時獲得了細節更為豐富的結果。在標準數據集上進行的大量實驗表明,他們提出的框架實現了最先進的性能,特別是在保存服裝紋理和面部識別的視覺細節方面。
  • EM算法是鍊金術嗎?
    下面我首先以混合模型為例,簡單介紹EM算法,並證明流行的EM算法收斂證明是錯的(沒說算法是錯的)。假設n個高斯分布函數是:P(X|θj)=Kexp[-(X-cj)2/(2dj2)],j=1,2,…,n其中K是係數,cj是中心,dj是標準差。
  • 小白學數據:教你用Python實現簡單監督學習算法
    有很多方法可以實現有監督學習,我們將探討幾種最常用的方法。根據給定的數據集,機器學習可以分為兩大類:分類(Classification)和回歸(Regression)。如果給定的數據集的輸出值是類別,那麼待解決是分類問題。
  • 從數學到實現,全面回顧高斯過程中的函數最優化
    高斯過程可以被認為是一種機器學習算法,它利用點與點之間同質性的度量作為核函數,以從輸入的訓練數據預測未知點的值。本文從理論推導和實現詳細地介紹了高斯過程,並在後面提供了用它來近似求未知函數最優解的方法。
  • Python機器學習10:機器學習中的六種分類算法及實現(上)
    本文將會介紹六種常見的機器學習分類算法及其scikit-learn實現,當你在處理分類問題時,可以嘗試使用這些算法。比較不同算法在具體問題上的效果,然後選擇一種最佳算法。引言本教程分為三部分,分別如下所示。本文將會介紹前二部分,第三部分將會在後面的文章中介紹。
  • 更快的計算,更高的內存效率:PyTorch混合精度模型AMP介紹
    這篇文章是關於利用Tensor Cores和自動混合精度來更快地訓練深度學習網絡的。什麼是Tensor Cores?根據NVIDIA網站的介紹:NVIDIA Turing和Volta GPU由Tensor Cores提供支持。Tensor Cores是一項革命性技術,可提供開創性的AI性能。
  • 中國量子計算原型機「九章」問世 求解數學算法高斯玻色取樣只需...
    以速度來看,求解數學算法高斯玻色取樣的速度只需200秒,而目前的超級計算機要用6億年。通常認為,50個量子比特是證明量子計算機有望超越傳統計算機的關鍵門檻。「九章」得名於我國古代一部知名的數學專著。公開資料顯示,量子計算機的特點主要有運行速度較快、處置信息能力較強、應用範圍較廣等。與一般計算機比較起來,信息處理量愈多,對於量子計算機實施運算也就愈加有利,也就更能確保運算具備精準性。
  • 資源| Python上的圖模型與概率建模工具包:pomegranate
    新版本為概率分布、k 均值、混合模型、隱馬爾可夫模型、貝葉斯網絡、樸素貝葉斯/貝葉斯分類器等模型提供模型擬合、結構化學習和推斷過程的修正,並重點關注於處理數據缺失值。pomegranate 簡介pomegranate 是基於 Python 的圖模型和概率模型工具包,它使用 Cython 實現以加快反應速度。它源於 YAHMM,可實現快速、高效和極度靈活的概率模型,如概率分布、貝葉斯網絡、混合隱馬爾可夫模型等。概率建模最基礎的級別是簡單的概率分布。
  • 2019年必知的10大頂級Python庫
    在 TensorFlow 創建的所有庫都是用 C 和 C++編寫的,但是,它有一個複雜的前端,是用 python 實現的。你的 python 代碼將被編譯,然後在使用 C 和 C++構建的 TensorFlow 分布式執行引擎上執行。實際上,TensorFlow 的應用是無限的,這就是它美妙的地方。
  • Python視頻教程網課編程零基礎入門數據分析網絡爬蟲全套Python...
    excel操控 12【VBA宏工程插件與python+xlwings混合調用】 13python +VBA混合開發 之 winapi自由世界 14python+panas+excel+vba混合調用 15【hybridDev實戰】【py+excel+ppt自動匯報】 16原創獨家配套筆記之混合開發VBA基礎 17原創獨家配套筆記之好玩
  • 算法應用|機器學習python應用,簡單機器學習項目實踐
    上一篇文章中介紹了機器學習的簡單知識,還有python中進行機器學習實踐需要的生態環境,接下來將會通過鳶尾花分類這個例子對機器學習做一個簡要的介紹。通過一步一步地實現這個項目來介紹以下內容。導入和使用python中機器學習的各個方面的類庫。導入數據,並通過描述性分析、可視化等對數據進行分析。創建六個模型,並從中選擇準確度最高的模型。
  • 資料|《常用數據挖掘算法總結及 Python 實現》
    今日資料推薦《 常用數據挖掘算法總結及 Python 實現 》這份資源非常適合相關的從業人員或大數據愛好者,該文檔總結了常用的數據挖掘的算法原理以及 Python 實踐內容,為初學者提供良好的參考資料目錄:第一部分:數據挖掘與機器學習數學基礎第二部分:機器學習概述第三部分:監督學習--分類與回歸第四部分:非監督學習--聚類與關聯分析
  • 機器學習、深度學習算法原理與案例實踐暨Python大數據綜合應用...
    共4天8節,講解機器學習和深度學習的模型理論和代碼實踐,梳理機器學習、深度學習、計算機視覺的技術框架,從根本上解決如何使用模型、優化模型的問題;每次課中,首先闡述算法理論和少量公式推導,然後使用真實數據做數據挖掘、機器學習、深度學習的數據分析、特徵選擇、調參和結果比較。
  • 一文讀懂遺傳算法工作原理(附Python實現)
    你也許在想:這句話和遺傳算法有什麼關係?其實遺傳算法的整個概念就基於這句話。你經常會對模型中特徵的重要性進行一番判斷,然後手動設定一個閾值,選擇出其重要性高於這個閾值的特徵。 那麼,有沒有什麼方法可以更好地處理這個問題呢?其實處理特徵選取任務最先進的算法之一就是遺傳算法。 我們前面處理背包問題的方法可以完全應用到這裡。
  • 【強化學習實戰】基於gym和tensorflow的強化學習算法實現
    1新智元推薦【新智元導讀】知乎專欄強化學習大講堂作者郭憲博士開講《強化學習從入門到進階》,我們為您節選了其中的第二節《基於gym和tensorflow的強化學習算法實現》,希望對您有所幫助。同時,由郭憲博士等擔任授課教師的深度強化學習國慶集訓營也將於 10 月 2 日— 6 日在北京舉辦。
  • 數學天才——高斯
    173年4月30日,高斯出生在德意志的一個貧苦家庭。父親是一名園丁,還做泥水匠等工作,母親是石匠的女兒。高斯很早就展現了過人オ華,3歲時就能指出父親帳冊上的錯誤。1785年,8歲的高斯進入德國農村的一所小學,在破舊的教室裡聽課。
  • 求解數學算法高斯玻色取樣只需200秒!我國量子計算機算力全球領先
    12月4日,中國科學技術大學宣布該校潘建偉等人成功構建76個光子的量子計算原型機「九章」,求解數學算法高斯玻色取樣只需200秒,而目前世界最快的超級計算機要用6億年。這一突破使我國成為全球第二個實現「量子優越性」的國家。  「量子優越性像個門檻,是指當新生的量子計算原型機,在某個問題上的計算能力超過了最強的傳統計算機,就證明其未來有多方超越的可能。」
  • 史上最強:numpy 實現全部機器學習算法
    來源:SOTOM數據科學 來自於加州伯克利大學的David Bourgin 使用Numpy實現了幾乎全部的機器學習算法,真正實現了手擼ML的願景。多少「調包俠」的願望都被這位小哥實現了! 該項目超過3萬行代碼,除了算法本身,還有很多的數據預處理代碼!