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

几行代码完成ML模型,低代码机器学习Python库正式开源

时间:2023-03-14 20:22:45 科技观察

PyCaret库支持在“低代码”环境下训练和部署有监督和无监督机器学习模型,提高机器学习实验的效率。想要提高机器学习实验的效率,更专注于解决业务问题而不是写代码?低代码平台可能是一个不错的选择。近日,机器之心发现了一个开源的低代码机器学习Python库PyCaret,它支持在“低代码”环境下训练和部署有监督和无监督的机器学习模型。GitHub地址:https://github.com/pycaret/pycaret用户文档:https://www.pycaret.org/guideNotebook教程:https://www.pycaret.org/tutorialPyCaret库支持数据科学家快速执行和高效的端到端实验,相较于其他开源机器学习库,PyCaret库仅需几行代码即可完成复杂的机器学习任务。该库适合经验丰富的数据科学家、倾向于低代码机器学习解决方案的公民数据科学家,以及很少或没有编程背景的新手。PyCaret库支持多种笔记本环境,包括JupyterNotebook、AzureNotebook和GoogleColab。从本质上讲,PyCaret是一个Python包装器,封装了多个机器学习库和框架,如sci-kit-learn、XGBoost、MicrosoftLightGBM、spaCy等。机器学习实验中的所有步骤都可以使用PyCaret自动开发的管道进行复现.在Pycaret中执行的所有操作都按顺序存储在一个管道中,该管道已完全配置用于模型部署。无论是填充缺失值、转换分类数据、执行特征工程还是调整参数,Pycaret都可以自动完成。此外,管道可以以二进制文件格式保存,支持不同环境的迁移。PyCaret包含一系列功能,用户可以通过这些功能完成机器学习实验。PyCaret库的功能可以分为以下五类,涵盖初始化、模型训练、集成、分析和部署:此外,PyCaret提供了6个模块,支持监督和非监督模型的训练和部署,即分类、回归、聚类、异常检测、自然语言处理和关联规则挖掘。每个模块都封装了特定的机器学习算法和函数,可供不同的模块使用。用户可以根据实验类型将模块导入到环境中。PyCaret库提供的六个模块。接下来我们就来看看如何安装和使用PyCaret库。启动PyCaret使用pip安装PyCaret。使用命令行界面或notebook环境,运行以下代码安装:pipinstallpycaretAzurenotebook和GoogleColab用户,可以运行以下代码安装:!pipinstallpycaret在安装PyCaret时,会自动安装所有依赖项。过程非常简单,如下图所示:PyCaretStep-by-StepTutorialDataAcquisition本教程使用“糖尿病”数据集,目标是根据各种因素预测患者的预后(1或0),例如血压、胰岛素水平和年龄。数据集可以在PyCaret的GitHub地址找到。直接从PyCaret库导入数据集的最简单方法是使用pycaret.datasets模块中的get_data函数。from*pycaret.datasets*import*get_data*diabetes=*get_data*('diabetes')get_data的输出。PyCaret可以直接与Pandas数据框一起使用。环境配置在PyCaret中执行任何机器学习实验的第一步是通过导入所需的模块和初始化setup()来设置环境。下面示例中使用的模块是pycaret.classification。导入模块后,setup()将通过定义数据结构“diabetes”和目标变量“类变量”来初始化。from*pycaret.classification*import***exp1=*setup*(diabetes,target='Classvariable')所有预处理步骤都会应用到setup(),PyCaret有20多个函数可以应用到ML相关数据准备工作,比如根据setup函数中定义的参数创建Transformationpipeline,同时自动协调Pipeline中的所有依赖和依赖。这样,面对测试或看不见的数据集,用户不再需要手动管理或调整执行顺序。PyCaret的Pipeline可以很容易地在环境之间迁移,例如大规模运行或轻松部署到生产环境中。下图显示了PyCaret首次发布时可用的预处理功能:PyCaret的预处理功能。数据预处理是机器学习的必要步骤,如缺失值填充、分类变量编码、标签编码(将yes或no转换为1或0)以及初始化setup()时的train-test-split。模型比较这是监督机器学习实验(分类或回归模块)应该进行的第一步。compare_models函数训练模型库中的所有模型,并使用k折交叉验证(默认k=10)来比较常见的评估指标。使用的评估指标如下:分类模块:Accuracy、AUC、Recall、Precision、F1和Kappa;回归模块:MAE、MSE、RMSE、R2、RMSLE和MAPE。*compare_models*()compare_models()函数的输出。Compare_models()函数的Output默认使用10折交叉验证来评估指标,可以通过改变fold参数的值来改变评估结果。默认使用精度值(从高到低)对表进行分类,也可以通过改变排序参数值来改变分类结果。模型创建在PyCaret的任何模块中,创建模型就像编写仅接受一个参数的create_model一样简单,模型名称作为字符串输入传递。此函数返回一个包含k折交叉验证分数和训练模型对象的表。adaboost=*create_model*('adaboost')变量“adaboost”存储由*create_model*函数返回的训练模型对象,它是一个scikit-learn估计器。可以通过在变量后使用标点符号(.)来访问训练对象的原始属性。请参见以下示例:经过训练的模型对象的属性。PyCaret拥有60多种开源即用型算法。模型调整tune_model函数用于自动调整机器学习模型的超参数。PyCaret在预定义的搜索空间上使用随机网格搜索。此函数返回一个包含k折交叉验证分数和训练模型对象的表。tuned_adaboost=tune_model('ada')pycaret.nlp、pycaret.clustering和pycaret.anomaly等非监督模块中的tune_model函数可以与监督模块结合使用。例如,PyCaret的NLP模块可用于通过评估受监督的ML模型中的目标函数或损失函数来调整准确性或R2等指标。模型集成ensemble_model函数用于集成经过训练的模型。它只需要一个参数,即训练好的模型对象。此函数返回一个包含k折交叉验证分数和训练模型对象的表。#creatingadecisiontreemodeldt=*create_model*('dt')#ensemblingatraineddtmodeldt_bagged=*ensemble_model*(dt)本库默认使用Bagging方法进行模型集成,用户也可以使用ensemble_model函数中的method参数将其转换为Boosting。PyCaret还提供了blend_models和stack_models函数来集成多个训练好的模型。模型绘制可以通过plot_model函数对训练好的机器学习模型进行性能评估和诊断,具体来说,在plot_model函数中将训练模型对象和绘图类型作为字符串输入(stringinput)。#createamodeladaboost=*create_model*('ada')#AUCplot*plot_model*(adaboost,plot='auc')#DecisionBoundary*plot_model*(adaboost,plot='boundary')#PrecisionRecallCurve*plot_model*(adaboost,plot='pr')#ValidationCurve*plot_model*(adaboost,plot='vc')此外,用户还可以使用evaluate_model函数在notebook的用户界面上查看可视化图。*evaluate_model*(adaboost)pycaret.nlp模块中的plot_model函数可用于可视化文本语料库和语义主题模型。实践中经常出现的情况是,模型解释了数据中的非线性关系。人们总是看到基于树的模型比简单的高斯模型表现得更好。但这是以可解释性为代价的,因为基于树的模型不能像线性模型那样提供简单的系数。PyCaret通过interpret_model函数实现SHAP(SHapleyAdditiveexPlanations)。#createamodelxgboost=*create_model*('xgboost')#summaryplot*interpret_model*(xgboost)#correlationplot*interpret_model*(xgboost,plot='correlation')测试数据集上具体数据点的解释可以通过“原因”情节。下图:检查测试数据集上的第一个实例。*interpret_model*(xgboost,plot='reason',observation=0)模型预测目前看到的结果仅基于训练数据集上的k折交叉验证(默认70%)。所以为了得到模型在测试或hold-out数据集上的预测结果和性能,用户可以使用predict_model函数。如下:#createamodelrf=*create_model*('rf')#predicttest/hold-outdatasetrf_holdout_pred*=predict_model*(rf)predict_model函数也可以用来预测看不见的数据集。现在,使用用于训练的数据集作为新的未见数据集的代理。在实践中,predict_model函数被迭代使用,每次使用一个新的看不见的数据集。predictions=*predict_model*(rf,data=diabetes)另外,对于使用stack_models和create_stacknet函数创建的模型,predict_model函数可以预测它们的序列链。不仅如此,在deploy_model函数的帮助下,predict_model函数还可以直接根据托管在AWSS3上的模型进行预测。模型部署我们可以让经过训练的模型在训练模型的同一笔记本或IDE中使用predict_model函数对看不见的数据集生成预测。然而,对看不见的数据集进行预测是一个迭代过程。其中,根据不同的用例,预测可以分为实时预测和批量预测。PyCaret的deploy_model函数允许部署整个管道,包括在云端训练的模型。*deploy_model*(model=rf,model_name='rf_aws',platform='aws',authentication={'bucket':'pycaret-test'})训练完成后保存模型/实验,包括所有预处理转换和训练好的模型包括对象在内的整个管道可以保存为二进制pickle文件格式。#creatingmodeladaboost=*create_model*('ada')#savingmodel*save_model*(adaboost,model_name='ada_for_deployment')用户还可以将整个实验保存为二进制文件格式,包括所有中间输出(intermediaryoutput)。*save_experiment*(experiment_name='my_first_experiment')最后,通过PyCaret所有模块都提供的load_model和load_experiment函数,用户还可以下载保存的模型和实验。