当前位置: 首页 > 科技观察

如何使用PyCaret-低代码ML库

时间:2023-03-20 10:38:37 科技观察

当我们处理有监督的机器学习问题时,很容易看到随机森林或梯度提升模型的表现如何,如果我们对结果满意就停止试验。如果仅用一行代码就可以比较许多不同的模型会怎么样?如果您可以将数据科学过程的每个步骤(从特征工程到模型部署)减少到几行代码,会怎样?是PyCaret发挥作用的地方。PyCaret是一个高级、低代码的Python库,只需几行代码即可轻松比较、训练、评估、调整和部署机器学习模型。从本质上讲,PyCaret基本上只是许多数据科学库(如Scikit-learn、Yellowbrick、SHAP、Optuna和Spacy)的大型包装器。是的,您可以将这些库用于同一任务,但如果您不想编写大量代码,PyCaret可以为您节省大量时间。在本文中,我演示了如何使用PyCaret快速轻松地构建机器学习项目并准备最终模型以进行部署。安装PyCaretPyCaret是一个具有许多依赖项的大型库。我建议使用Conda为PyCaret创建一个虚拟环境,这样安装就不会影响您现有的任何库。要在Conda中创建和激活虚拟环境,请运行以下命令:condacreate--namepycaret_envpython=3.6condaactivatepycaret_env要安装仅具有所需依赖项的默认较小版本的PyCaret,您可以运行以下命令。pipinstallpycaret要安装完整版本的PyCaret,您应该运行以下命令。pipinstallpycaret[full]安装PyCaret后,停用虚拟环境并使用以下命令将其添加到Jupyter。condadeactivatepython-mipykernelinstall--user--namepycaret_env--display-name"pycaret_env"现在,在浏览器中启动JupyterNotebook后,您应该能够看到将环境更改为刚刚创建的环境的选项。>更改Jupyter中的Conda虚拟环境。导入库您可以在这个GitHub存储库中找到本文的完整代码。在下面的代码中,我只导入了Numpy和Pandas来处理这个演示的数据。导入numpyasnpimportpandasaspd读取数据对于这个例子,我使用了Kaggle上可用的“加州房价”数据集。在下面的代码中,我将此数据集读入数据框并显示该数据框的前十行。housing_data=pd.read_csv('./data/housing.csv')housing_data.head(10)>住房数据集的前十行。上面的输出让我们了解数据是什么样子的。数据主要由数值特征和一个分类特征组成,表示每个房屋与海洋的距离。我们试图预测的目标列是“median_house_value”列。整个数据集总共包含20,640个观测值。初始化实验现在我们有了数据,我们可以初始化一个PyCaret实验,它将预处理数据并为将在此数据集上训练的所有模型启用日志记录。frompycaret.regressionimport*reg_experiment=setup(housing_data,target='median_house_value',session_id=123,log_experiment=True,experiment_name='ca_housing')如下图GIF所示,运行上面的代码会对数据进行预处理,然后生成一个带有实验选项的数据框。>Pycaret设置函数输出。比较基线模型我们可以立即比较不同的基线模型,使用compare_models函数找到具有最佳K折交叉验证性能的模型,如下面的代码所示。在下面的示例中,出于演示目的,我排除了XGBoost。best_model=compare_models(exclude=['xgboost'],fold=5)>比较不同模型的结果。此函数将为每个模型生成一个包含性能统计数据的数据框,并突出显示最佳性能模型的指标,在??本例中为CatBoost回归器。构建模型我们还可以使用PyCaret在一行代码中训练模型。create_model函数只需要一个与您要训练的模型类型相对应的字符串。您可以在PyCaret文档页面上找到此函数可接受字符串的完整列表以及相应的回归模型。catboost=create_model('catboost')create_model函数使用经过训练的CatBoost模型的交叉验证指标来生成上面的数据框。超参数调整现在我们有了一个训练好的模型,我们可以通过超参数调整进一步优化它。只需一行代码,我们就可以调整该模型的超参数,如下所示。tuned_catboost=tune_model(catboost,n_iter=50,optimize='MAE')>使用10折交叉验证调整超参数的结果。最重要的结果(在本例中为平均指标)以黄色突出显示。可视化模型的性能我们可以使用PyCaret创建许多图形来可视化模型的性能。PyCaret使用另一个名为Yellowbrick的高级库来构建这些可视化。残差图默认情况下,plot_model函数将为回归模型生成残差图,如下所示。plot_model(tuned_catboost)>调整后的CatBoost模型的残差图。预测误差通过创建预测误差图,我们还可以可视化相对于实际目标值的预测值。plot_model(tuned_catboost,plot='error')>调整后的CatBoost回归量的预测误差图。上图特别有用,因为它为我们提供了CatBoost模型的R2系数的直观表示。理想情况下(R2=1),当预测值与实际目标值完全匹配时,此图将仅包含虚线沿线的点。特征重要性我们还可以可视化模型的特征重要性,如下所示。plot_model(tuned_catboost,plot='feature')>CatBoost回归器的特征重要性图。从上图可以看出,中位数是预测房价时最重要的特征。由于这个特征对应的是建房地区的收入中位数,所以这个评估还是比较合理的。在高收入地区建造的房屋可能比在低收入地区建造的房屋更贵。使用所有图评估模型我们还可以创建多个图来使用validate_model函数评估模型。evaluate_model(tuned_catboost)>使用evaluate_model函数创建的接口。interpret_model函数是解释模型预测的有用工具。此函数使用称为SHAP的可解释机器学习库,我将在下面的文章中对其进行描述。只需一行代码,我们就可以为我们的模型创建一个SHAPE蜂群图。interpret_model(tuned_catboost)>通过调用interpret_model函数生成的SHAP图。根据上图,我们可以看出收入中位数字段对预测房屋价值的影响最大。自动机器学习PyCaret还具有运行自动机器学习(AutoML)的能力。我们可以指定我们想要优化的损失函数或指标,并让库接管,如下所示。automlautoml_model=automl(optimize='MAE')在此示例中,AutoML模型也恰好是CatBoost回归器,我们可以通过打印模型来确认这一点。print(automl_model)运行上面的打印语句将产生以下输出:生成预测预测模型功能允许我们使用实验数据或新的未见数据生成预测。pred_holdouts=predict_model(automl_model)pred_holdouts.head()上面的predict_model函数生成用于在交叉验证期间验证模型的holdout数据集的预测。该代码还为我们提供了一个数据框,其中包含AutoML模型生成的预测的性能统计信息。>AutoML模型生成的预测。在上面的输出中,“标签”列表示AutoML模型生成的预测。我们还可以对整个数据集进行预测,如下面的代码所示。new_data=housing_data.copy()new_data.drop(['median_house_value'],axis=1,inplace=True)predictions=predict_model(automl_model,data=new_data)predictions.head()保存模型PyCaret还允许我们使用save_model保存功能训练模型。此函数将模型的转换管道保存到pickle文件中。save_model(automl_model,model_name='automl-model')我们还可以使用load_model函数来加载保存的AutoML模型。loaded_model=load_model('automl-model')print(loaded_model)打印出加载的模型将产生以下输出:Pipeline(memory=None,steps=[('dtypes',DataTypes_Auto_infer(categorical_features=[],display_types=True,features_todrop=[],id_columns=[],ml_usecase='回归',numerical_features=[],target='median_house_value',time_features=[])),('imputer',Simple_Imputer(categorical_strategy='not_available',fill_value_categorical=None,fill_value_numerical=None,numer...('cluster_all','passthrough'),('dummy',Dummify(target='median_house_value')),('fix_perfect',Remove_100(target='median_house_value')),('clean_names',Clean_Colum_Names()),('feature_select','passthrough'),('fix_multi','passthrough'),('dfs','passthrough'),('pca','passthrough'),['trained_model',]],verbose=False)从上面的输出可以看出,PyCaret不仅在流水线的末端保存了训练好的模型,还保存了特征工程和d数据预处理步骤。现在我们在一个文件中有了一个生产就绪的机器学习管道,我们不必担心将管道的各个部分放在一起。模型部署现在我们已经准备好生产就绪模型管道,我们还可以使用deploy_model函数将模型部署到AWS等云平台。如果您计划将模型部署到S3存储桶,则必须在运行此功能之前通过运行以下命令来配置AWS命令??行界面:awsconfigure运行上述代码将触发一系列提示,提示您提供AWS之类的东西秘密访问密钥信息。此过程完成后,可以使用deploy_model函数部署模型。deploy_model(automl_model,model_name='automl-model-aws',platform='aws',authentication={'bucket':'pycaret-ca-housing-model'})在上面的代码中,我将AutoML模型部署到AWS中名为pycaret-ca-housing-model的S3存储桶。从这里,您可以编写一个AWSLambda函数,从S3中提取模型并在云中运行它。PyCaret还允许您使用load_model函数从S3加载模型。PyCaret的另一个不错的功能是MLflow用户界面,它可以使用名为MLfLow的机器学习生命周期工具来记录和跟踪您的机器学习实验。运行以下命令将从本地主机在浏览器中启动MLflow用户界面。!mlflowui>MLFlow仪表板。在上面的仪表板中,我们可以看到MLflow可以跟踪您的PyCaret实验的不同模型的运行情况。您可以查看实验中每次运行的性能指标和经过时间。使用PyCaret的优点和缺点如果您已阅读本书,那么您现在对如何使用PyCaret有了基本的了解。虽然PyCaret是一个很棒的工具,但它有自己的优点和缺点,如果您打算将它用于数据科学项目,您应该了解这一点。优点:低代码库。非常适合简单的标准任务和一般机器学习。为回归、分类、自然语言处理、聚类、异常检测和关联规则挖掘提供支持。使创建和保存复杂的模型转换管道变得容易。使模型性能可视化变得容易。缺点:PyCaret不是文本分类的理想选择,因为到目前为止NLP实用程序仅限于主题建模算法。PyCaret不是深度学习的理想选择,它不使用Keras或PyTorch模型。您无法使用PyCaret(至少在2.2.0版中)执行更复杂的机器学习任务,例如图像分类和文本生成。通过使用PyCaret,您将牺牲对简单和高级代码的一些控制。在本文中,我演示了如何使用PyCaret完成机器学习项目中从数据预处理到模型部署的所有步骤。虽然PyCaret是一个有用的工具,但如果您打算将它用于您的数据科学项目,您应该了解它的优缺点。PyCaret非常适合使用表格数据进行一般机器学习,但从2.2.0版开始,PyCaret不适用于更复杂的自然语言处理、深度学习和计算机视觉任务。但它仍然是一个节省时间的工具,谁知道呢,也许开发人员将来会添加对更复杂任务的支持?如前所述,您可以在GitHub上找到本文的完整代码。https://github.com/AmolMavuduru/PyCaretTutorial原文链接:https://towardsdatascience.com/how-to-use-pycaret-the-library-for-lazy-data-scientists-91343f960bd2