自动机器学习pycaret 处理分类简单用法
引入分类模型库import warnings warnings.filterwarnings(ignore) import numpy as np import pandas as pd import matplotlib.pyplot as plt plt.style.use(fivethirtyeight) from pycaret.classification import *数据集拆分dataset pd.read_csv(rD:\Work\PycharmProjects\jupyter\pycaret\diabetes.csv) data dataset.sample(frac0.75, random_state42) data_unseen dataset.drop(data.index) data.reset_index(inplaceTrue, dropTrue) data_unseen.reset_index(inplaceTrue, dropTrue)代码的核心目的是将数据集拆分为训练集和测试集留出集并对索引进行重置整理第1行data dataset.sample(frac0.75, random_state42)这行代码从dataset中随机抽取 75% 的样本作为训练数据通常命名为data。frac0.75抽取 75% 的行random_state42设置随机种子保证每次运行代码时抽取的结果都一样可复现第2行data_unseen dataset.drop(data.index)这行代码从原始dataset中删除data中已有的行剩下的就是没有被抽中的那 25%赋值给data_unseen。data.index是data的索引号即被抽中样本在原数据集中的位置drop(data.index)删除这些索引对应的行剩下的 25% 数据就作为测试集/留出集用于模型最终评估第3行data.reset_index(inplaceTrue, dropTrue)重置data的索引让索引变成0, 1, 2, 3, ...的连续整数。inplaceTrue直接在原 DataFrame 上修改不返回新对象dropTrue丢弃旧的索引列不将其保存为新的数据列为什么要这样做因为data是从dataset中抽取的样本它的索引是原数据集中的位置编号比如5, 12, 33, ...不是从 0 开始的连续编号。重置索引可以让后续操作如遍历、拼接更方便。第4行data_unseen.reset_index(inplaceTrue, dropTrue)对data_unseen做同样的索引重置操作原因同上。env_setup setup(datadata, targetClass variable, session_id42)setup()是 PyCaret 的启动器——它接收你的数据配置预处理管道划分训练/测试集建立交叉验证策略为后续的所有建模工作做好准备。后台操作flowchart TD A[开始: setup()] -- B[接收 data 和 target] B -- C[自动检测特征类型br数值/类别/日期/文本] C -- D[分离特征 X 和目标 y] D -- E[划分训练集和测试集br默认 70%/30%] E -- F[配置 10 折交叉验证brStratifiedKFold] F -- G[建立预处理管道br缺失值填充/编码/标准化等] G -- H[存储所有配置到环境中] H -- I[返回配置信息汇总表] I -- J[准备好接收模型训练命令]返回值分析Description Value 0 Session id 42 1 Target Class variable 2 Target type Binary 3 Original data shape (576, 9) 4 Transformed data shape (576, 9) 5 Transformed train set shape (403, 9) 6 Transformed test set shape (173, 9) 7 Numeric features 8 8 Preprocess True 9 Imputation type simple 10 Numeric imputation mean 11 Categorical imputation mode 12 Fold Generator StratifiedKFold 13 Fold Number 10 14 CPU Jobs -1 15 Use GPU False 16 Log Experiment False 17 Experiment Name clf-default-name 18 USI a95b 整体概览序号描述值含义0Session id42会话ID你设置的session_id42作为随机种子确保结果可复现1TargetClass variable目标变量标签列你要预测的字段名2Target typeBinary目标变量是二分类问题比如 0/1是/否3Original data shape(576, 9)原始数据576行 × 9列8个特征 1个目标变量4Transformed data shape(576, 9)经过预处理后的数据形状不变因为目前没有做变换5Transformed train set shape(403, 9)训练集403行占 576 的 70%6Transformed test set shape(173, 9)测试集173行占 576 的 30%7Numeric features8数值型特征有 8 个目标变量不算在内⚙️ 预处理配置序号描述值含义8PreprocessTrue启用了自动预处理PyCaret 默认帮你做缺失值填充、编码等9Imputation typesimple缺失值填充方式为简单填充10Numeric imputationmean数值型特征的缺失值用均值填充11Categorical imputationmode类别型特征的缺失值用众数填充 交叉验证配置序号描述值含义12Fold GeneratorStratifiedKFold使用分层K折交叉验证保持类别比例13Fold Number1010折交叉验证14CPU Jobs-1使用所有可用的 CPU 核心-1 表示全部15Use GPUFalse未使用 GPU 加速 实验记录序号描述值含义16Log ExperimentFalse不自动记录实验日志17Experiment Nameclf-default-name实验默认名称clf classification18USIa95b唯一的会话标识符Unique Session ID用于追踪此次实验 关键发现数据拆分比例你之前用sample(frac0.75)抽取了 75%576行作为训练集但 PyCaret 的setup()又自动按70%/30%拆分了训练集内部的数据训练集403 行576 × 70%验证集/测试集173 行576 × 30%也就是说data本身就是你从原始数据中取的 75%现在 PyCaret 又把它拆成了 70%/30%用于训练过程中的验证。你的数据应该是二分类问题目标变量Class variable只有两个取值。预处理已自动启用PreprocessTrue意味着 PyCaret 会自动处理缺失值、编码类别变量等。best_model compare_models()这行代码best_model compare_models()是 PyCaret 中最核心、最强大的功能之一。它的作用是自动训练和评估多个机器学习模型并返回性能最好的那一个best_models compare_models( include[rf, dt, xgboost, lightgbm], turboFalse, sortAUC, n_select3 )tuned_model tune_model(best_model, search_libraryscikit-learn, search_algorithmrandom)tune_model()通过随机搜索算法在指定的参数空间中寻找使模型表现最好的超参数组合并返回调优后的模型。 参数详解1️⃣best_model含义要调优的模型对象说明这是你之前通过compare_models()获得的最佳模型在你的例子中是 Ridge Classifier注意这里传入的是模型对象不是模型名称字符串2️⃣search_libraryscikit-learn含义指定使用哪个库的搜索算法参数值scikit-learn(默认)使用 sklearn 的RandomizedSearchCV或GridSearchCVoptuna使用 Optuna 库更高效的贝叶斯优化需先pip install optunascikit-optimize使用 skopt 库需先pip install scikit-optimize你的情况使用 scikit-learn 的随机搜索3️⃣search_algorithmrandom含义指定搜索策略/算法参数值当search_libraryscikit-learn时random随机搜索RandomizedSearchCV在参数空间中随机采样组合grid网格搜索GridSearchCV穷举所有参数组合更精确但更慢后台操作flowchart TD A[开始: tune_model] -- B[读取 best_model 的参数空间] B -- C[定义要搜索的超参数范围] C -- D[使用 scikit-learn 的 RandomizedSearchCV] D -- E[在训练集上执行 10 折交叉验证] E -- F[随机采样 N 组参数组合br默认 10 组] F -- G[对每组参数计算交叉验证平均得分] G -- H[找到得分最高的参数组合] H -- I[用最佳参数重新训练模型] I -- J[返回调优后的模型对象] J -- K[打印调优结果汇总]具体步骤确定搜索空间PyCaret 为每个模型预定义了要调优的超参数范围例如 Ridge Classifier 会调优alpha、solver、tol等随机采样在参数空间中随机抽取 10 组默认n_iter10参数组合交叉验证评估对每组参数在训练集上执行 10 折交叉验证选择最佳找到使验证得分最高的参数组合重新训练用找到的最佳参数在整个训练集上重新训练模型返回调优模型返回调优后的模型对象更多参数示例# 增加随机搜索的迭代次数更充分但更慢 tuned_model tune_model( best_model, search_libraryscikit-learn, search_algorithmrandom, n_iter30, # 随机采样 30 组默认 10 optimizeAUC, # 按 AUC 优化默认 Accuracy fold5, # 使用 5 折交叉验证默认 10 choose_betterTrue # 自动比较调优前后保留更好的 )best_auc_model automl(optimizeAUC)automl()函数自动运行模型选择、超参数调优、特征工程等过程返回在指定优化指标这里是 AUC上表现最优的最终模型。unseen_predictions predict_model(tuned_model, datadata_unseen)使用调优后的模型tuned_model对留出集data_unseen进行预测返回包含原始数据和预测结果的 DataFrame。save_model(tuned_model, Final_Model) load_saved_model load_model(Final_Model)保存模型和加载模型