中文文檔: http://sklearn.apachecn.org/cn/stable/modules/mixture.html
英文文檔: http://sklearn.apachecn.org/en/stable/modules/mixture.html
官方文檔: http://scikit-learn.org/stable/
GitHub: https://github.com/apachecn/scikit-learn-doc-zh(覺得不錯麻煩給個 Star,我們一直在努力)
貢獻者: https://github.com/apachecn/scikit-learn-doc-zh#貢獻者
關於我們: http://www.apachecn.org/organization/209.html
2.1. 高斯混合模型
sklearn.mixture
是一個應用高斯混合模型進行非監督學習的包,支持 diagonal,spherical,tied,full四種協方差矩陣
(注:diagonal指每個分量分佈有各自不同對角協方差矩陣,spherical指每個分量分佈有各自不同的簡單協方差矩陣, tied指所有分量分佈有相同的標準協方差矩陣,full指每個分量分佈有各自不同的標準協方差矩陣) ,它對數據進行抽樣,並且根據數據估計模型。同時包也提供了相關支持,來幫助用戶決定合適的分量分佈個數。
高斯混合模型是一個假設所有的數據點都是生成於一個混合的有限數量的並且未知參數的高斯分佈的概率模型。 我們可以將混合模型看作是k-means聚類算法的推廣,它利用了關於數據的協方差結構以及潛在高斯中心的信息。
對應不同的估算策略,Scikit-learn 實現了不同的類來估算高斯混合模型。 詳細描述如下:
2.1.1. 高斯混合
GaussianMixture
對象實現了用來擬合高斯混合模型的 期望最大化 (EM)
算法。它還可以爲多變量模型畫置信橢圓,以及計算BIC(Bayesian Information Criterion,貝葉斯信息準則) 來評估數據中聚類的數量。
GaussianMixture.fit
方法提供了從訓練集應用高斯混合模型進行機器學習的方法。
給定測試集,使用 GaussianMixture.predict
方法,可以預測每個樣本最有可能對應的高斯分佈分量。
GaussianMixture
自帶了選項來限制不同的估計協方差類型:spherical(每個分量分佈有各自不同的簡單協方差矩陣),
diagonal(每個分量分佈有各自不同對角協方差矩陣),tied(所有分量分佈有相同的標準協方差矩陣),或 full(每個分量分佈有各自不同的標準協方差矩陣)。
示例:
- 一個在虹膜數據集上用高斯混合模型聚類,請查閱 GMM covariances
- 一個繪製密度估計的例子,請查閱 Density Estimation for a Gaussian mixture
2.1.1.1. 優缺點 GaussianMixture
2.1.1.2. 選擇經典高斯混合模型中的分量數
BIC(Bayesian Information Criterion,貝葉斯信息準則)可以用來高效地選擇高斯混合的分量數。 理論上,它僅當在近似狀態下可以恢復正確的分量數(即如果有大量數據可用,並且假設這些數據實際上是一個混合高斯模型獨立同分布 生成的)。注意:使用 變分貝葉斯高斯混合 可以避免高斯混合模型中分量數目的選擇。
示例:
- 一個用典型的高斯混合進行的模型選擇的例子,請查閱 Gaussian Mixture Model Selection
2.1.1.3. 估計算法期望最大化(EM)
在從無標籤的數據中應用高斯混合模型主要的困難在於,通常不知道哪個點來自哪個潛在分量 (如果可以獲取到這些信息,就可以很容易通過相應的數據點,擬合每個獨立的高斯分佈)。 期望最大化(Expectation-maximization,EM) 是一個理論完善的統計算法,其通過迭代方式來解決這個問題。首先,假設一個隨機分量 (隨機地選擇一箇中心點,可以用k-means算法得到,或者甚至就直接地隨便在原點周圍選取), 並且爲每個點計算由模型的每個分量生成的概率。然後,調整模型參數以最大化模型生成這些參數的可能性。 重複這個過程,該算法保證過程中的參數總會收斂到局部最優解。
2.1.2. 變分貝葉斯高斯混合
:class:`BayesianGaussianMixture`對象實現了具有變分的高斯混合模型的變體推理算法。 這個API和 :class:`GaussianMixture`相似。
2.1.2.1. 估計算法: variational inference
變分推理是期望最大化(EM)的擴展,它最大化模型證據(包括先驗)的下界,而不是數據似然函數。 變分方法的原理與期望最大化相同(二者都是迭代算法,在尋找由混合產生的每個點的概率和 根據所分配的點擬合之間兩步交替),但是變分方法通過整合先驗分佈信息來增加正則化限制。 這避免了期望最大化解決方案中常出現的奇異性,但是也對模型帶來了微小的偏差。 變分方法計算過程通常明顯較慢,但通常不會慢到無法使用。
由於它的貝葉斯性質,變分算法比預期最大化(EM)需要更多的超參數(即先驗分佈中的參數),其中最重要的就是 濃度參數 weight_concentration_prior
。指定一個低濃度先驗(concentration
prior), 將會使模型將大部分的權重放在少數分量上,其餘分量的權重則趨近0。而高濃度先驗(concentration prior)將使 混合模型中的大部分分量都有一定的權重。
:class:`BayesianGaussianMixture`類的參數實現提出了兩種權重分佈先驗: 一種是狄利克雷分佈(Dirichlet distribution)有限混合模型, 另一種是狄利克雷過程(Dirichlet Process)無限混合模型。 在實際應用上,狄利克雷過程推理算法(Dirichlet Process inference algorithm) 是近似的,並且使用截尾分佈(truncated distribution)與固定最大分量數(稱之爲Stick-breaking representation)。 使用的分量數實際上幾乎總是取決於數據。
下圖比較了不同類型的權重濃度先驗(weight concentration prior,參數 weight_concentration_prior_type
)
不同的 weight_concentration_prior
值獲得的結果。 在這裏,我們可以發現``weight_concentration_prior``參數的值對獲得的有效的激活分量數(即權重較大的分量分佈的數量)有很大影響。
我們也能注意到當先驗是’dirichlet_distribution’類型時,大的濃度權重先驗(concentration weight prior) 會導致更均勻的權重,然而’dirichlet_process’類型(默認類型)卻不是這樣。
下面的例子將具有固定數量分量的高斯混合模型與 狄利克雷過程先驗(Dirichlet process prior)的變分高斯混合模型進行比較。 這裏,典型高斯混合模型被指定有5個分量,但數據集是由2個分量分佈生成。 我們可以看到,具有狄利克雷過程的變分高斯混合可以將自身限制在2個分量, 而高斯混合必須按照用戶先驗設置的固定數量的分量來擬合數據。 在例子中,用戶選擇了 n_components=5
,這與真正的toy
dataset(有noise的數據)的生成分量不符。 稍微觀察就能注意到,狄利克雷過程先驗(Dirichlet process prior)的變分高斯混合模型可以採取保守的 立場,僅僅擬合一個分量。
在下圖中,我們將擬合一個並不能被高斯混合模型很好描述的數據集。 調整`BayesianGaussianMixture`類的參數``weight_concentration_prior``, 這個參數決定了用來擬合數據的分量數。我們在最後兩個圖上展示了從兩個混合(resulting mixtures) 產生的隨機抽樣。
示例:
- 一個用
GaussianMixture
和BayesianGaussianMixture
繪製置信橢圓體的例子, 請查閱 Gaussian Mixture Model Ellipsoids- Gaussian Mixture Model Sine Curve 這個例子展示了用
GaussianMixture
和BayesianGaussianMixture
來擬合正弦波。- 一個使用不同的
weight_concentration_prior_type
用以不同的weight_concentration_prior
參數值的:class:BayesianGaussianMixture 來繪製置信橢圓體的例子。 請查閱:ref:sphx_glr_auto_examples_mixture_plot_concentration_prior.py
BayesianGaussianMixture
下的變分推理的優缺點
2.1.2.1.1. 優點
自動選擇: |
當 weight_concentration_prior 足夠小以及 n_components 比模型需要的更大時,變分貝葉斯混合模型計算的結果可以讓一些混合權重值趨近0。
這讓模型可以自動選擇合適的有效分量數。這僅僅需要提供分量的數量上限。但是請注意,“理想”的激活分量數 只在應用場景中比較明確,在數據挖掘參數設置中通常並不明確。 |
---|---|
對參數數量的敏感度較低: |
與總是用盡可以用的分量,因而將爲不同數量的組件產生不同的解決方案有限模型不同, 變分推理狄利克雷過程先驗(Dirichlet process prior)變分推理(weight_concentration_prior_type='dirichlet_process' )
改變參數後結果並不會改變太多,使之更穩定和更少的調諧(tuning)。 |
正則化: | 由於結合了先驗信息,變分解的病理特徵(pathological special cases) 少於期望最大化(EM)的解。 |
2.1.2.2. 狄利克雷過程(The Dirichlet Process)
這裏我們描述了狄利克雷過程混合的變分推理算法。狄利克雷過程是在*具有 無限大,無限制的分區數的聚類*上的先驗概率分佈。 相比於有限高斯混合模型,變分技術讓我們在推理時間幾乎沒有懲罰(penalty)的情況下 納入了高斯混合模型的先驗結構。
一個重要的問題是Dirichlet過程是如何實現用無限的,無限制的簇數,並且結果仍然是一致的。 本文檔不做出完整的解釋,但是你可以看這裏`stick breaking process <https://en.wikipedia.org/wiki/Dirichlet_process#The_stick-breaking_process>`_ 來幫助你理解它。stick breaking(折棍)過程是Dirichlet過程的衍生。我們每次從一個單位長度的 stick開始,且每一步都折斷剩下的一部分。每次,我們把每個stick的長度關聯到落入一組混合的點的比例。 最後,爲了表示無限混合,我們關聯最後每個stick的剩下的部分到沒有落入其他組的點的比例。 每段的長度是隨機變量,概率與濃度參數(concentration parameter)成比例。較小的濃度值 將單位長度分成較大的stick段(即定義更集中的分佈)。較高的濃度值將生成更小的stick段 (即增加非零權重的分量數)。
Dirichlet過程的變分推理技術,在對該無限混合模型進行有限近似情形下,仍然可以運用。 用戶不必事先指定想要的分量數,只需要指定濃度參數和混合分量數的上界 (假定上界高於“真實”的分量數,僅僅影響算法複雜度,而不是實際上使用的分量數)。
中文文檔: http://sklearn.apachecn.org/cn/stable/modules/mixture.html
英文文檔: http://sklearn.apachecn.org/en/stable/modules/mixture.html
官方文檔: http://scikit-learn.org/stable/
GitHub: https://github.com/apachecn/scikit-learn-doc-zh(覺得不錯麻煩給個 Star,我們一直在努力)
貢獻者: https://github.com/apachecn/scikit-learn-doc-zh#貢獻者
關於我們: http://www.apachecn.org/organization/209.html
有興趣的們也可以和我們一起來維護,持續更新中 。。。
機器學習交流羣: 629470233