2023年7月9日发(作者:)
低代码机器学习库--Pycaret2.3⽬录PyCaret2.3简介PyCaret是Python中的⼀个开源、低代码机器学习库,旨在减少从数据处理到模型部署的周期时间。PyCaret库只需⼏⾏代码就可以完成从准备数据到部署模型,⽼少皆宜(),⽬前PyCaret版本更新到2.3,⽀持的功能有数据处理,模型训练,参数搜索,模型可解释性,模型选择,实验⽇志查询。PyCaret安装为了避免与其他软件包的潜在冲突,强烈建议使⽤虚拟环境。使⽤隔离环境可以独⽴于任何先前安装的 Python 包安装特定版本的 pycaret及其依赖项。#1.创建新的虚拟环境 #为了直接省事我这⾥直接复制默认的base环境到新的环境"newpy37"中,这样原来该有库都有了。
conda create --name newpy37--clone base
#或者也可以使⽤以下命令
conda create --name newpy37 python=3.7 #新环境会创建后,路径在 D:Anaconda3envsnewpy37下,D:Anaconda3为我的Anaconda3安装路径#2.激活新的虚拟环境
conda activate newpy37
#3.安装pycaret包 #PyCaret 的默认安装是 pycaret 的精简版,我这⾥直接安装完整版:
pip install pycaret[full]
#4.创建连接 conda 新环境new_env 的 notebook 内核
python -m ipykernel install --user --name newpy37 --display-name "new-kernel"打开jupyter lab 后,可以在右上⾓上选择刚创建的“new-kernel”环境,如:PyCaret功能模块加载数据:可使⽤pandas读取数据处理:setup 函数可以进⾏特征预处理,特征衍⽣,特征选择,⾃动创建pipeline等创建模型:近70个机器学习算法,使⽤create_model 函数创建,⽀持模型融合模型分析:提供多种模型可视化分析,通过plot_model函数实现模型验证/预测:通过predict_model 函数不仅可以对hold-out数据集进⾏预测,还可以对未知数据集预测最终模型:finalizemodel 函数训练和测试数据合并重新训练模型,savemodel和load_model函数分别是保存和加载模型及pipeline模型部署:deploy_model,此函数在云上部署转换管道和经过训练的模型。⼀、数据初始化PyCaret通过setup()函数可将原始数据进⾏⼀站式数据采样与划分、数据预处理、转换、特征⼯程等操作,它会根据setup函数中定义的参数创建转换管道(transformation pipeline)。它会⾃动编排管道(pipeline)中的所有依赖项,因此您不必⼿动管理对测试数据集或未知的数据集进⾏转换的顺序执⾏。PyCaret的管道可以轻松地在各种环境之间转移,以实现⼤规模运⾏或轻松部署到⽣产环境中。get_config函数查看的全局变量set_config函数更改的全局变量不同模块中的setup()函数的参数有⼀定差异,除了分类和回归setup()函数参数相差⽆异外,聚类、异常检测、NLP和关联规则挖掘模块的参数相对更少⼀些;⽽这⾥以分类中的setup()展开讨论,主要参数如下。1.设置数据集、标注⽬标值data: ametarget: str2.训练集/测试集划分train_size: float, default = 0.7 #⽤于训练和验证的数据集的⽐例。应介于0.0和1.0之间。test_data:ame, default = None # 如果⼿动传⼊测试数据集,则train_size的参数失效3.数据预处理是否进⾏数据处理,默认truepreprocess: bool, default = True指定特征数据类型categorical_features: list of str, default = Nonenumeric_features: list of str, default = Nonedate_features: list of str, default = Noneignore_features: list of str, default = None #删除指定特征缺失值处理当imputation_type: str, default = 'simple'时categorical_imputation: str, default = 'constant'#默认填充“not_available”值,或设为'mode',填充众数numeric_imputation: str, default = 'mean' # 默认填充平均值,其他参数有'median' or 'zero'.当imputation_type: str, default = 'iterative'时:iterative_imputation_iters: int, default = 5categorical_iterative_imputer: str, default = 'lightgbm'numeric_iterative_imputer: str, default = 'lightgbm'4.类别型特征值处理处理特征中未知分类handle_unknown_categorical: bool, default = Trueunknown_categorical_method: str, default = 'least_frequent' # 其他参数有 'most_frequent'分类特征某个类别分布低于某个阈值,合并该稀有类别combine_rare_levels: bool, default = Falserare_level_threshold: float, default = 0.15.编码转换类别型变量默认都会进⾏one-hot独热编码序列编码ordinal_features: dict, default = None #将分类特征编码为序号,传⼊字典基数编码high_cardinality_features: string, default = None使⽤频率分布作为原始值,可选参数'clustering',使⽤聚类标签替换原始值high_cardinality_method: string, default = 'frequency'6.数据标准化normalize: bool, default = False #默认不启动标准化normalize_method: str, default = 'zscore' # 其他参数有[minmax,maxabs,robust]7.数据转换transformation: bool, default = False #默认不启动转换transformation_method: str, default = 'yeo-johnson' # 其他参数有 'quantile'数值特征分群,底层⽤KMeans聚类后,特征的原始值将替换为簇标签。bin_numeric_features: list of str, default = None8.特征衍⽣多项式特征polynomial_features: bool, default = Falsepolynomial_degree: int, default = 2 #默认是多元⼆次函数三⾓函数特征trigonometry_features: bool, default = Falsepolynomial_threshold: float, default = 0.1特征交互feature_interaction: bool, default = False #可能⽆法在⾼维特性空间中使⽤,特征组合⽅法 a * bfeature_ratio: bool, default = False #可能⽆法在⾼维特性空间中使⽤,特征组合⽅法 a / binteraction_threshold: bool, default = 0.01 #与polynomial_threshold类似,通常将通过组合⽅法新创建特征压缩成稀疏矩阵,根据随机森林,Adaboost的特征重要性和线性相关性低于设置的阈值将保留在数据集中,其余特征被删除聚合特征#当数据集中包含以某种⽅式批次相关的特征时,⽐如,特征以固定的时间间隔记录,就可以从现有特征中创建⼀些统计#指标,⽐如均值,中位数,⽅差和标准差group_features: list or list of list, default = Nonegroup_names: list, default = None #长度必须与group_features的长度⼀致9.特征选择主成分分析pca: bool, default = Falsepca_method: str, default = 'linear'#其他参数【kernel,incremental】pca_components: int or float, default = None # 要保留的组件数低⽅差,异常值删除ignore_low_variance: bool, default = Falseremove_outliers: bool, default = Falseoutliers_threshold: float, default = 0.05消除多重共线性remove_multicollinearity: bool, default = Falsemulticollinearity_threshold: float, default = 0.9随机删除相关性为1的特征remove_perfect_collinearity: bool, default = True⽣成聚类标签,然后标签作为新的特征create_clusters: bool, default = Falsecluster_iter: int, default = 20 #创建群集的迭代次数特征重要性选择feature_selection: bool, default = False ,feature_selection_threshold: float, default = 0.8,较⼤的值将导致较⾼的特征空间feature_selection_method: str, default = 'classic'# 默认使⽤经典的树模型⽅法,其他参数 'boruta'10.样本平衡处理fix_imbalance: bool, default = False,#默认fix_imbalance_method: obj, default = None 默认使⽤'SMOTE'⽅法⼆、模型训练pycaret包含6类共69个算法函数供不同场景需求调⽤:(分类)(回归)(聚类)(异常检测)(⾃然语⾔处理)(关联规则挖掘)1.⽐较模型通常在建模当中,我们并不知道哪个算法表现会⽐较好,这就需要跑⼀遍多个算法作⽐较。pycaret库中的compare_models函数能堪此重任;此函数使⽤默认超参数训练模型库中的所有模型,并使⽤交叉验证(默认10折)评估性能指标。它返回经过训练的模型对象。使⽤的评估指标包括:Classification: Accuracy, AUC, Recall, Precision, F1, Kappa, MCCRegression: MAE, MSE, RMSE, R2, RMSLE, MAPE此函数的输出是⼀个表格,显⽰所有模型在k折交叉中的平均得分。某些模型由于运⾏时间较长⽽⽆法进⾏⽐较。如要全部⽐较,可以将turbo参数设置为False。此函数仅在分类和回归模块中可⽤。常⽤参数如下:include: default = None #需要对⽐的模型,可传⼊上述的算法ID列表,默认全部模型⽐较exclude: list of str, default = None #需要排除的算法模型fold:int default = None #默认是setup函数中设置的fold值sort: str, default = 'Accuracy' ,函数输出指标排序,分类默认'Accuracy' ,回归默认‘R2’n_select:int, default = 1 #要返回的最好模型个数,根据sort指标排序,再选取排在最前⾯的模型数# Importing datasetfrom ts import get_datadiabetes = get_data('diabetes')clf1 = setup(data = credit_data, target = 'default',fold=5,session_id = 123)# 选取AUC最优5个模型best_top5 = compare_models(sort = 'AUC',n_select = 5)AUC值为0.0000,表⽰该模型不⽀持预测概率输出2.创建模型create_model函数可以根据模型库的ID创建模型,该函数使⽤交叉验证(默认是setup函数设置的fold)来训练和评估给定模型的性能,输出是⼀个分数表,其中包含按倍数计算的CV分数。可以使⽤get_Metrics函数访问CV期间评估的指标。可以使⽤add_metric和remove_metric函数添加或删除⾃定义度量。params = {"max_depth": 2, 'n_estimators':800, 'learning_rate':0.05, 'subsample':0.8, 'colsample_bytree':0.8}
lgb = create_model('lightgbm',**params) #默认是setup函数设置的fold3.模型调参tune_model函数⽤于调整给定模型的超参数。该函数的输出是⼀个分数表,其中包含基于优化参数的最佳选择模型的CV分数。常⽤参数设置如下:estimator: scikit-learn compatible object #需要调参的模型fold: int or scikit-learn compatible CV generator, default = None # 交叉验证折数#评估指标custom_scorer: object, default = None #可以通过⾃定义评分策略来调整模型的超参数。它必须使⽤_scorer创建。optimize: str, default = 'Accuracy'# 调参评估指标#⾃定义设置参数搜索空间。包含要迭代的参数名称和值的字典。custom_grid: dictionary, default = None
#可调⽤4个参数搜索库['scikit-learn','scikit-optimize','tune-sklearn','optuna']search_library: str, default = 'scikit-learn'#搜索算法取决于搜索库参数。某些搜索算法需要安装额外的库。如果没有,将使⽤特定于搜索库的默认算法。search_algorithm: str, default = None
#不同搜索库中对应的算法:'scikit-learn'可能值: 'random' : random grid search (default) 'grid' : grid search'scikit-optimize'可能值: 'bayesian' : Bayesian search (default)'tune-sklearn'可能值: 'random' : random grid search (default) 'grid' : grid search 'bayesian' : pip install scikit-optimize 'hyperopt' : pip install hyperopt 'optuna' : pip install optuna 'bohb' : pip install hpbandster ConfigSpace'optuna'可能值: 'random' : randomized search 'tpe' : Tree-structured Parzen Estimator search (default)lgb_tune = tune_model(lgb,optimize = 'AUC', search_library = 'scikit-optimize',search_algorithm = 'bayesian') 4.模型融合
pycaret包中blend_models(),stack_models()可以进⾏模型融合三、模型可视化分析1.性能分析(plot_model)分析经过训练的机器学习模型的性能是任何机器学习⼯作流中不可或缺的⼀步。plot_model函数⽤于分析经过训练的模型在测试集上的性能,有丰富的可视化图表。不⽀持“预测概率”属性的模型不能⽤于“AUC”和“校准”图。当⽬标为多类时,“校准”、“阈值”、“歧管”和“rfe”图不可⽤。当训练模型对象的“max_features”参数不等于训练集中的样本数时,“rfe”图不可⽤。常⽤参数:use_train_data = True 时可以画出训练集相关指标,默认时分析测试集表现plot: str, default = ‘auc’‘auc’ - Area Under the Curve‘threshold’ - Discrimination Threshold‘pr’ - Precision Recall Curve‘confusion_matrix’ - Confusion Matrix‘error’ - Class Prediction Error‘class_report’ - Classification Report‘boundary’ - Decision Boundary‘rfe’ - Recursive Feature Selection‘learning’ - Learning Curve‘manifold’ - Manifold Learning‘calibration’ - Calibration Curve‘vc’ - Validation Curve‘dimension’ - Dimension Learning‘feature’ - Feature Importance‘feature_all’ - Feature Importance (All)‘parameter’ - Model Hyperparameter‘lift’ - Lift Curve‘gain’ - Gain Chart‘tree’ - Decision Tree‘ks’ - KS Statistic Plot2.解释性分析(interpret_model)模型可解释性通过分析模型真正认为重要的内容来帮助调试模型。interpret_model函数中的⼤多数绘图是基于SHAP(SHapley加法解释)实现的。此函数仅在fication和sion模块中可⽤。有关这⽅⾯的更多信息,请参阅绘图类别属性,plot str, default = ‘summary’‘summary’ - Summary Plot using SHAP‘correlation’ - Dependence Plot using SHAP‘reason’ - Force Plot using SHAP‘pdp’ - Partial Dependence Plot‘msa’ - Morris Sensitivity Analysis‘pfi’ - Permutation Feature Importanceinterpret_model(xgboost)interpret_model(xgboost, plot = 'correlation')interpret_model(xgboost, plot = 'reason', observation = 10)3.模型校准(calibrate_model)通常在进⾏分类建模时,不仅要预测类标签,还要获得预测的概率。有的分类器(例如SVM)只能直接打上类别标签没法给出置信度。另⼀⽅⾯,在某些场景中,我们希望得到真实的概率。分数校准主要⽬的:修正实际概率和开发样本中期望概率之间的偏差。保证预测概率与真实概率之间的⼀致性(拟合度)calibrate_model函数使⽤等isotonic or logistic regression算法校准给定模型的概率。此函数的输出是⼀个分数表,其中包含按交叉折数(默认setup函数fold)计算的CV分数。calibrated_dt = calibrate_model(dt)4.阈值优化(optimize_threshold)在分类问题中,false positives 的代价⼏乎不等于 false negatives 的代价。因此,如果您正在优化 Type 1 和 Type 2 错误具有不同影响的业务问题,则可以针对概率阈值优化分类器,以便通过分别定义TP、TN、FP和FN的代价来优化⾃定义损失函数。optimize_threshold函数返回⼀个交互图,其中损失函数(y轴)表⽰为x轴上不同概率阈值的函数。然后显⽰⼀条垂直线来表⽰该特定分类器的概率阈值的最佳值。然后,使⽤优化阈值优化的概率阈值可⽤于预测模型函数中,以使⽤⾃定义概率阈值⽣成标签。⼀般情况下,所有的分类器都被训练成50%的预测阳性类。optimize_threshold(xgboost, true_negative = 1500, false_negative = -5000)四、模型预测到⽬前为⽌,我们看到的结果仅基于训练数据集的k倍交叉验证(默认为70%)。为了查看模型在test / hold-out上的预测和性能,使⽤了predict_model函数,该函数使⽤经过训练的模型预测标签和分数(预测类别的概率)。主要参数:estimator:#训练好的模型data: ame,默认预测setup函数留样数据集的标签和分数,也可以传⼊时间外样本预测(OOT)probability_threshold: float, default = None#将预测概率转换为类别标签的阈值。除⾮在此参数中明确定义,否则所有分类器的默认值均为0.5。raw_score: bool, default = False:#设置为True时,将返回所有标签的分数,我⼀般设置为Trueraw_score = False,返回Score列的值表⽰左侧label列值对应的概率值raw_score = True,将会返回每个标签的预测概率,如以下是⼆分类器,score_0表⽰预测为0的概率,score_1表⽰预测为1的概率五、模型保存/加载1.最终模型在最初使⽤setup进⾏初始化时,默认情况下,数据集分被为两部分,⼀部分是70%训练集,⼀部分是30%测试集,finalize_model函数功能主要是将30%测试集与70%训练集合并后放到已经创建好的模型上再次训练,简单来讲就是扩充样本量再⾛⼀遍Pipeline过程。此函数仅在fication和sion模块中可⽤2.模型保存save_model函数获取⼀个经过训练的模型对象,并将整个转换管道和经过训练的模型对象保存为可转移的⼆进制pickle⽂件,以供以后使⽤。load_model函数⽤于加载以前保存的管道。六、模型部署模型确定后,⼀般都是现将模型保存为或格式⽂件后再上传到本地服务器部署;pycaret还提供了⼀种在云服务商上部署模型,此处有待研究。七、总结Pycaret只需⼏⾏代码就可以完成模型建⽴,且有丰富的可视化模型解释分析图表;简单易⽤,门槛很低;⾮常适合新⼿上路使⽤。虽然setup函数的数据处理功能很全⾯,但是在实际应⽤中,我还是建议⾃⼰先把数据处理⼲净,规范后,再要配合Pycaret使⽤。知乎@地⾖参考链接
发布者:admin,转转请注明出处:http://www.yc00.com/web/1688893335a181755.html
评论列表(0条)