W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
密度估計(jì)涉及到無監(jiān)督學(xué)習(xí),特征工程和數(shù)據(jù)建模三個(gè)領(lǐng)域。一些最流行和有用的密度估計(jì)技術(shù)是混合模型(例如高斯混合模型sklearn.mixture.GaussianMixture
)和基于近鄰域的方法(例如核密度估計(jì)sklearn.neighbors.KernelDensity
)。高斯混合在聚類的一節(jié)中進(jìn)行了更全面的討論 ,因?yàn)樵摷夹g(shù)還可用作無監(jiān)督聚類方案。
密度估計(jì)是一個(gè)非常簡(jiǎn)單的概念,大多數(shù)人已經(jīng)熟悉了一種常見的密度估計(jì)技術(shù):直方圖。
直方圖是一種簡(jiǎn)單的數(shù)據(jù)可視化,其中定義了bin,并統(tǒng)計(jì)每個(gè)bin中的數(shù)據(jù)點(diǎn)數(shù)量。直方圖的一個(gè)例子可以在下圖的左上面板中看到:
然而,直方圖的一個(gè)主要問題是分組的選擇可能會(huì)對(duì)結(jié)果的可視化產(chǎn)生不成比例的影響。相同數(shù)據(jù)下,右上角的圖是左上角的圖向右移動(dòng)后產(chǎn)生的。兩種可視化的結(jié)果看起來完全不同,可能會(huì)導(dǎo)致對(duì)數(shù)據(jù)不同的解釋。
直觀地說,我們也可以把直方圖看成一堆塊,每個(gè)點(diǎn)上放一個(gè)塊。通過在適當(dāng)?shù)木W(wǎng)格空間中疊加這些塊,我們就可以恢復(fù)直方圖。但是,如果我們不是將這些塊堆積在一個(gè)規(guī)則的網(wǎng)格上,而是將每個(gè)塊集中在它所代表的點(diǎn)上,并將每個(gè)位置的總高度加起來呢?這樣就得到了上圖左下角所示的可視化。它可能不像直方圖那樣整潔,但是由數(shù)據(jù)決定塊的位置意味著它能更好地表示底層的數(shù)據(jù)。
這個(gè)可視化是核密度估計(jì)的一個(gè)示例,在這個(gè)例子中使用了一種頂帽核(即每個(gè)點(diǎn)上放一個(gè)方形塊)。我們可以通過使用一種更平滑的核來得到一個(gè)更平滑的分布。右下角的圖展示了一個(gè)高斯核密度估計(jì)值,其中每個(gè)點(diǎn)都給總分布貢獻(xiàn)一條高斯曲線。結(jié)果是從數(shù)據(jù)中得出一個(gè)平滑的密度估計(jì),并且可作為一個(gè)強(qiáng)大的非參數(shù)的點(diǎn)分布模型。
scikit-learn中的核密度估計(jì)是在sklearn.neighbors.KernelDensity
估計(jì)器中實(shí)現(xiàn)的,該估計(jì)器使用Ball Tree或KD Tree進(jìn)行高效查詢(有關(guān)這些內(nèi)容的討論,請(qǐng)參閱最近鄰)。盡管為簡(jiǎn)化起見,上面的示例使用一維數(shù)據(jù)集,但是可以在任意多個(gè)維度上執(zhí)行核密度估計(jì),不過在實(shí)踐中,維度災(zāi)難會(huì)導(dǎo)致其性能在高維度上下降。
在下圖中, 從雙峰分布中繪制了100個(gè)點(diǎn),并顯示了選用三個(gè)不同核的核密度估計(jì):
很明顯,核形狀如何影響結(jié)果分布的平滑度。scikit-learn核密度估計(jì)器可以按以下方式使用:
>>> 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'
。從數(shù)學(xué)上講,核是一個(gè)正值函數(shù)由帶寬參數(shù) 控制。給定核的形狀后,在一組點(diǎn) 內(nèi)的 點(diǎn)處的密度估計(jì)由下式給出
這里的帶寬作為一個(gè)平滑參數(shù),控制結(jié)果中偏差和方差之間的權(quán)衡。大帶寬導(dǎo)致非常平滑(即高偏差)的密度分布。小帶寬導(dǎo)致不平滑(即高方差)的密度分布。
sklearn.neighbors.KernelDensity
實(shí)現(xiàn)幾種常見形狀的的核,如下圖所示:
這些核的形狀如下所示:
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
核密度估計(jì)可以與任何有效的距離度量一起使用(有關(guān)可用指標(biāo)的列表,請(qǐng)參見 sklearn.neighbors.DistanceMetric
), 盡管結(jié)果只針對(duì)歐氏度量進(jìn)行適當(dāng)?shù)貧w一化。 一個(gè)特別有用的度量是 Haversine distance ,它測(cè)量球體上的點(diǎn)與點(diǎn)之間角距離。 這里有一個(gè)使用核密度估計(jì)來可視化地理空間數(shù)據(jù)的例子,在這種情況下,南美大陸上兩個(gè)不同物種的觀測(cè)分布:
核密度估計(jì)的另一個(gè)有用的應(yīng)用是從數(shù)據(jù)集中學(xué)習(xí)出一個(gè)非參數(shù)生成模型,以便有效地從該生成模型中繪制新的樣本。這是一個(gè)示例,該示例使用高斯核對(duì)數(shù)據(jù)的 PCA 投影進(jìn)行學(xué)習(xí),創(chuàng)建一組新的手寫數(shù)字的示例,:
“新”數(shù)據(jù)由輸入數(shù)據(jù)線性組合而成,其權(quán)重根據(jù) KDE 模型按概率給出。
示例:
簡(jiǎn)單的一維核密度估計(jì): 一維簡(jiǎn)單核密度估計(jì)計(jì)算。 核密度估計(jì): 使用核密度估計(jì)來學(xué)習(xí)手寫數(shù)字?jǐn)?shù)據(jù)生成模型,以及使用該模型繪制新樣本的示例 物種分布的核密度估計(jì): 使用Haversine距離度量來顯示地理空間數(shù)據(jù)的核密度估計(jì)示例.
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: