PyCaret的具体使用流程

PyCaret是Python中的一个开源、低代码机器学习库,旨在减少从数据处理到模型部署的周期时间。PyCaret库只需几行代码就可以完成从准备数据到部署模型,其中包括有数据处理,模型训练,参数搜索,模型可解释性,模型选择,实验日志查询。

一、PyCaret安装
在使用pycaret库进行机器学习处理时,pycaret2.3要求scikit-learn在是0.22版,然而,在python3.7下没有找到相应匹配的版本。为避免安装不兼容,我首先尝试了将pycaret降级为2.0版本,具体地址参考:https://github.com/pycaret/pycaret/releases/tag/2.0
后来发现还是报错不断,因此采用了第二种办法搭建虚拟环境,这样能在另外一个独立的环境中进行测试,下面介绍下python搭建虚拟环境及pycaret安装的流程:
1、确保自己电脑中已安装好python2和python3;
2、然后安装virtualenv

pip install virtualenv
pip install virtualenvwrapper # 这是对virtualenv的封装版本,一定要在virtualenv后安装

3、使用virtualenv新建一个虚拟环境的文件夹
选择一个用来存放虚拟环境的文件,如E:/python3

cd E:python3 # 进入该文件
virtualenv envname  # 创建一个名字为envname的虚拟环境
dir   # 查看当前目录可以知道一个envname的文件已经被创建virtualenv -p python2 envname # 如果安装了多个python版本,如py2和py3,需要指定使用哪个创建虚拟环境

启动虚拟环境

# 进入虚拟环境文件
cd envname
# 进入相关的启动文件夹
cd Scriptsactivate # 启动虚拟环境
#在此目录下可以安装各类包
pip install pycaret
python -m pip list #指令可查看安装的包
deactivate # 退出虚拟环境

注意:每次需要启动虚拟环境的时候都需要进入虚拟环境的文件夹的Scripy的目录下,非常不方便,可以将Scripy的路径添加到系统环境变量中;在安装pycaret后如果发现版本还是之前的版本,这时需要卸载pycaret后重新安装,包括scikit-learn。

二、PyCaret的实际应用
打开jupyter lab 后,可以在右上角上选择刚创建的“new-kernel”环境,

2.1 加载数据

import pandas as pd
import numpy as np
df5 = pd.read_excel(r'D:\test.xlsx')

2.2 数据初始化
PyCaret通过setup()函数可将原始数据进行一站式数据采样与划分、数据预处理、转换、特征工程等操作,它会根据setup函数中定义的参数创建转换管道(transformation pipeline)。它会自动编排管道(pipeline)中的所有依赖项,因此不必手动管理对测试数据集或未知的数据集进行转换的顺序执行。其中,分类和回归setup()函数参数相差无异,聚类、异常检测、NLP和关联规则挖掘模块的参数相对更少一些。以分类为例,

对上图中具体参数的选择,可以在对应的/pycaret/preprocess.py中进行调整。

1.设置数据集、标注目标值
data: pandas.DataFrame

target: str

2.训练集/测试集划分与采样

  • 训练集/测试集

在有监督的机器学习实验中,数据集被分为训练数据集和测试数据集。测试数据集充当新数据的代理。训练后的机器学习模型的评估和PyCaret中超参数的优化仅在训练数据集上使用k-fold交叉验证。测试数据集(也称为保持集)不用于模型的训练,因此可以在 predict_model 函数下用于评估度量和确定模型是否过度拟合数据。默认情况下,PyCaret使用70%的数据集进行训练,可以在设置中使用 train_size 参数更改。
train_size: float, default = 0.7 #用于训练和验证的数据集的比例。应介于0.0和1.0之间。

test_data:pandas.DataFrame, default = None # 如果手动传入测试数据集,则train_size的参数失效

  • 采样

当数据集包含超过25000个样本时,PyCaret默认启用数据集的采样。它通过在不同的样本水平上训练一个初步的线性模型来实现这一目的,并打印出一个视觉效果图,显示了训练模型作为样本水平函数的性能,如x轴所示。然后,此图可用于评估用于训练模型的样本大小。有时,您可能希望选择较小的样本大小,以便更快地训练模型。为了改变线性模型的估计量,可以在setup中使用 sample_estimator 参数。要关闭采样,可以将采样参数设置为False。此功能仅在pycaret.classification和pycaret.regression模块中可用。
sampling: bool, default = True
sample_estimator: object, default = None ,如果 None, 则默认使用线性模型.
当输入的 sample_size 小于1时,只有在调用 finalize_model() 时,才会使用剩余的数据集(1–sample)拟合模型。

