2013-10-24 82 views
1

scikit-learn中的混合模型代碼用於列出單個數據點,但如果您有直方圖?也就是說,我對每個體素都有一個密度值,我希望混合模型能夠逼近它。這可能嗎?我想一個解決方案是從這個直方圖中抽取數值,但這不是必須的。在scikit-learn中將GMM擬合到3D直方圖

+0

歡迎來到slashdot!我對scikit瞭解不多,但如果你可以發佈一些更多的細節,包括討論的一些示例代碼,你可能會得到更多的回覆。 –

+0

這取決於應用程序。你真的需要高斯混合模型的位置和標準偏差嗎?你用它來分類嗎?如果您確實需要高斯混合模型,則可以使用多峯高斯擬合來用高斯混合模型來近似直方圖。但是,如果您只需要平滑插值,那麼這不是最簡單的路線,在這種情況下,雙三次插值可能更簡單。 – willtalmadge

回答

0

Scikit-learn爲核密度估計提供了廣泛的實用程序和算法,它專門以推導直方圖等事物的分佈爲中心。有關示例,請參見文檔here。如果你對數據的分佈沒有期望,那麼KDE可能是更一般的方法。

0

對於2D直方圖Z(你的體素的二維數組)

import numpy as np 
# create the co-ordinate values 
X, Y = np.mgrid[0:Z.shape[0], 0:Z.shape[1]] 

# artificially create a list of points from your histogram 
data_points = [] 
for x, y, z in zip(X.ravel(), Y.ravel(), Z.ravel()): 
    # add the data point/voxel (x, y) as many times as it occurs 
    # in the histogram 
    for iz in z: 
     data_points.append((x, y)) 

# now fit your GMM 
from sklearn.mixture import GMM 
gmm = GMM() 
gmm.fit(data_points) 

雖然,作爲@Kyle卡斯特納指出的,是實現這更好的方法。首先,你的柱狀圖將被「分箱」,這已經讓你失去了一些分辨率。您可以在分級之前獲得原始數據嗎?