高效靈活的概率建模方法基於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. BetaDistribution

7. GammaDistribution

8. DiscreteDistribution

9. PoissonDistribution

內核密度

1. GaussianKernelDensity

2. UniformKernelDensity

3. TriangleKernelDensity

多變數分布

1. IndependentComponentsDistribution

2. MultivariateGaussianDistribution

3. 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.798

Heterogeneous 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 = HiddenMarkovModelnhmm_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

TAG:Python | 机器学习 | 数学建模 |