量化百科

高效灵活的概率建模方法基于Python

由ypyu创建,最终由ypyu 被浏览 18 用户

前言

在今天给大家介绍一个研究工具:**pomegranate。**它比其他软件包更加灵活,更快,直观易用,并且可以在多线程中并行完成。

The API

主要模型介绍

  • 一般混合模型
  • 隐马尔可夫模型
  • 贝叶斯网络
  • 贝叶斯分类器

所有模型使用做多的方法

model.log_probability(X) / model.probability(X) 
model.sample() 
model.fit(X, weights, inertia) 
model.summarize(X, weights) 
model.from_summaries(inertia) 
model.predict(X) model.predict_proba(X) 
model.predict_log_proba(X) 
model.from_samples(X, weights)

支持很多分布函数




















单变量分布1. UniformDistribution2. BernoulliDistribution3. NormalDistribution4. LogNormalDistribution5. ExponentialDistribution6. BetaDistribution7. GammaDistribution8. DiscreteDistribution9. PoissonDistribution内核密度1. GaussianKernelDensity2. UniformKernelDensity3. TriangleKernelDensity多变量分布1. IndependentComponentsDistribution2. MultivariateGaussianDistribution3. DirichletDistribution4. ConditionalProbabilityTable5. JointProbabilityTable

模型可以从已知值中创建

模型也可以从数据直接学习

![](data:image/svg+xml;utf8,<svg%20xmlns='http://www.w3.org/2000/svg' width='517' height='289'></svg>)

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)

GMM不限于高斯分布

单个指数分布不能很好的数据进行建模

model = ExponentialDistribution.from_samples(X)

两个指数混合使数据更好的模拟

model = GeneralMixtureModel.from_samples(ExponentialDistribution, 2, X)

Heterogeneous mixtures are natively supported

model = GeneralMixtureModel.from_samples([ExponentialDistribution, UniformDistribution], 2, X)

一般混合模型比sklearn快

The API

主要模型介绍

  • 一般混合模型
  • 隐马尔可夫模型
  • 贝叶斯网络
  • 贝叶斯分类器

CG enrichment detection HMM

GACTACGACTCGCGCTCGCGCGACGCGCTCGACATCATCGACACGACACTC

GMM-HMM

HMM比hmmlearn快

The API

主要模型介绍

  • 一般混合模型

  • 隐马尔可夫模型

  • 贝叶斯网络

  • 贝叶斯分类器

    P(M|D)= P(D|M)P(M) / P(D) Posterior = Likelihood * Prior / Normalization

基于数据建立一个简单的分类器

似然函数本身忽略了类不平衡

先验概率可以模拟分类不平衡

后验模型更真实地对原始数据进行建模

后者的比例是一个很好的分类器

model = NaiveBayes.from_samples(NormalDistribution, X, y)
posteriors = model.predict_proba(idxs)

P(M|D)= ∏P(D|M) P(M) / P(D)
Posterior = Likelihood * Prior / Normalization

Naive Bayes does not need to be homogenous

不同的功能属于不同的分布



Gaussian Naive Bayes: 0.798sklearn Gaussian Naive Bayes: 0.798Heterogeneous Naive Bayes: 0.844

与sklearn一样快

P(M|D)= P(D|M) P(M) / P(D)
Posterior = Likelihood * Prior / Normalization

mc_a = MarkovChain.from_samples(X[y == 0])
mc_b = MarkovChain.from_samples(X[y == 1])
model_b = BayesClassifier([mc_a, mc_b], weights=numpy.array([1-y.mean(), y.mean()]))
hmm_a = HiddenMarkovModel…
hmm_b = HiddenMarkovModel...
model_b = BayesClassifier([hmm_a, hmm_b], weights=numpy.array([1-y.mean(), y.mean()]))
bn_a = BayesianNetwork.from_samples(X[y == 0])
bn_b = BayesianNetwork.from_samples(X[y == 1])
model_b = BayesClassifier([bn_a, bn_b], weights=numpy.array([1-y.mean(), y.mean()]))

并行

标签

PythonAPI