scikit-learn 密度估計

2023-02-20 13:45 更新

密度估計涉及到無監(jiān)督學習,特征工程和數據建模三個領域。一些最流行和有用的密度估計技術是混合模型(例如高斯混合模型sklearn.mixture.GaussianMixture)和基于近鄰域的方法(例如核密度估計sklearn.neighbors.KernelDensity)。高斯混合在聚類的一節(jié)中進行了更全面的討論 ,因為該技術還可用作無監(jiān)督聚類方案。

密度估計是一個非常簡單的概念,大多數人已經熟悉了一種常見的密度估計技術:直方圖。

2.8.1. 密度估計: 直方圖

直方圖是一種簡單的數據可視化,其中定義了bin,并統(tǒng)計每個bin中的數據點數量。直方圖的一個例子可以在下圖的左上面板中看到:


然而,直方圖的一個主要問題是分組的選擇可能會對結果的可視化產生不成比例的影響。相同數據下,右上角的圖是左上角的圖向右移動后產生的。兩種可視化的結果看起來完全不同,可能會導致對數據不同的解釋。

直觀地說,我們也可以把直方圖看成一堆塊,每個點上放一個塊。通過在適當的網格空間中疊加這些塊,我們就可以恢復直方圖。但是,如果我們不是將這些塊堆積在一個規(guī)則的網格上,而是將每個塊集中在它所代表的點上,并將每個位置的總高度加起來呢?這樣就得到了上圖左下角所示的可視化。它可能不像直方圖那樣整潔,但是由數據決定塊的位置意味著它能更好地表示底層的數據。

這個可視化是核密度估計的一個示例,在這個例子中使用了一種頂帽核(即每個點上放一個方形塊)。我們可以通過使用一種更平滑的核來得到一個更平滑的分布。右下角的圖展示了一個高斯核密度估計值,其中每個點都給總分布貢獻一條高斯曲線。結果是從數據中得出一個平滑的密度估計,并且可作為一個強大的非參數的點分布模型。

2.8.2. 核密度估計

scikit-learn中的核密度估計是在sklearn.neighbors.KernelDensity估計器中實現的,該估計器使用Ball Tree或KD Tree進行高效查詢(有關這些內容的討論,請參閱最近鄰)。盡管為簡化起見,上面的示例使用一維數據集,但是可以在任意多個維度上執(zhí)行核密度估計,不過在實踐中,維度災難會導致其性能在高維度上下降。

在下圖中, 從雙峰分布中繪制了100個點,并顯示了選用三個不同核的核密度估計:


很明顯,核形狀如何影響結果分布的平滑度。scikit-learn核密度估計器可以按以下方式使用:

>>> from sklearn.neighbors import KernelDensity
>>> import numpy as np
>>> X = np.array([[-1, -1], [-2, -1], [-3, -2], [1, 1], [2, 1], [3, 2]])
>>> kde = KernelDensity(kernel='gaussian', bandwidth=0.2).fit(X)
>>> kde.score_samples(X)
array([-0.41075698, -0.41075698, -0.41076071, -0.41075698, -0.41075698,
       -0.41076071])

如上所示,這里我們使用的是kernel='gaussian'。從數學上講,核是一個正值函數由帶寬參數 控制。給定核的形狀后,在一組點 內的 點處的密度估計由下式給出

這里的帶寬作為一個平滑參數,控制結果中偏差和方差之間的權衡。大帶寬導致非常平滑(即高偏差)的密度分布。小帶寬導致不平滑(即高方差)的密度分布。

sklearn.neighbors.KernelDensity 實現幾種常見形狀的的核,如下圖所示:


這些核的形狀如下所示:

  • Gaussian kernel ( kernel = 'gaussian' )

  • Tophat kernel ( kernel = 'tophat' ) if $x

  • Epanechnikov kernel ( kernel = 'epanechnikov' )

  • Exponential kernel ( kernel = 'exponential' )

  • Linear kernel ( kernel = ' linear' ) if $x

  • cosine kernel ( kernel = 'cosine' ) 如果 $x

核密度估計可以與任何有效的距離度量一起使用(有關可用指標的列表,請參見 sklearn.neighbors.DistanceMetric ), 盡管結果只針對歐氏度量進行適當地歸一化。 一個特別有用的度量是 Haversine distance ,它測量球體上的點與點之間角距離。 這里有一個使用核密度估計來可視化地理空間數據的例子,在這種情況下,南美大陸上兩個不同物種的觀測分布:


核密度估計的另一個有用的應用是從數據集中學習出一個非參數生成模型,以便有效地從該生成模型中繪制新的樣本。這是一個示例,該示例使用高斯核對數據的 PCA 投影進行學習,創(chuàng)建一組新的手寫數字的示例,:


“新”數據由輸入數據線性組合而成,其權重根據 KDE 模型按概率給出。

示例:


以上內容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號