👋 工具系列:PyCaret介绍_回归模型示例
代码链接
https://download.csdn.net/download/wjjc1017/88644469
简介
PyCaret是一个开源的、低代码的Python机器学习库,可以自动化机器学习工作流程。它是一个端到端的机器学习和模型管理工具,可以大幅加快实验周期并提高工作效率。
与其他开源机器学习库相比,PyCaret是一个替代性的低代码库,可以用几行代码代替数百行代码。这使得实验速度指数级增加,效率更高。PyCaret本质上是围绕几个机器学习库和框架(如scikit-learn、XGBoost、LightGBM、CatBoost、spaCy、Optuna、Hyperopt、Ray等)的Python封装。
PyCaret的设计和简洁性受到了Gartner首次使用的公民数据科学家这一新兴角色的启发。公民数据科学家是能够执行简单和中等复杂的分析任务的高级用户,而这些任务以前需要更多的技术专长。
# 检查已安装的版本(必须大于3.0)
import pycaret
pycaret.__version__
'3.0.0'
🚀 快速开始
PyCaret的回归模块是一个监督学习模块,用于估计因变量(通常称为结果变量或目标)与一个或多个自变量(通常称为特征、预测变量或协变量)之间的关系。
回归的目标是预测连续值,例如预测销售额、预测数量、预测温度等。回归模块通过设置函数提供了几种预处理特性,用于对数据进行建模前的预处理。
PyCaret的回归模块具有许多预处理功能,并且附带了超过25个可直接使用的算法和几个绘图工具,用于分析训练模型的性能。
PyCaret回归模块中的典型工作流程按照以下5个步骤进行:
设置 ➡️ 比较模型 ➡️ 分析模型 ➡️ 预测 ➡️ 保存模型
### 从pycaret数据集模块加载示例数据集
from pycaret.datasets import get_data
data = get_data('insurance')
设置
setup
函数用于初始化训练环境并创建转换流水线。在执行 PyCaret 中的任何其他函数之前,必须先调用 setup
函数。它只有两个必需的参数,即 data
和 target
。所有其他参数都是可选的。
# 导入 pycaret 回归模块和初始化设置
from pycaret.regression import *
s = setup(data, target = 'charges', session_id = 123)
一旦设置成功执行,它将显示包含实验级别信息的信息网格。
- 会话ID: 一个伪随机数,作为种子在所有函数中分布,以便以后能够重现。如果没有传递
session_id
,则会自动生成一个随机数,并分发给所有函数。
- 目标类型: 二进制、多类别或回归。目标类型会自动检测。
- 原始数据形状: 在任何转换之前的原始数据形状。
- 转换后的训练集形状: 转换后的训练集形状。
- 转换后的测试集形状: 转换后的测试集形状。
- 数值特征: 被视为数值的特征数量。
- 分类特征: 被视为分类的特征数量。
PyCaret的API
PyCaret有两套API供您使用。 (1) 函数式API(如上所示)和 (2) 面向对象的API。
使用面向对象的API时,您不会直接执行函数,而是导入一个类并执行类的方法。
# 导入RegressionExperiment类并初始化该类
from pycaret.regression import RegressionExperiment
exp = RegressionExperiment()
# 检查exp的类型
type(exp)
pycaret.regression.oop.RegressionExperiment
# 初始化设置实验
exp.setup(data, target='charges', session_id=123)
# 参数说明:
# data:要使用的数据集
# target:目标变量的名称
# session_id:实验的会话ID,用于复现实验结果
<pycaret.regression.oop.RegressionExperiment at 0x1697e9336a0>
您可以使用两种方法,即功能性或面向对象编程,并且可以在两组API之间来回切换。选择的方法不会影响结果,并且已经进行了一致性测试。
比较模型
compare_models
函数使用交叉验证训练和评估模型库中所有可用的估计器的性能。该函数的输出是一个带有平均交叉验证分数的评分表。可以使用 get_metrics
函数访问在交叉验证期间评估的指标。可以使用 add_metric
和 remove_metric
函数添加或删除自定义指标。
# 比较基准模型
# 使用compare_models()函数来比较不同的基准模型,并返回最佳模型
best = compare_models()
Processing: 0%| | 0/85 [00:00<?, ?it/s]
exp.compare_models()
Processing: 0%| | 0/85 [00:00<?, ?it/s]
注意,函数式API和面向对象API之间的输出是一致的。本笔记本中的其余函数将仅使用函数式API显示。
分析模型
plot_model
函数用于分析在测试集上训练模型的性能。在某些情况下,可能需要重新训练模型。
# 导入必要的库
import matplotlib.pyplot as plt
import seaborn as sns
# 绘制模型的残差图
# 参数best是指定的模型
# 参数plot='residuals'表示绘制残差图
plot_model(best, plot='residuals')
# 绘制模型的错误曲线图
# 参数best表示要绘制的模型
# 参数plot='error'表示绘制错误曲线图
plot_model(best, plot='error')
# 绘制特征重要性图
plot_model(model, plot='feature')
# help(plot_model)
evaluate_model
函数是plot_model
函数的替代品。它只能在Notebook中使用,因为它使用了ipywidget
。
evaluate_model(best)
interactive(children=(ToggleButtons(description='Plot Type:', icons=('',), options=(('Pipeline Plot', 'pipelin…
预测
predict_model
函数将 prediction_label
作为新列返回到输入的数据框中。当数据为 None
(默认值)时,它使用在设置函数期间创建的测试集进行评分。
# 预测测试集数据
# 使用之前训练好的模型对测试集数据进行预测
holdout_pred = predict_model(best)
# 展示预测结果的数据框
# 使用head()函数显示数据框的前几行数据,默认显示前5行
holdout_pred.head()
相同的函数可以用于预测未见数据集上的标签。让我们创建原始数据的副本并删除charges
。然后,我们可以使用没有标签的新数据框进行评分。
# 复制数据并删除'charges'列
# 复制原始数据到新的数据框中
new_data = data.copy()
# 在新的数据框中删除'charges'列
# axis=1表示按列删除,inplace=True表示在原数据框上进行修改
new_data.drop('charges', axis=1, inplace=True)
# 打印新的数据框的前几行数据
new_data.head()
# 使用预训练的模型对新数据进行预测
predictions = predict_model(best, data=new_data)
# 显示预测结果的前几行
predictions.head()
保存模型
最后,您可以使用pycaret的save_model
函数将整个流水线保存到磁盘上以供以后使用。
# 保存模型
# 使用save_model函数将最佳模型保存为'my_first_pipeline'文件
save_model(best, 'my_first_pipeline')
Transformation Pipeline and Model Successfully Saved
(Pipeline(memory=FastMemory(location=C:\Users\owner\AppData\Local\Temp\joblib),
steps=[('numerical_imputer',
TransformerWrapper(include=['age', 'bmi', 'children'],
transformer=SimpleImputer())),
('categorical_imputer',
TransformerWrapper(include=['sex', 'smoker', 'region'],
transformer=SimpleImputer(strategy='most_frequent'))),
('ordinal_encoding',
TransformerW...
handle_missing='return_nan',
mapping=[{'col': 'sex',
'mapping': {nan: -1,
'female': 0,
'male': 1}},
{'col': 'smoker',
'mapping': {nan: -1,
'no': 0,
'yes': 1}}]))),
('onehot_encoding',
TransformerWrapper(include=['region'],
transformer=OneHotEncoder(cols=['region'],
handle_missing='return_nan',
use_cat_names=True))),
('trained_model', GradientBoostingRegressor(random_state=123))]),
'my_first_pipeline.pkl')
# 加载模型
loaded_best_pipeline = load_model('my_first_pipeline')
# 执行加载的模型
loaded_best_pipeline
Transformation Pipeline and Model Successfully Loaded
👇 详细的逐个函数概述
✅ 设置
setup
函数在 PyCaret 中初始化实验,并根据传入函数的所有参数创建转换流水线。在执行任何其他函数之前,必须调用 setup
函数。它有两个必需的参数:data
和 target
。所有其他参数都是可选的,用于配置数据预处理流水线。
# 使用setup函数对数据进行预处理和设置
# 参数data表示要处理的数据
# 参数target表示目标变量的名称,即要预测的变量
# 参数session_id表示设置的会话ID,用于重现结果
s = setup(data, target='charges', session_id=123)
要访问由设置函数创建的所有变量,例如转换后的数据集、随机状态等,您可以使用get_config
方法。
# 获取所有可用的配置信息
get_config()
{'USI',
'X',
'X_test',
'X_test_transformed',
'X_train',
'X_train_transformed',
'X_transformed',
'_available_plots',
'_ml_usecase',
'data',
'dataset',
'dataset_transformed',
'exp_id',
'exp_name_log',
'fold_generator',
'fold_groups_param',
'fold_shuffle_param',
'gpu_n_jobs_param',
'gpu_param',
'html_param',
'idx',
'is_multiclass',
'log_plots_param',
'logging_param',
'memory',
'n_jobs_param',
'pipeline',
'seed',
'target_param',
'test',
'test_transformed',
'train',
'train_transformed',
'transform_target_param',
'variable_and_property_keys',
'variables',
'y',
'y_test',
'y_test_transformed',
'y_train',
'y_train_transformed',
'y_transformed'}
# 获取配置文件中的X_train_transformed数据
get_config('X_train_transformed')
# 打印当前的种子值
print("当前的种子值为: {}".format(get_config('seed')))
# 使用set_config函数来改变种子值
set_config('seed', 786)
# 打印新的种子值
print("新的种子值为: {}".format(get_config('seed')))
The current seed is: 123
The new seed is: 786
预处理配置和实验设置/参数都传递给setup
函数。要查看所有可用参数,请检查docstring:
# help(setup)
# 初始化设置,使用normalize = True
s = setup(data, target = 'charges', session_id = 123,
normalize = True, normalize_method = 'minmax')
# 获取X_train_transformed的配置信息
config = get_config('X_train_transformed')
# 获取age列的数据
age_data = config['age']
# 绘制age列的直方图
age_data.hist()
<AxesSubplot:>
注意,所有的值都在0和1之间 - 这是因为我们在setup
函数中传递了normalize=True
。如果你不记得它与实际数据的比较方式,没问题 - 我们也可以使用get_config
来访问非转换的值,然后进行比较。请参见下面的内容,并注意x轴上的值范围,并将其与上面的直方图进行比较。
# 获取配置文件中的训练数据集X_train的年龄列
age_column = get_config('X_train')['age']
# 绘制年龄列的直方图
age_column.hist()
<AxesSubplot:>
✅ 比较模型
compare_models
函数使用交叉验证训练和评估模型库中所有可用的估计器的性能。该函数的输出是一个带有平均交叉验证分数的评分网格。可以使用 get_metrics
函数访问 CV 期间评估的指标。可以使用 add_metric
和 remove_metric
函数添加或删除自定义指标。
# 调用compare_models()函数,返回最佳模型
best = compare_models()
Processing: 0%| | 0/85 [00:00<?, ?it/s]
compare_models
默认使用模型库中的所有估计器(除了Turbo=False
的模型)。要查看所有可用的模型,您可以使用函数models()
。
# 调用函数来检查可用的模型
models()
您可以在compare_models
中使用include
和exclude
参数,只训练选择的模型或通过在exclude
参数中传递模型id来排除特定模型的训练。
# 使用compare_models函数比较不同的决策树模型
# include参数指定要比较的模型,这里包括决策树(dt)、随机森林(rf)、极端随机树(et)、梯度提升树(gbr)、XGBoost(xgboost)、LightGBM(lightgbm)和CatBoost(catboost)模型
compare_tree_models = compare_models(include=['dt', 'rf', 'et', 'gbr', 'xgboost', 'lightgbm', 'catboost'])
Processing: 0%| | 0/33 [00:00<?, ?it/s]
compare_tree_models
功能上面的函数返回训练好的模型对象作为输出。评分网格只显示,不返回。如果您需要访问评分网格,可以使用pull
函数访问数据框。
# 从数据源中获取比较树模型的结果数据
compare_tree_models_results = pull()
compare_tree_models_results
默认情况下,compare_models
函数返回基于sort
参数中定义的指标的最佳性能模型。让我们修改我们的代码,返回基于MAE
的前3个最佳模型。
# 比较模型的平均绝对误差(MAE)并选择前三个最佳模型
best_mae_models_top3 = compare_models(sort='MAE', n_select=3)
Processing: 0%| | 0/87 [00:00<?, ?it/s]
# 定义一个变量best_mae_models_top3,用于存储最佳的三个模型的列表
best_mae_models_top3
[GradientBoostingRegressor(random_state=123),
RandomForestRegressor(n_jobs=-1, random_state=123),
ExtraTreesRegressor(n_jobs=-1, random_state=123)]
一些在compare_models
中可能非常有用的其他参数有:
- fold
- cross_validation
- budget_time
- errors
- probability_threshold
- parallel
您可以查看函数的文档字符串以获取更多信息。
# help(compare_models)
✅ 实验日志记录
PyCaret与许多不同类型的实验记录器集成(默认为’mlflow’)。要在PyCaret中启用实验跟踪,您可以设置log_experiment
和experiment_name
参数。它将根据定义的记录器自动跟踪所有指标、超参数和工件。
# 导入所需的库
from pycaret.regression import *
# 设置数据集和目标变量
s = setup(data, target='charges', log_experiment='mlflow', experiment_name='insurance_experiment')
# pycaret.regression模块是一个用于回归问题的Python库
# 通过导入该库,我们可以使用其中的函数和方法来进行回归分析
# setup函数用于设置数据集和目标变量
# data参数是指要使用的数据集
# target参数是指要预测的目标变量
# log_experiment参数是指是否将实验日志记录到mlflow中
# experiment_name参数是指实验的名称,用于在mlflow中标识实验
# 通过执行以上代码,我们完成了对数据集和目标变量的设置,并将实验日志记录到了mlflow中,实验名称为"insurance_experiment"。
# 比较模型
# best = compare_models()
# start mlflow server on localhost:5000
# !mlflow ui
默认情况下,PyCaret使用MLFlow
记录器,可以使用log_experiment
参数进行更改。以下记录器可用:
- mlflow
- wandb
- comet_ml
- dagshub
您可能会发现有用的其他与日志记录相关的参数有:
- experiment_custom_tags
- log_plots
- log_data
- log_profile
有关更多信息,请查看setup
函数的文档字符串。
# help(setup)
✅ 创建模型
create_model
函数使用交叉验证训练和评估给定估计器的性能。该函数的输出是一个包含每个折叠的交叉验证分数的评分网格。可以使用 get_metrics
函数访问在交叉验证期间评估的指标。可以使用 add_metric
和 remove_metric
函数添加或删除自定义指标。可以使用 models
函数访问所有可用的模型。
# 检查所有可用的模型
models()
# 导入必要的库
from pycaret.regression import create_model
# 使用默认的折叠数(fold=10)训练线性回归模型
lr = create_model('lr')
Processing: 0%| | 0/4 [00:00<?, ?it/s]
功能上面的函数返回训练好的模型对象作为输出。评分表格只显示,不返回。如果您需要访问评分表格,可以使用pull
函数访问数据框。
# 从pull()函数中获取lr_results变量的值
lr_results = pull()
# 打印lr_results的数据类型
print(type(lr_results))
# 打印lr_results的值
print(lr_results)
<class 'pandas.core.frame.DataFrame'>
# 创建一个线性回归模型,使用3折交叉验证进行训练
lr = create_model('lr', fold=3)
Processing: 0%| | 0/4 [00:00<?, ?it/s]
# 定义一个函数create_model,用于训练线性回归模型,并设置特定的模型参数
# 参数说明:
# - 'lr':表示使用线性回归模型
# - fit_intercept = False:表示不使用截距项
create_model('lr', fit_intercept = False)
Processing: 0%| | 0/4 [00:00<?, ?it/s]
# 定义函数create_model,用于训练逻辑回归模型,并返回训练得分和交叉验证得分
create_model('lr', return_train_score=True)
Processing: 0%| | 0/4 [00:00<?, ?it/s]
一些在create_model
中可能非常有用的其他参数有:
- cross_validation
- engine
- fit_kwargs
- groups
您可以查看函数的文档字符串以获取更多信息。
# help(create_model)
✅ 调整模型
调整模型
函数用于调整模型的超参数。该函数的输出是一个通过交叉验证得到的得分网格。根据optimize
参数中定义的指标选择最佳模型。可以使用get_metrics
函数来访问交叉验证期间评估的指标。可以使用add_metric
和remove_metric
函数添加或删除自定义指标。
# 使用默认参数创建一个决策树模型
dt = create_model('dt')
Processing: 0%| | 0/4 [00:00<?, ?it/s]
# 调整决策树模型的超参数
# 使用tune_model函数对决策树模型(dt)进行超参数调整,并将调整后的模型保存在tuned_dt中。
tuned_dt = tune_model(dt)
Processing: 0%| | 0/7 [00:00<?, ?it/s]
Fitting 10 folds for each of 10 candidates, totalling 100 fits
可以在 optimize
参数中定义要优化的度量标准(默认为’Accuracy’)。此外,还可以使用 custom_grid
参数传递自定义调整的网格。
dt
# 定义调参网格
dt_grid = {'max_depth' : [None, 2, 4, 6, 8, 10, 12]}
# 使用自定义网格和评估指标为 MAE 对模型进行调参
tuned_dt = tune_model(dt, custom_grid = dt_grid, optimize = 'MAE')
Processing: 0%| | 0/7 [00:00<?, ?it/s]
Fitting 10 folds for each of 7 candidates, totalling 70 fits
# 使用 tune_model 函数对决策树模型进行调参
# 设置 return_tuner = True 可以访问调参器对象
tuned_dt, tuner = tune_model(dt, return_tuner=True)
Processing: 0%| | 0/7 [00:00<?, ?it/s]
Fitting 10 folds for each of 10 candidates, totalling 100 fits
tuned_dt
# 创建一个调参器对象
tuner
默认的搜索算法是sklearn
中的RandomizedSearchCV
。可以通过使用search_library
和search_algorithm
参数来进行更改。
# 使用Optuna库来调整决策树模型(dt)
# 调整后的模型保存在tuned_dt中
tuned_dt = tune_model(dt, search_library='optuna')
Processing: 0%| | 0/7 [00:00<?, ?it/s]
[32m[I 2023-02-15 14:21:58,040][0m Searching the best hyperparameters using 936 samples...[0m
[32m[I 2023-02-15 14:22:16,050][0m Finished hyperparemeter search![0m
有关所有可用的search_library
和search_algorithm
的更多详细信息,请查看docstring。在tune_model
中,您可能会发现一些其他非常有用的参数:
- choose_better
- n_iter
- early_stopping
- groups
您可以查看函数的docstring以获取更多信息。
# help(tune_model)
✅ 集成模型
ensemble_model
函数用于集成给定的估计器。该函数的输出是一个包含按折叠计算的CV分数的评分网格。可以使用get_metrics
函数访问CV期间评估的指标。可以使用add_metric
和remove_metric
函数添加或删除自定义指标。
# 使用Bagging方法对决策树模型dt进行集成
ensemble_model(dt, method='Bagging')
Processing: 0%| | 0/6 [00:00<?, ?it/s]
# 调用ensemble_model函数,传入决策树模型dt和方法参数为'Boosting'
ensemble_model(dt, method = 'Boosting')
Processing: 0%| | 0/6 [00:00<?, ?it/s]
一些在ensemble_model
中可能非常有用的其他参数包括:
- choose_better
- n_estimators
- groups
- fit_kwargs
- return_train_score
您可以查看函数的文档字符串以获取更多信息。
ensemble_model
✅ 混合模型
blend_models
函数用于训练一个VotingRegressor
,该函数会选择在estimator_list
参数中传递的模型。该函数的输出是一个包含每个折叠的CV得分的评分网格。可以使用get_metrics
函数访问CV期间评估的指标。可以使用add_metric
和remove_metric
函数添加或删除自定义指标。
# top 3 models based on mae
# 基于平均绝对误差(mae)的前三个模型
best_mae_models_top3
[GradientBoostingRegressor(random_state=123),
RandomForestRegressor(n_jobs=-1, random_state=123),
ExtraTreesRegressor(n_jobs=-1, random_state=123)]
# blend_models函数用于将最佳的三个模型进行融合
blend_models(best_mae_models_top3)
Processing: 0%| | 0/6 [00:00<?, ?it/s]
一些在blend_models
中可能非常有用的其他参数包括:
- choose_better
- weights
- optimize
- fit_kwargs
- return_train_score
您可以查看函数的文档字符串以获取更多信息。
# help(blend_models)
✅ 堆叠模型
stack_models
函数在estimator_list参数中传入的选择的估计器上训练一个元模型。该函数的输出是一个包含每个折叠的CV分数的评分网格。可以使用get_metrics
函数访问CV期间评估的指标。可以使用add_metric
和remove_metric
函数添加或删除自定义指标。
# 将模型堆叠起来
# 使用 best_mae_models_top3 列表中的模型进行堆叠
stack_models(best_mae_models_top3)
Processing: 0%| | 0/6 [00:00<?, ?it/s]
任务:请翻译以下markdown为中文,请保留markdown的格式,并输出翻译结果。
语料:
一些在stack_models
中可能非常有用的其他参数包括:
- choose_better
- meta_model
- restack
- optimize
- return_train_score
您可以查看函数的文档字符串以获取更多信息。
# help(stack_models)
✅ 绘制模型
任务:请翻译以下markdown为中文,请保留markdown的格式,并输出翻译结果。
语料:
plot_model
函数分析在留出集上训练模型的性能。在某些情况下,它可能需要重新训练模型。
# 绘制模型的残差图
# 参数best是训练好的模型
# 参数plot='residuals'表示绘制残差图
plot_model(best, plot='residuals')
# 绘制模型的残差图
# 参数best表示要绘制的模型
# 参数plot表示要绘制的图形类型,这里选择绘制残差图
# 参数scale表示绘制图形的缩放比例,这里选择缩放比例为2
plot_model(best, plot='residuals', scale=2)
# 使用plot_model函数绘制模型的残差图并保存
# 参数best表示要绘制的模型
# 参数plot='residuals'表示绘制残差图
# 参数save=True表示保存绘制的图像
plot_model(best, plot='residuals', save=True)
'Residuals.png'
一些在plot_model
中可能非常有用的其他参数包括:
- fit_kwargs
- plot_kwargs
- groups
- display_format
您可以查看函数的文档字符串以获取更多信息。
# help(plot_model)
✅ 解释模型
interpret_model
函数分析训练模型生成的预测结果。该函数中的大多数图表是基于SHAP(Shapley Additive exPlanations)实现的。有关更多信息,请参阅https://shap.readthedocs.io/en/latest/。
# 创建lightgbm模型
lightgbm = lgb.LGBMModel()
Processing: 0%| | 0/4 [00:00<?, ?it/s]
# 使用interpret_model函数对模型进行解释
# 参数lightgbm表示使用的模型是lightgbm模型
# 参数plot表示是否绘制解释结果的可视化图表,默认为'summary'
# 如果设置为'summary',则会绘制模型的摘要图表
interpret_model(lightgbm, plot='summary')
# 使用LightGBM模型解释测试集观测1的原因图
interpret_model(lightgbm, plot='reason', observation=1)
一些在interpret_model
中可能非常有用的其他参数包括:
- plot
- feature
- use_train_data
- X_new_sample
- y_new_sample
- save
您可以查看函数的文档字符串以获取更多信息。
# help(interpret_model)
✅ 获取排行榜
该函数返回当前设置中所有训练模型的排行榜。
# 获取排行榜
lb = get_leaderboard() # 调用get_leaderboard函数获取排行榜数据
lb
Processing: 0%| | 0/67 [00:00<?, ?it/s]
# 根据 MAE(平均绝对误差)选择最佳模型
# 使用 sort_values 方法对 DataFrame lb 按照 'MAE' 列进行升序排序
# 使用 ascending=True 参数表示升序排序
# 使用 ['Model'] 选择 'Model' 列
# 使用 iloc[0] 选择排序后的第一个元素,即最佳模型的名称
lb.sort_values(by='MAE', ascending=True)['Model'].iloc[0]
一些你可能会在 get_leaderboard
中找到非常有用的其他参数有:
- finalize_models
- fit_kwargs
- model_only
- groups
你可以查看函数的文档字符串以获取更多信息。
# help(get_leaderboard)
✅ AutoML
该函数根据优化参数从当前设置的所有训练模型中返回最佳模型。可以使用get_metrics
函数访问评估的指标。
# 使用automl函数来寻找基于交叉验证指标的最佳模型
automl()
✅ 仪表盘
仪表盘功能用于为训练模型生成交互式仪表盘。该仪表盘是使用ExplainerDashboard
实现的。更多信息请查看Explainer Dashboard.
# 定义一个名为dashboard的函数
# 参数dt:表示数据表格
# 参数display_format:表示显示格式,默认为'inline',即内联显示
# 函数主体部分,未给出具体代码实现
# 可根据具体需求编写代码来实现数据仪表盘的功能
dashboard(dt, display_format ='inline')
Generating self.shap_explainer = shap.TreeExplainer(model)
Building ExplainerDashboard..
The explainer object has no decision_trees property. so setting decision_trees=False...
Warning: calculating shap interaction values can be slow! Pass shap_interaction=False to remove interactions tab.
Generating layout...
Calculating shap values...
Calculating predictions...
Calculating residuals...
Calculating absolute residuals...
Calculating shap interaction values...
Reminder: TreeShap computational complexity is O(TLD^2), where T is the number of trees, L is the maximum number of leaves in any tree and D the maximal depth of any tree. So reducing these will speed up the calculation.
Calculating dependencies...
Calculating importances...
Reminder: you can store the explainer (including calculated dependencies) with explainer.dump('explainer.joblib') and reload with e.g. ClassifierExplainer.from_file('explainer.joblib')
Registering callbacks...
Starting ExplainerDashboard inline (terminate it with ExplainerDashboard.terminate(8050))
✅创建应用程序
此函数用于创建一个基本的gradio应用程序进行推理。
# 创建一个Gradio应用
# 参数:
# - best: 一个变量,表示最佳模型
create_app(best) # 调用create_app函数,并传入best作为参数
Running on local URL: http://127.0.0.1:7860
To create a public link, set `share=True` in `launch()`.
✅ 创建API
这个函数接受一个输入模型,并创建一个用于推理的POST API。
# 创建API函数
# 参数:
# - best: 最佳模型
# - api_name: API的名称,默认为'my_first_api'
create_api(best, api_name='my_first_api')
API successfully created. This function only creates a POST API, it doesn't run it automatically. To run your API, please run this command --> !python my_first_api.py
# !python my_first_api.py
# %load my_first_api.py
✅ 创建Docker
该函数用于创建用于将API端点投入生产的Dockerfile
和requirements.txt
文件。
create_docker('my_first_api')
Writing requirements.txt
Writing Dockerfile
Dockerfile and requirements.txt successfully created.
To build image you have to run --> !docker image build -f "Dockerfile" -t IMAGE_NAME:IMAGE_TAG .
# 检查使用这个神奇命令创建的DockerFile文件
# %load DockerFile
# 检查使用魔术命令创建的requirements文件
# %load requirements.txt
✅ 完善模型
该函数在整个数据集上训练给定的模型,包括留出集。
# 将模型进行最终优化
final_best = finalize_model(best)
final_best
✅ 转换模型
该函数将训练好的机器学习模型的决策函数转换为不同的编程语言,如Python、C、Java、Go、C#等。如果您想要将模型部署到无法安装常规Python堆栈以支持模型推断的环境中,这将非常有用。
# 将学习到的函数转换为Java代码
# 调用convert_model函数,将决策树模型(dt)转换为Java代码
# 设置language参数为'java',表示转换为Java语言的代码
# 打印输出转换后的Java代码
print(convert_model(dt, language = 'java'))
public class Model {
public static double score(double[] input) {
double var0;
if (input[4] <= 0.5) {
if (input[0] <= 0.554347813129425) {
if (input[3] <= 0.10000000149011612) {
if (input[0] <= 0.31521739065647125) {
if (input[0] <= 0.09782608598470688) {
if (input[2] <= 0.39116452634334564) {
if (input[0] <= 0.0326086962595582) {
if (input[1] <= 0.5) {
if (input[5] <= 0.5) {
if (input[8] <= 0.5) {
if (input[0] <= 0.010869565419852734) {
if (input[2] <= 0.19418424367904663) {
var0 = 1607.5101318359375;
} else {
var0 = 1615.7667236328125;
}
} else {
if (input[2] <= 0.16314832866191864) {
if (input[2] <= 0.07786941900849342) {
if (input[2] <= 0.03872498869895935) {
var0 = 1727.7850341796875;
} else {
var0 = 1728.89697265625;
}
} else {
var0 = 13470.8603515625;
}
}
} else {
if (input[0] <= 0.945652186870575) {
if (input[5] <= 0.5) {
if (input[8] <= 0.5) {
if (input[7] <= 0.5) {
var0 = 12574.048828125;
} else {
var0 = 12557.60546875;
}
} else {
var0 = 12950.0712890625;
}
} else {
var0 = 13143.3369140625;
}
} else {
if (input[5] <= 0.5) {
if (input[8] <= 0.5) {
if (input[6] <= 0.5) {
var0 = 12981.345703125;
} else {
var0 = 12957.1181640625;
}
} else {
var0 = 13352.099609375;
}
} else {
var0 = 13555.0048828125;
}
}
}
}
✅ 部署模型
该函数将整个机器学习流程部署到云端。
AWS: 在AWS S3上部署模型时,必须使用命令行界面配置环境变量。要配置AWS环境变量,请在终端中输入aws configure
命令。以下信息是必需的,可以使用您的Amazon控制台帐户的身份和访问管理(IAM)门户生成:
- AWS访问密钥ID
- AWS秘密密钥访问
- 默认区域名称(可以在AWS控制台的全局设置下看到)
- 默认输出格式(必须留空)
GCP: 要在Google Cloud Platform(‘gcp’)上部署模型,必须使用命令行或GCP控制台创建项目。创建项目后,您必须创建一个服务帐号,并将服务帐号密钥下载为JSON文件,以在本地环境中设置环境变量。了解更多信息:https://cloud.google.com/docs/authentication/production
Azure: 要在Microsoft Azure(‘azure’)上部署模型,必须在本地环境中设置用于连接字符串的环境变量。转到Azure门户上的存储帐户设置以访问所需的连接字符串。
AZURE_STORAGE_CONNECTION_STRING(作为环境变量必需)
了解更多信息:https://docs.microsoft.com/en-us/azure/storage/blobs/storage-quickstart-blobs-python?toc=%2Fpython%2Fazure%2FTOC.json
# 部署模型到AWS S3
# deploy_model(best, model_name = 'my_first_platform_on_aws',
# platform = 'aws', authentication = {'bucket' : 'pycaret-test'})
# 从AWS S3加载模型
# 从AWS S3加载模型的代码被注释掉了,可能是因为没有提供完整的代码或者没有提供访问AWS S3的权限。
# 加载模型
loaded_from_aws = load_model(model_name='my_first_platform_on_aws', platform='aws',
authentication={'bucket': 'pycaret-test'})
# loaded_from_aws是从AWS S3加载的模型
✅ 保存/加载模型
这个函数将转换流水线和训练好的模型对象保存为pickle文件,以便以后使用。
# 保存模型
# 使用save_model函数将最佳模型保存为'my_first_model'文件
save_model(best, 'my_first_model')
Transformation Pipeline and Model Successfully Saved
(Pipeline(memory=FastMemory(location=C:\Users\owner\AppData\Local\Temp\joblib),
steps=[('numerical_imputer',
TransformerWrapper(include=['age', 'bmi', 'children'],
transformer=SimpleImputer())),
('categorical_imputer',
TransformerWrapper(include=['sex', 'smoker', 'region'],
transformer=SimpleImputer(strategy='most_frequent'))),
('ordinal_encoding',
TransformerW...
'female': 0,
'male': 1}},
{'col': 'smoker',
'mapping': {nan: -1,
'no': 0,
'yes': 1}}]))),
('onehot_encoding',
TransformerWrapper(include=['region'],
transformer=OneHotEncoder(cols=['region'],
handle_missing='return_nan',
use_cat_names=True))),
('normalize', TransformerWrapper(transformer=MinMaxScaler())),
('trained_model', GradientBoostingRegressor(random_state=123))]),
'my_first_model.pkl')
# 加载模型
loaded_from_disk = load_model('my_first_model') # 从磁盘上加载名为'my_first_model'的模型文件,并将其赋值给变量loaded_from_disk
loaded_from_disk # 打印加载的模型
Transformation Pipeline and Model Successfully Loaded
✅ 保存/加载实验
该函数将实验中的所有变量保存到磁盘上,以便以后恢复而无需重新运行设置函数。
# 保存实验
save_experiment('my_experiment')
# 从磁盘加载实验数据
exp_from_disk = load_experiment('my_experiment', data=data)