数据集的定义和意义
测试集是独立的,模型训练完成之后,最终的期末考试,所以数据是保密的。
训练集和验证集是主要的模型训练中使用的数据集。一般(训练集+验证集):测试集=8:2或9:1.
训练集:验证集=8:2或9:1,具体比例,可以根据数据的多少灵活调整,以获得最佳模型用于预测。
常用的函数功能说明:此处是以回归模型为例
1. setup()
初始化一个数据,
from pycaret.regression import *
s = setup(data,target =phe,train_size=0.95,session_id=115)
data是一个数据框,行是样本,列是性状,target指定要预测的性状的列名。train_size指定训练的数据集占比。
2. create_model()
创建一个模型,
例如rf=create_model("rf")
,创建一个随即森林模型。
lightgbm=create_model("lightgbm")
创建一个lightgbm模型
3. compare_models()
比较模型
用法1:自动选取所有模型中最优的模型
best=compare_models()
此时会使用所有可用的模型计算比较,最终最优模型存储在best中。
用法2:自己指定一个模型列表,从中选取最优的
model_list = ['lightgbm','et','rf','gbr','xgboost','ada','dt']#,'catboost']
best = compare_models(include=model_list)
用法3:从所有模型中挑选R2排名前3的模型,存在为一个最优模型的列表top3.
top3 = compare_models(n_select=3)
4. ensemble_model()
模型集成函数
参数:
method:Bagging或Boosting 集成模型的方法. 两者的详解参考https://zhuanlan.zhihu.com/p/37730184
Bagging是有放回的抽样,最后汇总结果。
Boosting是固定的训练集,每轮不断提升权重。
ensemble_model(estimator_list=top3,method="Bagging")
5. tune_model()
通过调整超参数优化模型
run_model_tune=tune_model(best,n_iter=30)
6. blend_model()
混合模型集成函数
混合模型,通过提供一个训练后的模型list,然后使用这个list的每个模型进行预测,然后投票给出最优的结果。
##创建top3列表,包含3个模型
top3=[
create_model("lr"),
create_model("rf"),
create_model("xgboost")
]
blender=blend_models(estimator_list=top3,fold=5)
blender
7. stack_model()
堆叠模型集成函数,输入一个训练后最优模型的列表,然后返回一个堆叠后的模型。
stacker=stack_models(top3,fold=5)
8. plot_model()
对模型进行可视化,参数比较多
#显示最佳模型的结果
plot_model(best)
# 显示特征重要性
plot_model(best,plot="feature")
9. evaluate_model()
这个是使用一个用户按钮界面显示给定的可用图形,底层是plot_model.我用的时候,会有各种报错,所以一般不用,也不影响结果。
10. interpret_model()
使用shap对模型的特征进行解释,有些模型不支持该函数。
interpret_model(modelname,save=True)
save参数是设置保存图片到本地,是png格式。
绘制出的shap的图如下:排在最前面的是贡献最高的feature.
只对部分模型有用。
有用的模型是rf, catboost, et, xgboost, lightgbm, dt.
-
predict_model()
使用模型预测新的数据。
示例是使用data_unseen这个测试集,来检验best模型的最终的效果
pred_unseen = predict_model(best,data=data_unseen)
-
-
finalize_model()
这个是最终化模型的函数,在前面训练模型之后,对模型进行调参优化,然后使用测试集检验模型之后,最终使用该函数对模型进行最终化,此时会使用所有数据,对模型进行最终的优化。
-
#这里是对前面的最优模型进行最终化,final_model就可以输出作为我们训练完成的模型,去预测新的数据了。
final_model = finalize_model(best)
-
deep_check()
检查训练好的模型的完整性和一致性,验证模型的可靠性和稳定性。
-
deep_check(best)
-
deploy_model()
在云上部署转换管道和训练模型
支持亚马逊AWS、谷歌GCP、微软Azure. 该函数我们一般不用。
-
-
automl()
该函数可以返回当前会话中所有训练的模型中的最优模型。
-
#这样就获得了最佳的模型了
all_best = automl()
可用参数:
best_mae_model = automl(optimize = 'MAE')
通过optimize参数,可以指定选择最优模型的指标,回归模型默认是根据R2
-
pull()
这个函数可以返回终端输出的表,
这3行代码就是把比较最优模型的比较结果的表输出到本地,文件名是compare_results.txt
-
best=compare_models()
model_compare = pull()
model_compare.to_csv("compare_results.txt",sep="\t", index=False)
-
models()
数据初始化之后,使用该函数可以给出当前数据所有可用的模型名称列表。
用法就是all_models=models()
-
-
get_metrics()
数据初始化之后,使用该函数给出实验中使用的评级模型性能的指标表格
image.png
-
-
add_metric()
向实验中添加自定义的评价指标
-
from pycaret.datasets import get_data
boston = get_data('boston')
from pycaret.regression import *
exp_name = setup(data = boston, target = 'medv')
from sklearn.metrics import explained_variance_score
add_metric('evs', 'EVS', explained_variance_score,Greater_is_better=True)
上面的最后两行就是增加一个指标evs,Greater_is_better参数是逻辑值,True表示该指标值越大,模型越好。
这里增加的指标是从sklearn里引来的。
-
remove_metric()
删除评价指标
删除我们前面添加的指标
-
remove_metric('evs')
-
get_logs()
获取当前实验的日志表,必须在setup初始化中设置log_experiment为True才有用。
-
from pycaret.datasets import get_data
boston = get_data('boston')
from pycaret.regression import *
exp_name = setup(data = boston, target = 'medv', log_experiment = True)
best=compare_models()
exp_logs = get_logs()
-
get_config()
获取全局环境变量的值,如果括号内不包含变量名,则返回所有可用的全局变量名。例如:get_config("n_jobs_param")
就可以获取到设置的cpu数量,如果是-1,则表示使用所有cpu
-
-
set_config()
设置某个全局环境变量,例如:
set_config("n_jobs_param",48)
设置当前实验使用48个cpu
set_config("seed",135)
设置种子随机数为135
-
-
save_experiment
保存实验
save_experiment("实验名称")
保存实验的时候,不会一并保存数据集,数据集需要单独保存。
-
-
load_experiment
加载实验
load_experiment("实验名称",data=data_train)
注意加载实验时,需要指定数据集,需要初始化之后的数据集。
-
-
get_leaderboard()
获取当前设置中训练的所有模型的排行榜,
这个函数和前面的automl()都是针对的当前所有训练过的模型,只是此处是可以返回所有的模型的排行榜。
-
-
set_current_experiment
用于设置当前实验,如果不存在,则创建该实验。
-
-
get_current_experiment
获取当前实验对象
-
-
dashboard
交互式仪表盘
dashboard(best,display_format='inline')
使用仪表盘来可视化最佳模型,
display_format参数
默认是dash
,会新开一个端口,运行在线服务,查看模型
inline
在jupyter notebook的cell中展示
jupyterlab
在jupyterlab pane展示
external
in colab
更专业的交互功能可以去explainerdashboard官方文档查看。底层是借用的explainerdashboard
-
-
convert_model()
把训练得到的模型转为其他语言的模型,以方便在其他语言中使用训练好的模型。
convert_model(best,'java')
第一个参数是训练好的模型,
第2个参数是要转换的语言名称,支持的语言列表如下:
‘python’
‘java’
‘javascript’
‘c’
‘c#’
‘f#’
‘go’
‘haskell’
‘php’
‘powershell’
‘r’
‘ruby’
‘vb’
‘dart’
-
-
eda()
使用 AutoVIZ 库生成 AutoEDA。 运行失败
-
-
check_fairness()
用于检测评估模型对不同特征组是否公平. 运行失败
-
create_api()
create_api(best,"lightGBM_api",host="127.0.0.1",port=8080)
!python lightGBM_api.py
create_docker('lightGBM_api')
该函数会创建lightGBM_api.pkl文件和lightGBM_api.py.
上面运行之后,会在本地创建一个网页,访问:http://127.0.0.1:8080
create_docker
为前面的api,创建一个docker file.
create_app
用法也是
create_app(best)
这样就在本地部署完成一个web页面,和上面一样访问端口即可使用模型了。
-
get_allowed_engines()
返回现在支持的机器学习引擎列表
-
-
get_engine()
输出当前模型所使用的机器学习引擎(框架)
-
engine=get_engine(best)
print(engine)
返回值可能是scikit-learn、xgboost、LightGBM
check_drift()
check_drift(best,data)
参数1是模型名称,参数2是数据集。
该函数的功能是检测数据集的数据是否发生了数据漂移。数据漂移简单解释:训练模型时的数据的特征结构和后来使用模型时的数据特征结构不一致。简单说就是数据集的特征和训练时的特征分布不一样了,这时就需要重新训练模型。