3.数据预处理
是否进行数据处理,默认true

preprocess: bool, default = True

  • 指定特征数据类型

categorical_features: list of str, default = None(如果推断的数据类型不正确,则可以使用分类特征覆盖推断的类型。如果在运行安装程序时“column1”的类型被推断为数值而不是类别,则可以使用此参数通过传递 categorical_features=[‘column1’] 覆盖该类型。)

numeric_features: list of str, default = None(如果推断的数据类型不正确,则可以使用数值特征覆盖推断的类型。如果在运行安装程序时,“column1”的类型被推断为类别而不是数字,则可以使用此参数通过传递 numeric_features=[‘column1’] 来覆盖。)

date_features: list of str, default = None(如果数据有一个在运行安装程序时未自动检测到的DateTime列,则可以通过传递 date_features=‘date_column_name’ 来使用此参数。它可以处理多个日期列。建模中不使用日期列。相反,将执行特征提取,并从数据集中删除日期列。如果日期列包含时间戳,则还将提取与时间相关的特征。)

ignore_features: list of str, default = None #删除指定特征。如果建模时应忽略任何特征,则可以将其传递给参数 ignore_features。
当推断出ID和DateTime列时,将自动设置为忽略以进行建模。

  • 缺失值处理

当imputation_type: str, default = 'simple’时

categorical_imputation: str, default = ‘constant’#默认填充“not_available”值,或设为’mode’,填充众数(如果在分类特征中发现缺失的值,则将使用常量“not_available”值进行估算。另一个可用的选项是“mode”,它使用训练数据集中最频繁的值来估算缺失的值。)

numeric_imputation: str, default = ‘mean’ # 默认填充平均值,其他参数有’median’ or ‘zero’.(如果在数字特征中发现缺失值,则将用特征的平均值进行估算。另一个可用的选项是“median”,它使用训练数据集中的中值来估算值。)

当imputation_type: str, default = 'iterative’时:

iterative_imputation_iters: int, default = 5

categorical_iterative_imputer: str, default = ‘lightgbm’

numeric_iterative_imputer: str, default = ‘lightgbm’

4.类别型特征值处理
当未观察到的数据在分类特征上有新的层次,而这些层次在训练模型时是不存在的,这可能会导致训练算法在生成准确预测时出现问题。处理这些数据点的一种方法是将它们重新分配到已知的分类特征级别,即训练数据集中已知的级别。这可以在PyCaret中使用 handle_unknown_categorical 参数来实现,该参数默认设置为True。它支持两种方法“least_frequent”和“most_frequent”,可以在设置中使用未知的分类方法参数进行控制。

handle_unknown_categorical: bool, default = True

unknown_categorical_method: str, default = ‘least_frequent’ # 其他参数有 ‘most_frequent’

分类特征某个类别分布低于某个阈值,合并该稀有类别

combine_rare_levels: bool, default = False

rare_level_threshold: float, default = 0.1

5.编码转换

  • 独热编码(one-hot)

类别型变量默认都会进行one-hot独热编码。机器学习算法不能直接处理分类数据,必须在训练模型之前将其转换为数值。最常见的分类编码类型是独热编码(也称为伪编码),其中每个分类级别成为包含二进制值(1或0)的数据集中的单独特征。由于这是执行ML实验的必要步骤,PyCaret将使用独热编码转换数据集中的所有分类特征。这对于具有名义分类数据(即数据无法排序)的特征非常理想。在其他不同的情况下,必须使用其他编码方法。例如,当数据是序数,即数据具有内在级别时,必须使用序数编码。独热编码可用于所有特征,这些特征要么被推断为分类特征,要么被强制使用设置中的 categorical_features 参数作为分类特征。

  • 序列编码

当数据集中的分类特征包含具有内在自然顺序的变量(如低、中、高)时,这些变量的编码必须不同于名义变量(如男性或女性没有内在顺序)。这可以在PyCaret中使用setup中的ordinal_features 参数来实现。
ordinal_features: dict, default = None #将分类特征编码为序号,传入字典,其特征名称和级别按从低到高的顺序递增。如果数据具有值为“low”、“medium”、“high”的分类变量,并且已知low<medium<high,则可以将其作为 ordinal_features = { ‘column_name’ : [‘low’, ‘medium’, ‘high’] } 传递。列表序列必须按从低到高的顺序递增。

  • 基数编码

