高效靈活的概率建模方法基於Python
前言
在今天給大家介紹一個研究工具:pomegranate。它比其他軟體包更加靈活,更快,直觀易用,並且可以在多線程中並行完成。
The API
主要模型介紹
- 一般混合模型
- 隱馬爾可夫模型
- 貝葉斯網路
- 貝葉斯分類器
所有模型使用做多的方法
model.log_probability(X) / model.probability(X) nmodel.sample() nmodel.fit(X, weights, inertia) nmodel.summarize(X, weights) nmodel.from_summaries(inertia) nmodel.predict(X) model.predict_proba(X) nmodel.predict_log_proba(X) nmodel.from_samples(X, weights)n
支持很多分布函數
單變數分布
1. UniformDistribution 2. BernoulliDistribution 3. NormalDistribution 4. LogNormalDistribution 5. ExponentialDistribution 6. BetaDistribution7. GammaDistribution
8. DiscreteDistribution 9. PoissonDistribution內核密度 1. GaussianKernelDensity 2. UniformKernelDensity 3. TriangleKernelDensity多變數分布 1. IndependentComponentsDistribution 2. MultivariateGaussianDistribution3. DirichletDistribution
4. ConditionalProbabilityTable 5. JointProbabilityTable
模型可以從已知值中創建
模型也可以從數據直接學習
pomegranate 比 numpy 快
只需要一次數據集(適用於所有模型)。以下是正態分布統計示例:
支持核心學習
由於使用了足夠多的統計數據,因此可以支持外核/在線學習。
pomegranate 比 scipy 快
The API
主要模型介紹
- 一般混合模型
- 隱馬爾可夫模型
- 貝葉斯網路
- 貝葉斯分類器
通用混合模型(GMM)可以對多組分布進行建模
GMM使用期望最大化(EM)來擬合
1、使用kmeans ++或kmeans ||初始化集群
2、對於等於後P(M | D)(E步)的所有點分配權重
3、使用加權點更新分布(M步)
4、重複2和3,直到收斂
model = GeneralMixtureModel.from_samples(NormalDistribution, 2, X)n
GMM不限於高斯分布
單個指數分布不能很好的數據進行建模
model = ExponentialDistribution.from_samples(X)n
兩個指數混合使數據更好的模擬
model = GeneralMixtureModel.from_samples(ExponentialDistribution, 2, X)n
Heterogeneous mixtures are natively supported
model = GeneralMixtureModel.from_samples([ExponentialDistribution, UniformDistribution], 2, X)n
一般混合模型比sklearn快
The API
主要模型介紹
- 一般混合模型
- 隱馬爾可夫模型
- 貝葉斯網路
- 貝葉斯分類器
CG enrichment detection HMM
GACTACGACTCGCGCTCGCGCGACGCGCTCGACATCATCGACACGACACTC
GMM-HMM
HMM比hmmlearn快
The API
主要模型介紹
- 一般混合模型
- 隱馬爾可夫模型
- 貝葉斯網路
- 貝葉斯分類器
P(M|D)= P(D|M)P(M) / P(D)nPosterior = Likelihood * Prior / Normalizationn
基於數據建立一個簡單的分類器
似然函數本身忽略了類不平衡
先驗概率可以模擬分類不平衡
後驗模型更真實地對原始數據進行建模
後者的比例是一個很好的分類器
model = NaiveBayes.from_samples(NormalDistribution, X, y)nposteriors = model.predict_proba(idxs)nnP(M|D)= ∏P(D|M) P(M) / P(D)nPosterior = Likelihood * Prior / NormalizationnnNaive Bayes does not need to be homogenousn
不同的功能屬於不同的分布
Gaussian Naive Bayes: 0.798
sklearn Gaussian Naive Bayes: 0.798Heterogeneous Naive Bayes: 0.844與sklearn一樣快
P(M|D)= P(D|M) P(M) / P(D)nPosterior = Likelihood * Prior / Normalizationnnmc_a = MarkovChain.from_samples(X[y == 0])nmc_b = MarkovChain.from_samples(X[y == 1])nmodel_b = BayesClassifier([mc_a, mc_b], weights=numpy.array([1-y.mean(), y.mean()]))nhmm_a = HiddenMarkovModel…nhmm_b = HiddenMarkovModel...nmodel_b = BayesClassifier([hmm_a, hmm_b], weights=numpy.array([1-y.mean(), y.mean()]))nbn_a = BayesianNetwork.from_samples(X[y == 0])nbn_b = BayesianNetwork.from_samples(X[y == 1])nmodel_b = BayesClassifier([bn_a, bn_b], weights=numpy.array([1-y.mean(), y.mean()]))n
並行
推薦閱讀:
※Python利器之胎教《唐詩三百首》文本分析
※python寫的軟體都可以被逆向嗎?
※跟黃哥學習Python第一章
※使用Celery