跳到内容

TPOT


Tests PyPI Downloads Conda Downloads

TPOT 是 Tree-based Pipeline Optimization Tool(基于树的流水线优化工具)的缩写。TPOT 是一款 Python 自动化机器学习工具,它使用遗传编程来优化机器学习流水线。将 TPOT 视为您的数据科学助手。

贡献者

TPOT 最近进行了重大重构。该软件包从头开始重写,以提高效率和性能,支持新功能,并修复了大量错误。新功能包括遗传特征选择,显著扩展且更灵活的搜索空间定义方法,多目标优化,以及更模块化的框架,允许更容易地定制演化算法等。在开发过程中,这个新版本被称为“TPOT2”,但现在我们已将之前的 TPOT2 合并到主 TPOT 软件包中。您可以在我们题为“TPOT2: A New Graph-Based Implementation of the Tree-Based Pipeline Optimization Tool for Automated Machine Learning”的 GPTP 论文中了解更多关于这个新版本 TPOT 的信息。

Ribeiro, P. et al. (2024). TPOT2: A New Graph-Based Implementation of the Tree-Based Pipeline Optimization Tool for Automated Machine Learning. In: Winkler, S., Trujillo, L., Ofria, C., Hu, T. (eds) Genetic Programming Theory and Practice XX. Genetic and Evolutionary Computation. Springer, Singapore. https://doi.org/10.1007/978-981-99-8413-8_1