当数据集中的分类特征包含多个级别的变量(也称为高基数特征)时,典型的独热编码会导致创建大量新特征,从而使实验变慢,并为某些机器学习算法引入可能的噪声。在PyCaret中,可以使用设置中的 high-cardinality-Features 参数处理具有高基数的特性。它支持两种基数编码方法,即基于频率/计数的方法和聚类方法。这些方法可以在setup中的 high_cardinality_method 参数中定义。
high_cardinality_features: string, default = None
当数据包含具有高基数的特性时,可以通过将其作为具有高基数的列名列表传递来将其压缩为较少的级别
使用 high_cardinality_method param 中定义的方法压缩特征。
high_cardinality_method: string, default = ‘frequency’
当方法设置为“frequency”时,它将用频率分布替换特征的原始值,并将特征转换为数值。
另一种可行的方法是“clustering”,它对数据的统计属性进行聚类,并用聚类标签代替特征的原始值。使用Calinski-Harabasz和 Silhouette 准则的组合来确定簇的数量。

6.数据标准化
标准化是机器学习中常用的一种数据准备技术。标准化的目标是重新调整数据集中数值列的值,而不会扭曲值范围中的差异或丢失信息。这可以在PyCaret中使用设置中的 normalize 参数来实现。有几种方法可用于规范化,默认情况下,它使用“zscore”来规范化数据,可以在安装程序中使用normalize_method 参数对其进行更改。
normalize: bool, default = False #默认不启动标准化
当设置为True时,使用 normalized_method 参数变换特征空间。
一般来说,线性算法在处理标准化数据时表现更好,但是结果可能会有所不同,因此建议运行多个实验来评估标准化的好处。
normalize_method: str, default = ‘zscore’ # 其他参数有[minmax,maxabs,robust]
定义用于规范化的方法。默认情况下,normalize方法设置为“zscore”。
标准zscore计算为z=(x–u)/s。其他可用选项包括:
z-score:标准zscore计算为z=(x–u)/s
minmax:分别缩放和转换每个特征,使其在0-1的范围内。
maxabs:分别缩放和转换每个特征,使每个特征的最大绝对值为1.0。它不会转移/集中数据,因此不会破坏任何稀疏性。
robust:根据四分位数范围缩放和转换每个特征。当数据集包含异常值时,robust的转换通常会给出更好的结果。

7.标准化与转换

  • 数据转换

当标准化在新的范围内重新调整数据以减少方差的大小影响时,转换是一种更激进的技术。变换改变分布的形状,使得变换后的数据可以用正态或近似正态分布表示。通常,当使用ML算法时,必须对数据进行转换,该算法假定输入数据为正态或高斯分布。这类模型的例子有Logistic回归、线性判别分析(LDA)和高斯朴素贝叶斯。可以使用设置中的转换参数在PyCaret中实现数据转换。有两种方法可用于转换“yeo-johnson”和“quantile”,可通过设置中的转换方法参数定义。
transformation: bool, default = False #默认不启动转换
当设置为True时,将应用幂变换使数据更为正态/高斯型。
这对于建模异方差或其他需要正态性的情况下的相关问题很有用。
通过极大似然估计出了稳定方差和最小化偏度的最优参数。

transformation_method: str, default = ‘yeo-johnson’ # 其他参数有 ‘quantile’
定义转换的方法。默认情况下,转换方法设置为“yeo-johnson”。
另一个可用的选项是“quantile”转换。
这两种变换都将特征集变换为遵循类高斯分布或正态分布。
注意,分位数变换器是非线性的,并且可能会扭曲在相同尺度下测量的变量之间的线性相关性。

  • 目标转换

目标变换类似于数据变换,它用来改变目标变量分布的形状。当使用线性回归或线性判别分析等线性算法进行建模时,必须对目标进行变换。这可以在PyCaret中使用setup中的 transform_target 参数来实现。有两种方法支持目标转换“box-cox”和“yeo-johnson”,可以在设置中使用transform_target_method 参数定义。
transform_target: bool, default = False
当设置为True时,目标变量将使用transform_target_method param中定义的方法进行转换。目标转换与特征转换分开应用。

transform_target_method: string, default = ‘box-cox’
支持“Box-cox”和“yeo-johnson”方法。Box-Cox要求输入数据严格为正,而Yeo-Johnson同时支持正数据和负数据,当transform_target_method为“box-cox’”且目标变量包含负值时,method被内部强制为“yeo-johnson”以避免异常。

8.特征衍生

  • 多项式特征

