[英]Gaussian Mixture Models: Difference between Spark MLlib and scikit-learn
[英]scikit-learn Gaussian Mixture Model set prediction output based on Gaussian's mean
我正在使用GMM來找出2個重疊的高斯。 一個是信號,另一個是背景。 背景始終具有比信號低的值和均值。 在大多數情況下, gmm.means_
的順序為[lower_mean,Higher_mean],這使其將0預測為背景,將1預測為信號。 有時,均值的順序為[higher_mean,lower_mean],這使得GMM可以將其預測為信號0和噪聲1(與我想要的相反)。 我希望平均值較低的高斯為背景(0),平均值較高的高斯為signal(1)。 如何將GMM結果設置為正確的順序或如何設置預測輸出?
img = cv2.imread(path, -1)
img_flatten = img.flatten().reshape(img.flatten().shape[0],1)
gmm = GaussianMixture(n_components=2, covariance_type='full')
gmm.fit(img_flatten)
pred = gmm.predict(img_flatten) # how can I set the prediction value I want for each Gaussian?
print(np.round(g.means_, 2))
# gives [[ 66.31] [ 203.64]] on some images and [[ 67.32] [ 306.13]] on other
Stauffer和Grimson的文章“用於實時跟蹤的自適應背景混合模型”討論了一種啟發式方法,用於識別GMM的哪些組件與背景相對應。 他們建議按w / sigma的值對高斯進行排序(w是混合權重,sigma是其標准差)。 並且前k個應該是背景的。 如何選擇k取決於每個問題,並將在本文中進行討論。
但這僅是兩個高斯的情況,也許您可以檢查w / sigma最高的高斯分量是否始終對應於同一類。
更詳細一點:在那篇論文中,sigma是一維高斯的std。 在您的情況下,您似乎具有N維高斯。 在這種情況下,您可以將方差的行列式取為1/2的冪,而不是sigma。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.