常见问题解答

如果我已经知道参数并且只想进行推理,是否可以创建一个可用的模型

是的!每个模型都允许您传入参数,或者保持未初始化状态直接拟合数据。如果您传入自己的参数,可以通过调用log_probabilitypredict等方法进行推断。

如果我有一个初始/预训练模型,可以使用pomegranate进行微调吗?

是的!就像你可以在给定参数后直接进行推理一样,你也可以使用内置的拟合函数来微调这些参数。你可能需要调整惯性或冻结某些参数以进行微调。

如果我有一个初始/预训练模型,是否可以冻结部分参数并对剩余部分进行微调?

是的!执行与上述相同的操作,但对于您希望保持冻结的模型组件,传入frozen=True参数。

如何直接从数据中学习模型?

pomegranate v1.0.0遵循scikit-learn API的设计理念,您需要将所有超参数传入初始化函数,然后使用fit函数来拟合参数。所有模型都支持类似NormalDistribution().fit(X)的调用方式。部分模型允许初始化时留空,但大多数模型至少需要一个参数,例如混合模型需要指定分布类型,马尔可夫链需要指定阶数。其他可选超参数可用于调整拟合过程。初始化可以为空(或仅需少量参数,例如马尔可夫链设置阶数的情况)。

我的数据集有缺失值。可以使用pomegranate吗?

是的!pomegranate中几乎所有算法都可以处理不完整的数据集。您只需要传入一个torch.masked.MaskedTensor,其中缺失值被屏蔽(值为False),以替代普通张量。

如何在pomegranate中使用核外学习?

模型初始化后,可以使用summarize方法对任意大小的数据块进行处理,将其缩减为充分统计量。这些充分统计量具有可加性,这意味着如果为数据集的所有块计算这些统计量并将它们相加,可以得到精确的更新。一旦所有数据块都被汇总,就可以调用from_summaries方法,基于这些累加的充分统计量来更新模型参数。通过允许用户从内存中加载数据块、汇总后丢弃并处理下一个块,实现了核外计算的支持。

pomegranate 是否支持并行化?

是的!因为pomegranate v1.0.0是用原生支持多线程的PyTorch编写的,所有算法都会使用可用的线程。有关控制使用线程数的信息,请参阅PyTorch文档。

pomegranate 是否支持 GPU?

是的!再次强调,由于pomegranate v1.0.0是基于PyTorch开发的,所有算法都支持GPU加速。速度提升幅度随算法复杂度而变化,简单概率分布可获得约2-3倍加速,而隐马尔可夫模型的前向-后向算法使用GPU时速度甚至能提升5-10倍。

pomegranate 是否支持分布式计算?

目前pomegranate尚未配置为分布式环境,尽管相关组件已经具备实现这一目标的可能性。

如何引用pomegranate?

介绍pomegranate的研究论文是:

Schreiber, J. (2018). Pomegranate: Python中快速灵活的概​​率建模工具. 机器学习研究期刊, 18(164), 1-6.

可从JMLarXiv下载。

该论文可引用为:

@article{schreiber2018pomegranate,
          title={Pomegranate: fast and flexible probabilistic modeling in python},
          author={Schreiber, Jacob},
          journal={Journal of Machine Learning Research},
          volume={18},
          number={164},
          pages={1--6},
          year={2018}
        }

或者,可以引用GitHub代码库为:

@misc{Schreiber2016,
        author = {Jacob Schreiber},
        title = {pomegranate},
        year = {2016},
        publisher = {GitHub},
        journal = {GitHub repository},
        howpublished = {\url{https://github.com/jmschrei/pomegranate}},
        commit = {enter commit that you used}
}