在机器学习实验中,因变量和自变量之间的关系通常被假定为线性关系,但情况并非总是如此。有时因变量和自变量之间的关系更为复杂。创建新的多项式特征有时可能有助于捕获这种关系,否则可能会被忽视。PyCaret可以使用设置中的多项式特征参数从现有特征创建多项式特征。
polynomial_features: bool, default = False
当设置为True时,将基于数据集中的数字特征中存在的所有多项式组合创建新特征,并达到多项式参数中定义的程度。
polynomial_degree: int, default = 2 #默认是多元二次函数
多项式特征的次数。例如,如果输入样本是二维的,并且其形式为[a,b],则次数为2的多项式特征为:[1,a,b,a2,ab,b2]。
polynomial_threshold: float, default = 0.1
新要素是从现有要素空间创建的,为了压缩多项式和三角特征的稀疏矩阵。数据集中保留了基于随机森林、AdaBoost和线性相关组合的特征重要性在所定义阈值百分位数以内的多项式和三角特征。其余特征将在进一步处理之前删除。

  • 三角函数特征

与多项式特征类似。
trigonometry_features: bool, default = False
当设置为True时,将基于数据集中数字特征中存在的所有三角组合创建新特征,这些三角组合在 polynomial_degree 参数中定义。

  • 特征交互

在机器学习实验中经常会看到,通过算术运算组合的两个特征在解释数据中的差异时变得比单独使用同一两个特征更为重要。通过现有特征的交互创建新特征称为特征交互。它可以在PyCaret中使用设置中的 feature_interaction 和 feature_ratio 参数来实现。特征交互通过两个变量(a*b)相乘来创建新特征,而特征比率通过计算现有特征的比率(a/b)来创建新特征。
feature_interaction: bool, default = False #可能无法在高维特性空间中使用,特征组合方法 a * b

feature_ratio: bool, default = False #可能无法在高维特性空间中使用,特征组合方法 a / b

interaction_threshold: bool, default = 0.01 #与polynomial_threshold类似,通常将通过组合方法新创建特征压缩成稀疏矩阵,根据随机森林,Adaboost的特征重要性和线性相关性低于设置的阈值将保留在数据集中,其余特征被删除

  • 聚合特征

当数据集中包含以某种方式批次相关的特征时,比如,特征以固定的时间间隔记录,就可以从现有特征中创建一些统计#指标,比如均值,中位数,方差和标准差

group_features: list or list of list, default = None
如果数据集具有相互关联的数字特征(即“Col1”、“Col2”、“Col3”),则可以在分组特征下传递包含列名的列表,以提取统计信息,如平均值、中值、模式和标准差。group_features = [‘BILL_AMT1’, ‘BILL_AMT2’, ‘BILL_AMT3’, ‘BILL_AMT4’, ‘BILL_AMT5’, ‘BILL_AMT6’]
group_names: list, default = None #长度必须与group_features的长度一致传递。传递 group_features 时,可以将组的名称作为包含字符串的列表传递到 group_names 参数中。分组名称列表的长度必须等于分组特征的长度。当长度不匹配或未传递名称时,将按顺序命名新特征,如group_1、group_2等。

  • 分箱数字特征

特征分箱是一种利用预先定义的箱数将连续变量转化为分类值的方法。当连续特征的唯一值太多或极端值很少超出预期范围时,它是有效的。这样的极值会影响训练后的模型,从而影响模型的预测精度。在PyCaret中,可以使用设置中的 bin_numeric_features 参数将连续的数字特征组合成分箱。PyCaret使用“sturges”规则来确定箱体容器的数量,还使用 K-Means 聚类将连续的数字特征转换为分类特征。
bin_numeric_features: list of str, default = None
当传递一个数字特征列表时,它们将使用K-Means转换为分类特征,其中每个bin中的值具有1D K-Means簇的最接近中心。集群的数量是根据“sturges”方法确定的。它只适用于高斯数据,并且低估了大型非高斯数据集的存储单元数。

  • 合并稀有级别

有时,一个数据集可以有一个分类特征(或多个分类特征),具有非常高的级别(即高基数特征)。如果这样的特征(或特征)被编码成数值,那么得到的矩阵就是一个稀疏矩阵。这不仅使实验因特征数目和数据集大小的增加而变慢,而且在实验中引入了噪声。稀疏矩阵可以通过合并具有高基数的特征(或特征)中的罕见级别来避免。这可以在PyCaret中使用设置中的 combine_rare_levels 参数来实现。
combine_rare_levels: bool, default = False
如果设置为True,则在 rare_level_threshold 参数中定义的阈值以下的分类特征中的所有级别将合并为一个级别。必须至少有两个级别低于阈值才能生效。

rare_level_threshold: float, default = 0.1
代表能级频率的百分位分布。一般来说,这项技术是用来限制由类别特征中的大量级别引起的稀疏矩阵。百分位分布,低于百分位分布的稀有类别合并在一起。只有当“combine_rare_levels”设置为“True”时才生效。

9.特征选择
特征重要性是用于在数据集中选择在预测目标变量方面贡献最大的特征的过程。使用选定的特征而不是所有特征可以减少过度拟合的风险,提高准确性,并减少训练时间。在PyCaret中,这可以使用 feature_selection 参数来实现。它使用多种监督特征选择技术的组合来选择对建模最重要的特征子集。子集的大小可以通过设置中的 feature_selection_threshold 参数来控制。

  • 特征重要性选择

feature_selection: bool, default = False ,
当设置为True时,使用各种排列重要性技术(包括随机林、Adaboost和与目标变量的线性相关)的组合来选择特征子集。
子集的大小取决于 feature_selection_param 参数。为了提高建模效率,通常采用约束特征空间的方法。当使用 polynomial_features 和 feature_interaction 时,强烈建议使用较低的值定义feature_selection_threshold 参数。

feature_selection_threshold: float, default = 0.8,较大的值将导致较高的特征空间。用于特征选择的阈值(包括新创建的多项式特征)。值越大,特征空间越大。建议在使用 polynomial_features 和 feature_interaction 的情况下,使用不同的 feature_selection_threshold 进行多次试验。设置一个非常低的值可能是有效的,但可能会导致欠拟合。

feature_selection_method: str, default = ‘classic’# 默认使用经典的树模型方法,其他参数 ‘boruta’

  • 主成分分析

主成分分析(PCA)是机器学习中用来降低数据维数的一种无监督技术。它通过识别一个子空间来压缩特征空间,该子空间捕获了完整特征矩阵中的大部分信息。它将原始特征空间投影到低维空间中。这可以在PyCaret中使用设置中的 pca 参数来实现。
pca: bool, default = False
如果设置为True,则使用 pca_method 参数中定义的方法将数据投影到低维空间中。在有监督学习中,pca通常在处理高特征空间时执行,而内存是一个约束条件。请注意,并非所有数据集都可以使用线性PCA技术有效地分解,并且应用PCA可能会导致信息丢失。
因此,建议使用不同的pca_method 进行多个实验来评估影响。
pca_method: str, default = ‘linear’#其他参数【kernel,incremental】
“linear”方法使用奇异值分解来执行线性降维。其他可用选项包括:
kernel:利用RVF核进行降维。
incremental :当要分解的数据集太大而无法放入内存时,替换“线性”主成分分析
pca_components: int or float, default = None # 要保留的组件数,低方差,异常值删除。如果 pca_components 是一个浮点数,则将其视为信息保留的目标百分比。当 pca_components 是整数时,它被视为要保留的特征数。 pca_components 必须严格小于数据集中的原始特征数。

  • 忽略低方差

有时,一个数据集可能具有多个级别的分类特征,其中这些级别的分布是倾斜的,一个级别可能支配其他级别。这意味着这种特性提供的信息没有太大的变化。对于一个ML模型,这样的特性可能不会增加很多信息,因此在建模时可以忽略。这可以在PyCaret中使用设置中的 ignore_low_variance 参数来实现。要将特征视为低方差特征,必须满足以下两个条件。
1)特征/样本大小中唯一值的计数<10%
2)最常见值计数/第二常见值计数>20次。
ignore_low_variance: bool, default = False
当设置为True时,将从数据集中移除具有统计上不显著的差异的所有分类特征。
使用唯一值与样本数的比率以及最常用值与第二常用值的频率的比率来计算方差。
remove_outliers: bool, default = False

outliers_threshold: float, default = 0.05

  • 消除多重共线性

多重共线性(也称为共线性)是指数据集中的一个特征变量与同一数据集中的另一个特征变量高度线性相关的现象。多重共线性增加了系数的方差,从而使线性模型的系数变得不稳定和有噪声。处理多重共线性的一种方法是去掉彼此高度相关的两个特征之一。这可以在PyCaret中使用setup中的remove_multicollinearcity 参数来实现。
remove_multicollinearity: bool, default = False
当设置为True时,将丢弃相关性高于多重共线性阈值参数下定义的阈值的变量。当两个特征高度相关时,与目标变量相关性较小的特征将被删除。
multicollinearity_threshold: float, default = 0.9
用于删除相关特征的阈值。只有当“remove_multicollinearity”设置为“True”时才生效。随机删除相关性为1的特征

remove_perfect_collinearity: bool, default = True

10.无监督

  • 创建聚类

使用数据中的现有特性创建聚类是一种无监督的ML技术,用于设计和创建新特征。利用 Calinski-Harabasz 和 Silhouette 准则相结合的迭代方法确定聚类数。每个具有原始特征的数据点被分配给一个集群。然后,将指定的簇标签用作预测目标变量的新特征。这可以在PyCaret中使用setup中create_clusters 参数来实现。

create_clusters: bool, default = False
当设置为True时,将创建一个附加特征,其中每个实例都分配给一个聚类。使用Calinski-Harabasz和 Silhouette 准则的组合来确定簇的数量。
cluster_iter: int, default = 20
用于创建聚类的迭代次数。每次迭代都表示聚类大小。仅当 create_clusters 参数设置为 True 时生效。

  • 删除异常值

PyCaret中的删除异常值函数允许您在训练模型之前识别并从数据集中删除异常值。它可以通过设置中的 remove_outliers 参数来实现。通过 outliers_threshold 参数控制异常值的比例。
remove_outliers: bool, default = False
当设置为 True 时,使用PCA线性降维和奇异值分解技术去除训练数据中的异常值。

outliers_threshold: float, default = 0.05
数据集中离群值的百分比/比例可以使用离群值阈值参数定义。
默认情况下,使用0.05,这意味着分布尾部每侧的0.025个值将从训练数据中删除。

11.样本平衡处理
fix_imbalance: bool, default = False,#默认

fix_imbalance_method: obj, default = None 默认使用’SMOTE’方法

利用分类进行set_up后的结果如下,

2.3 模型训练
pycaret包含6类共69个算法函数供不同场景需求调用,主要分为分类、回归、聚类、异常检测、自然语言处理以及关联规则挖掘。每一种算法都有其对应的code与参数,可自行修改。算法的缩写可查看PyCaret的文档https://pycaret.org/create-model/


1.模型比较
在开始选择特定的模型前,先进行模型比较来挑出比较可行的模型进行优化调参。pycaret库的compare_models函数使用默认超参数训练模型库中的所有模型,并使用交叉验证(默认10折)评估性能指标。它返回经过训练的模型对象。使用的评估指标包括:

Classification: Accuracy, AUC, Recall, Precision, F1, Kappa, MCC

Regression: 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指标排序,再选取排在最前面的模型数


这里面有几个需要进行下说明:

  • precision(查准率)的含义是:预测为对的当中,原本为对的比例(越大越好,1为理想状态)
  • recall(查全率)的含义是:原本为对的当中,预测为对的比例(越大越好,1为理想状态)
  • F-measure的含义是:用precision和recall两个指标不直观(任性),索性把他们合并为一个,这就是F-measure(越大越好,1为理想状态,此时precision为1,recall为1)
  • accuracy的含义是:预测对的(包括原本是对预测为对,原本是错的预测为错两种情形)占整个的比例(越大越好,1为理想状态)
  • fp rate的含义是:原本是错的预测为对的比例(越小越好,0为理想状态)
  • tp rate的含义是:原本是对的预测为对的比例(越大越好,1为理想状态)
  • ROC曲线的含义是:得到算法的一组(fp rate, tp rate)然后做出的曲线
  • AUC的含义:ROC曲线下的面积(越大越好,1为理想状态)
  • R-P曲线的含义是:得到算法的一组(recall, precision)然后做出的曲线
  • kappa系数(Cohen’s kappa)的含义:用来衡量两种标注结果的吻合程度,适用于多分类,系数的值越高,则代表模型实现的分类准确度越高。

    其中,po是观察到的符合比例,pe是由于随机性产生的符合比例。

    预测与真实值相符共有20+15个,则观察到的符合比例为po=(20+15)/50=0.7。计算pe比较复杂,PREDICT预测为1的比例为0.5,GROUND中1的比例为0.6,从完全随机的角度来看,PREDICT与GROUND均为1的概率为0.50.6=0.3,PREDICT与GROUND均为0的概率为0.50.4=0.2,则PREDICT与GROUND由于随机性产生的符合比例为0.2+0.3=0.5,即pe=0.5,最后求得K=(po−pe)/(1−pe)=(0.7−0.5)/(1−0.5)=0.4。
  • MCC(Matthews相关系数)的含义:用一个值综合混淆矩阵,度量真实值和预测值之间的相关性。

    MCC值在[-1,1]之间:

1:分类器是完美的

0:分类器是随机分类器

-1:分类器是最差,所有预测结果和实际相反

2.创建模型
pycaret库create_model函数可以根据模型库的ID创建模型,该函数使用交叉验证(默认是setup函数设置的fold)来训练和评估给定模型的性能,输出是一个分数表,其中包含按倍数计算的CV分数。可以使用get_Metrics函数访问CV期间评估的指标。可以使用add_metric和remove_metric函数添加或删除自定义度量。

3.模型调参
pycaret库tune_model函数用于调整给定模型的超参数。该函数的输出是一个分数表,其中包含基于优化参数的最佳选择模型的CV分数。常用参数设置如下:

estimator: scikit-learn compatible object #需要调参的模型
fold: int or scikit-learn compatible CV generator, default = None # 交叉验证折数

#评估指标
custom_scorer: object, default = None #可以通过自定义评分策略来调整模型的超参数。它必须使用sklearn.make_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)

4.模型融合
PyCaret中,有bagging、boosting、blending和stacking几类集成模型。blend_models(),stack_models(),boosting(),bagging()函数来调用。

在具体应用案例中,

2.4 模型可视化
1.性能分析
分析经过训练的机器学习模型的性能是任何机器学习工作流中不可或缺的一步。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 Plot


2.模型评估
前面的一些可视化内容需要逐一输入显示,PyCaret中的evaluate_model函数将创建一个交互式窗口,供你以所有可能的方式查看和分析模型。

3.模型解释
通过分析模型认为什么是重要的来帮助调试模型。PyCaret中获取Shapley值来编写解释模型。



3.模型校准
进行分类建模时,不仅要预测类标签,还要获得预测的概率。有的分类器(例如SVM)只能直接打上类别标签没法给出置信度。另一方面,在某些场景中,我们希望得到真实的概率。分数校准主要目的:
1)修正实际概率和开发样本中期望概率之间的偏差。
2)保证预测概率与真实概率之间的一致性(拟合度)

calibrate_model函数使用等isotonic or logistic regression算法校准给定模型的概率。此函数的输出是一个分数表,其中包含按交叉折数(默认setup函数fold)计算的CV分数。

4.阈值优化
在分类问题中,false positives 的代价几乎不等于 false negatives 的代价。因此,如果您正在优化 Type 1 和 Type 2 错误具有不同影响的业务问题,则可以针对概率阈值优化分类器,以便通过分别定义TP、TN、FP和FN的代价来优化自定义损失函数。

optimize_threshold函数返回一个交互图,其中损失函数(y轴)表示为x轴上不同概率阈值的函数。然后显示一条垂直线来表示该特定分类器的概率阈值的最佳值。然后,使用优化阈值优化的概率阈值可用于预测模型函数中,以使用自定义概率阈值生成标签。一般情况下,所有的分类器都被训练成50%的预测阳性类。

2.5 模型预测
PyCaret中predict_model函数,该函数使用经过训练的模型预测标签和分数。函数中的主要参数包括:
estimator:#训练好的模型
data: pandas.DataFrame,默认预测setup函数留样数据集的标签和分数,也可以传入时间外样本预测(OOT)
probability_threshold: float, default = None#将预测概率转换为类别标签的阈值。除非在此参数中明确定义,否则所有分类器的默认值均为0.5。
raw_score: bool, default = False:#设置为True时,将返回所有标签的分数。为False返回Score列的值表示左侧label列值对应的概率值。

2.6 模型的保存与加载
setup进行数据划分时基本按照7:3,PyCaret中finalize_model函数功能主要是将30%测试集与70%训练集合并后放到已经创建好的模型上再次训练走一遍Pipeline过程。此函数仅在pycaret.classification和pycaret.regression模块中可用。
save_model函数获取一个经过训练的模型对象,并将整个转换管道和经过训练的模型对象保存为可转移的二进制pickle文件,以供以后使用。

load_model函数用于加载以前保存的管道。

2.7 模型部署
模型确定后,一般都是现将模型保存为xxx.pmml或xxx.pkl格式文件后再上传到本地服务器部署;pycaret还提供了一种在云服务商上部署模型,通过ML Flow 进行模型管理。

参考文章
windows下python虚拟环境virtualenv安装和使用详解
低代码机器学习库–Pycaret2.3
Pycaret – 理想的AUTO ML 平台
机器学习建模工具PyCaret详讲

pycaret的具体使用流程相关推荐

  1. 生鲜自提柜能否疫战成名?未来是一片蓝海还是一地鸡毛?

    一.市场背景调查 1.快递柜将来可能会被定义为公共服务设施 商务部办公厅.国家邮政局办公室2020.4.17日发布<国家邮政局办公室关于深入推进电子商务与快递物流协同发展工作的通知>,深入 ...

  2. 独家 | PyCaret 2.1横空出世-有什么新的内容?

    作者:Moez Ali 翻译:陈之炎 校对:阿笛 本文约2500字,建议阅读8分钟 本文概述了PyCaret的创新之处,并提供了使用示例. 标签:机器学习 可以使用pip下载Py Caret2.1,下 ...

  3. 利用PyCaret的力量

    PyCaret is an open-source, low-code machine learning library in Python that aims to reduce the cycle ...

  4. 淘宝获取单笔订单信息服务端调用API及流程

    淘宝获取单笔交易接口(文档地址):https://open.taobao.com/api.htm?docId=54&docType=2 调用接口所需依赖(文档地址):https://devel ...

  5. 用伪代码模拟洗衣机的运转流程

    今天的软导课又学到了不少"骚操作",其中就包括Pseudocode和Top-down design. 不如现在就借着介绍洗衣机的运转流程向大家介绍一下这两个简单的东西. 题目如下 ...

  6. vue-devTools插件安装流程

    vue-devTools插件安装流程 本文主要介绍 vue的调试工具 vue-devtools 的安装和使用 工欲善其事, 必先利其器, 快快一起来用vue-devtools来调试开发你的vue项目吧 ...

  7. RPC 笔记(01)— RPC概念、调用流程、RPC 与 Restful API 区别

    1. 基本概念 PRC 远程过程调用 Remote Procedure Call,其就是一个节点请求另外一个节点提供的服务.当两个物理分离的子系统需要建立逻辑上的关联时,RPC 是牵线搭桥的常见技术手 ...

  8. etcd 笔记(05)— etcd 代码结构、各模块功能、整体架构、各模块之间的交互、请求和应答流程

    1. etcd 项目结构和功能 etcd 项目代码的目录结构如下: $ tree ├── auth ├── build ├── client ├── clientv3 ├── contrib ├── ...

  9. 浅显易懂 Makefile 入门 (01)— 什么是Makefile、为什么要用Makefile、Makefile规则、Makefile流程如何实现增量编译

    1. 什么是 Makefile Makefile 文件描述了 Linux 系统下 C/C++ 工程的编译规则,它用来自动化编译 C/C++ 项目.一旦写编写好 Makefile 文件,只需要一个 ma ...

最新文章

  1. datetime 和 smalldatetime
  2. Android 使用Jsoup解析Html
  3. Kotlin函数中默认参数
  4. 谷歌研究发现优秀的团队必须具备这五个关键特质
  5. 5、MySQL事务隔离级别详解
  6. 建基小型计算机,建碁AOpenminiITX小型化平台应用(44页)-原创力文档
  7. python效率提升_Python GUI开发,效率提升10倍的方法!
  8. Failed to install UTRUST.apk on device 'ZTE_SP920': Too many open files
  9. Ubuntu下面安装字体后,显示不完全的问题
  10. (五):C++分布式实时应用框架——微服务架构的演进
  11. 欢乐纪中B组周六赛【2019.3.9】
  12. 数学连乘和累加运算符号_期中复习:小学数学各年级知识点和重点、难点大全!...
  13. redis演练(7) redis Sentinel实现故障转移
  14. 1、Java多线程基础:进程和线程之由来
  15. myeclipse 运行servlet
  16. 南澳大学计算机科学专业学费,2020年南澳大学学费(本科及研究生)及学费支付方式解析!...
  17. UpdatePanel触发javascript脚本技巧javascript
  18. unity 动态修改粒子特效
  19. Tracer 记录 Controller 日志
  20. access数据库应用系统客观题_Access数据库选择题练习与答案

热门文章

  1. 中软实训-day1 Maven的基本知识
  2. 如何回答面试官提问:如果你进入公司,会怎样开展工作?
  3. APP开发为什么要用第三方?
  4. c语言空格键变成删除键怎么变回来,文档空格键怎么变成删除了
  5. npm与淘宝镜像 的安装
  6. Sketch for mac 常用版本下载
  7. 医疗行业AI医学影像与互联网诊疗文件存储设备解决方案
  8. .sh脚本如何新开终端执行
  9. AudioToolbox---AUAudioUni
  10. 九种查找算法-哈希查找