当前版本的 TPOT 由 Cedars-Sinai 开发,开发人员包括
- Pedro Henrique Ribeiro(首席开发人员 - https://github.com/perib, https://www.linkedin.com/in/pedro-ribeiro/)
- Anil Saini (anil.saini@cshs.org)
- Jose Hernandez (jgh9094@gmail.com)
- Jay Moran (jay.moran@cshs.org)
- Nicholas Matsumoto (nicholas.matsumoto@cshs.org)
- Hyunjun Choi (hyunjun.choi@cshs.org)
- Gabriel Ketron (gabriel.ketron@cshs.org) - Miguel E. Hernandez (miguel.e.hernandez@cshs.org)
- Jason Moore (moorejh28@gmail.com)

TPOT 的原始版本主要由宾夕法尼亚大学开发,开发人员包括
- Randal S. Olson (rso@randalolson.com)
- Weixuan Fu (weixuanf@upenn.edu)
- Daniel Angell (dpa34@drexel.edu)
- Jason Moore (moorejh28@gmail.com)
- 以及许多其他慷慨的开源贡献者

许可

有关 TPOT 的许可和使用信息,请参阅仓库许可。通常,我们许可 TPOT 的目的是使其尽可能广泛地使用。

TPOT 是自由软件:您可以根据自由软件基金会发布的 GNU 宽通用公共许可证(Lesser General Public License)条款重新分发和/或修改它,该许可证的第 3 版本,或者(由您选择)任何后续版本。

分发 TPOT 是希望它会有用,但没有任何担保;甚至不包括对适销性或特定用途适用性的默示担保。详情请参阅 GNU 宽通用公共许可证。

您应该已经随 TPOT 收到了 GNU 宽通用公共许可证的副本。如果没有,请参阅 https://gnu.ac.cn/licenses/

文档

文档网页可在此处找到。

我们还建议查看 Tutorials 文件夹,其中包含带有示例和指南的 jupyter notebook。

安装

TPOT 需要一个正常工作的 Python 安装。

创建 conda 环境(可选)

我们建议使用 conda 环境来安装 TPOT,尽管手动安装没有它也能正常工作。

关于创建 anaconda 环境的更多信息可在此处找到。

conda create --name tpotenv python=3.10
conda activate tpotenv

使用的包

python version >=3.10, <3.14 numpy scipy scikit-learn update_checker tqdm stopit pandas joblib xgboost matplotlib traitlets lightgbm optuna jupyter networkx dask distributed dask-ml dask-jobqueue func_timeout configspace

我们的 configspaces 中使用的许多超参数范围改编自原始 TPOT 软件包或 AutoSklearn 软件包。

致 M1 Mac 或其他基于 Arm CPU 用户的一点说明

在安装 TPOT 之前,您需要使用以下命令直接从 conda 安装 lightgbm 包。

这是为了确保您获得与您的系统兼容的版本。

conda install --yes -c conda-forge 'lightgbm>=3.3.3'

使用 pip 安装额外功能

如果您想利用 TPOT 提供的额外功能以及 scikit-learn 扩展,您可以使用 pip 安装它们。使用这些额外功能安装 TPOT 的命令如下

pip install tpot[sklearnex]

请注意,虽然这些扩展可以加速 scikit-learn 包,但仍有一些重要的注意事项

这些扩展可能尚未在基于 Arm 的 CPU(例如 M1 Mac)上完全开发和测试。您在此类系统上可能会遇到兼容性问题或性能下降。

我们建议在安装这些额外功能时使用 Python 3.9,因为它提供了更好的兼容性和稳定性。

开发者/最新分支安装

pip install -e /path/to/tpotrepo

如果您使用 git pull 下载,则仓库文件夹将被命名为 TPOT。(注意:此文件夹是包含 setup.py 的那个,而不是其中同名的子文件夹)。如果您下载的是 zip 文件,文件夹可能称为 tpot-main。

使用方法

请参阅 Tutorials 文件夹以获取更多说明和示例。

最佳实践

1

TPOT 使用 dask 进行并行处理。当 Python 进行并行化时,每个模块都会在每个进程中导入。因此,从脚本运行 TPOT 时,将所有代码放在 if __name__ == "__main__" 块内进行保护非常重要。从 notebook 运行 TPOT 时则不需要这样做。

例如

#my_analysis.py

import tpot
if __name__ == "__main__":
    X, y = load_my_data()
    est = tpot.TPOTClassifier()
    est.fit(X,y)
    #rest of analysis

2

设计自定义目标函数时,避免使用全局变量。

不要这样做

global_X = [[1,2],[4,5]]
global_y = [0,1]
def foo(est):
    return my_scorer(est, X=global_X, y=global_y)

而是使用 partial

from functools import partial

def foo_scorer(est, X, y):
    return my_scorer(est, X, y)

if __name__=='__main__':
    X = [[1,2],[4,5]]
    y = [0,1]
    final_scorer = partial(foo_scorer, X=X, y=y)

类似地,使用 lambda 函数时也是如此。

不要这样做

def new_objective(est, a, b)
    #definition

a = 100
b = 20
bad_function = lambda est :  new_objective(est=est, a=a, b=b)

要这样做

def new_objective(est, a, b)
    #definition

a = 100
b = 20
good_function = lambda est, a=a, b=b : new_objective(est=est, a=a, b=b)

提示

TPOT 不会检查您的数据格式是否正确。它会假定您传入了可以处理传入数据类型的操作符。例如,如果您传入一个带有类别特征和缺失数据的 pandas DataFrame,那么您也应该在您的配置中包含可以处理这些数据特征的操作符。或者,如果您传入 preprocessing = True,TPOT 将填充缺失值,对类别特征进行独热编码,然后对数据进行标准化。(请注意,这当前是在整个训练集上进行拟合和转换,然后再进行 CV 分割。稍后将有一个选项可以按折叠应用,并使参数可学习。)

verbose 设置为 5 在调试时会很有帮助,因为它会打印出失败的流水线生成的错误。

贡献 TPOT

欢迎您查看现有议题(issues)以查找可解决的错误或增强功能。如果您对 TPOT 的扩展有任何想法,请提交新的议题,以便我们可以进行讨论。

引用 TPOT

如果您在科学出版物中使用 TPOT,请考虑引用以下至少一篇论文

Trang T. Le, Weixuan Fu and Jason H. Moore (2020). Scaling tree-based automated machine learning to biomedical big data with a feature set selector. Bioinformatics.36(1): 250-256.

BibTeX 条目

@article{le2020scaling,
  title={Scaling tree-based automated machine learning to biomedical big data with a feature set selector},
  author={Le, Trang T and Fu, Weixuan and Moore, Jason H},
  journal={Bioinformatics},
  volume={36},
  number={1},
  pages={250--256},
  year={2020},
  publisher={Oxford University Press}
}

Randal S. Olson, Ryan J. Urbanowicz, Peter C. Andrews, Nicole A. Lavender, La Creis Kidd, and Jason H. Moore (2016). Automating biomedical data science through tree-based pipeline optimization. Applications of Evolutionary Computation, pages 123-137.

BibTeX 条目

@inbook{Olson2016EvoBio,
    author={Olson, Randal S. and Urbanowicz, Ryan J. and Andrews, Peter C. and Lavender, Nicole A. and Kidd, La Creis and Moore, Jason H.},
    editor={Squillero, Giovanni and Burelli, Paolo},
    chapter={Automating Biomedical Data Science Through Tree-Based Pipeline Optimization},
    title={Applications of Evolutionary Computation: 19th European Conference, EvoApplications 2016, Porto, Portugal, March 30 -- April 1, 2016, Proceedings, Part I},
    year={2016},
    publisher={Springer International Publishing},
    pages={123--137},
    isbn={978-3-319-31204-0},
    doi={10.1007/978-3-319-31204-0_9},
    url={http://dx.doi.org/10.1007/978-3-319-31204-0_9}
}

Randal S. Olson, Nathan Bartley, Ryan J. Urbanowicz, and Jason H. Moore (2016). Evaluation of a Tree-based Pipeline Optimization Tool for Automating Data Science. Proceedings of GECCO 2016, pages 485-492.

BibTeX 条目

@inproceedings{OlsonGECCO2016,
    author = {Olson, Randal S. and Bartley, Nathan and Urbanowicz, Ryan J. and Moore, Jason H.},
    title = {Evaluation of a Tree-based Pipeline Optimization Tool for Automating Data Science},
    booktitle = {Proceedings of the Genetic and Evolutionary Computation Conference 2016},
    series = {GECCO '16},
    year = {2016},
    isbn = {978-1-4503-4206-3},
    location = {Denver, Colorado, USA},
    pages = {485--492},
    numpages = {8},
    url = {http://doi.acm.org/10.1145/2908812.2908918},
    doi = {10.1145/2908812.2908918},
    acmid = {2908918},
    publisher = {ACM},
    address = {New York, NY, USA},
}

对 TPOT 的支持

TPOT 由 Cedars-Sinai 的 人工智能创新 (A2I) 实验室 开发,获得了 NIH 的资助,资助号为 U01 AG066833 和 R01 LM010098。我们非常感谢 NIH 和 Cedars-Sinai 在本项目开发期间给予的支持。

TPOT 标志由 Todd Newmuis 设计,他慷慨地为本项目贡献了自己的时间。