簡體   English   中英

使用python在我的數據上擬合高斯(或其他發行版)

[英]Fit gaussians (or other distributions) on my data using python

我有一個功能數據庫,一個2D np.array(2000個樣本,每個樣本包含100個特征,2000 X 100)。 我想使用python將高斯分布擬合到我的數據庫中。 我的代碼如下:

data = load_my_data() # loads a np.array with size 2000x200
clf = mixture.GaussianMixture(n_components= 50, covariance_type='full')
clf.fit(data)

我不確定參數,例如covariance_type,我如何調查是否成功發生了擬合。

編輯:我調試代碼來調查clf.means_正在發生的事情,並且顯然它產生了一個矩陣n_components X size_of_features 50 X 20)。 有沒有辦法可以檢查擬合是否成功,還是繪制數據? 有什么高斯混合的替代品(指數混合物,例如,我找不到任何可用的實現)?

我認為你正在使用sklearn包。

一旦你適合,然后鍵入

print clf.means_

如果它有輸出,則數據被擬合,如果它引起錯誤,則不適合。

希望這對你有所幫助。

您可以使用PCA到3D空間進行降維(比方說),然后繪制平均值和數據。

在嘗試識別分布之前,總是首選選擇一組簡化的候選者(換句話說,使用Cullen&Frey拒絕不太可能的候選人)然后選擇最佳結果,選擇最佳結果,

您可以在scipy中創建所有可用分布的列表。 兩個分布和隨機數據的示例:

import numpy as np
import scipy.stats as st

data = np.random.random(10000)
#Specify all distributions here
distributions = [st.laplace, st.norm]
mles = []

for distribution in distributions:
    pars = distribution.fit(data)
    mle = distribution.nnlf(pars, data)
    mles.append(mle)

results = [(distribution.name, mle) for distribution, mle in 
zip(distributions, mles)]
best_fit = sorted(zip(distributions, mles), key=lambda d: d[1])[0]
print 'Best fit reached using {}, MLE value: {}'.format(best_fit[0].name, best_fit[1])

據我所知,您可能希望對兩種不同的分布進行回歸,而不是將它們擬合為算術曲線。 如果是這種情況,您可能有興趣將一個繪制成另一個,並進行線性(或多項式)回歸,檢查系數如果是這種情況,兩個分布的線性回歸可能會告訴您是否存在線性相關或不。 使用Scipy文檔進行線性回歸

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM