常见问题解答
如果我已经知道参数并且只想进行推理,是否可以创建一个可用的模型
是的!每个模型都允许您传入参数,或者保持未初始化状态直接拟合数据。如果您传入自己的参数,可以通过调用log_probability和predict等方法进行推断。
如果我有一个初始/预训练模型,可以使用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.
该论文可引用为:
@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}
}