模型预测笔记(三):通过交叉验证网格搜索机器学习的最优参数

博客介绍了网格搜索这一超参数优化方法,包括其步骤、优缺点,还列举了GridSearchCV的参数及适用的评分指标。通过Python代码展示了如何用网格搜索优化决策树模型的参数,评估模型在测试集上的性能,如准确率、分类报告等,为分类问题的模型训练和分析提供示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


✅💖⚠️▶️➡️🌿🍀🍄🌟⭐❄️✅💖⚠️▶️➡️🌿🍀🍄🌟⭐❄️✅💖⚠️▶️➡️🌿🍀🍄🌟⭐❄️✅💖⚠️

网络搜索🌟

介绍🌟

网格搜索(Grid Search)是一种超参数优化方法,用于选择最佳的模型超参数组合。在机器学习中,超参数是在训练模型之前设置的参数,无法通过模型学习得到。网格搜索通过尝试所有可能的超参数组合,并使用交叉验证来评估每个组合的性能,从而确定最佳的超参数组合。

步骤🌟

网格搜索的步骤如下:

  1. 定义要调整的超参数范围:确定要调整的每个超参数的可能取值范围。例如,学习率、正则化参数等。
  2. 创建参数网格:将每个超参数的可能取值组合成一个参数网格。
  3. 定义评估指标:选择一个评估指标来衡量每个超参数组合的性能。例如,准确率、均方误差等。
  4. 构建模型和交叉验证:选择一个机器学习模型,并定义交叉验证策略,将数据集分成训练集和验证集。
  5. 执行网格搜索:对于每个超参数组合,在交叉验证的每个训练集上训练模型,并在验证集上评估模型性能。
  6. 选择最佳超参数组合:根据评估指标的结果,选择具有最佳性能的超参数组合。
  7. 用最佳超参数训练模型:使用最佳超参数组合在整个训练数据集上重新训练模型。

网格搜索的优点是能够系统地尝试不同的超参数组合,找到最佳的模型性能。然而,由于需要尝试所有可能的组合,网格搜索的计算成本较高,尤其是超参数的数量较多时。因此,对于大型数据集和复杂模型,网格搜索可能会变得非常耗时。

为了减少计算成本,可以使用随机搜索(Randomized Search)等其他超参数优化方法,或者使用启发式方法来选择最佳超参数组合。

参数🌟

GridSearchCV的参数包括:

  • estimator:要使用的模型或者估计器对象。
  • param_grid:一个字典或者列表,包含要进行网格搜索的参数和对应的取值范围。
  • scoring:评估模型性能的指标,可以是字符串(使用模型的内置评估指标)或者可调用对象(自定义评估指标)。
  • cv:交叉验证的折数或者交叉验证迭代器。
  • n_jobs:并行运行的作业数量。-1表示使用所有可用的处理器。
  • verbose:控制详细程度的整数值。0表示不输出任何信息,大于1表示输出详细的信息。
  • refit:如果为True(默认值),则在找到最佳参数后,使用最佳参数重新拟合整个数据集。
  • return_train_score:如果为True,则同时返回训练集上的得分。
  • error_score:当模型在某些参数组合下发生错误时,用于返回的分数。可以设置为’raise’(抛出错误)或者数字(返回指定的分数)。
  • verbose:控制详细程度的整数值。0表示不输出任何信息,大于1表示输出详细的信息。

注意:

在GridSearchCV中,scoring参数可以选择以下评分指标:

回归问题:

  • ‘explained_variance’:可解释方差
  • ‘neg_mean_absolute_error’:负平均绝对误差
  • ‘neg_mean_squared_error’:负均方误差
  • ‘neg_mean_squared_log_error’:负对数均方误差
  • ‘neg_median_absolute_error’:负中位数绝对误差
  • ‘r2’:R^2决定系数

二分类问题:

  • ‘accuracy’:准确率
  • ‘balanced_accuracy’:平衡准确率
  • ‘average_precision’:平均精确率
  • ‘f1’:F1得分
  • ‘precision’:精确率
  • ‘recall’:召回率
  • ‘roc_auc’:ROC曲线下的面积
    多分类问题:
  • ‘accuracy’:准确率
  • ‘balanced_accuracy’:平衡准确率
  • ‘average_precision’:平均精确率
  • ‘f1_micro’:微观平均F1得分
  • ‘f1_macro’:宏观平均F1得分
  • ‘precision_micro’:微观平均精确率
  • ‘precision_macro’:宏观平均精确率
  • ‘recall_micro’:微观平均召回率
  • ‘recall_macro’:宏观平均召回率
  • ‘roc_auc_ovr’:基于一对多的ROC曲线下的面积

请注意,不同问题类型和评估指标之间的兼容性可能会有所不同。

5折交叉验证就是把数据集分成5份,然后进行5此测试,如model1就是将第一折fold1的数据作为测试集,其余的四份作为数据集。最后每个model都计算出来一个准确度accuracy,求平均后作为此验证集的精确度。

代码实现🌟

以下是对上述 Python 代码的详细分析:

  1. 导入必要的库和模块
from sklearn.model_selection import GridSearchCV
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import classification_report, roc_curve, auc
import pandas as pd
import matplotlib.pyplot as plt

代码导入了 GridSearchCV 用于进行网格搜索以找到最优参数组合,DecisionTreeClassifier 作为分类模型,以及一些用于评估模型性能的指标函数和数据处理、绘图的库。

  1. 定义超参数搜索空间
parameters = {'max_depth':[3, 5, 7, 9], 'min_samples_leaf': [1, 2, 3, 4]}

这里选择了决策树的两个重要超参数 max_depth(树的深度)和 min_samples_leaf(叶子节点的最小样本数),并分别定义了它们的搜索范围。

  1. 执行网格搜索
clf = GridSearchCV(DecisionTreeClassifier(), parameters, cv=3, scoring='accuracy')
clf.fit(X_train, y_train)

使用定义的超参数空间和 3 折交叉验证(cv=3)以及准确率作为评估指标(scoring='accuracy'),对决策树分类器进行网格搜索。然后使用训练数据 X_train 和对应的标签 y_train 进行训练,找到最优的参数组合。

  1. 输出最优参数和验证集最高得分
print('最优参数:', clf.best_params_)
print('验证集最高得分:', clf.best_score_)

打印出通过网格搜索找到的最优参数组合和在验证集上达到的最高准确率得分。

  1. 获取最优模型并评估测试集准确率
best_model = clf.best_estimator_
print('测试集上准确率:', best_model.score(X_test, y_test))

获取具有最优参数的决策树模型,并计算其在测试集 X_testy_test 上的准确率。

  1. 计算预测概率和标签
y_prob_DT = clf.predict_proba(X_test)[:, 1]
y_pred_DT = clf.predict(X_test)

分别计算测试集上的预测概率(取第二列,通常对应正类的概率)和预测标签。

  1. 生成分类报告
print(classification_report(y_pred = y_pred_DT, y_true = y_test))

使用预测标签和真实标签生成分类报告,展示模型在各个类别上的准确率、召回率、F1 值等指标。

  1. 绘制 ROC 曲线并计算 AUC 值
fpr, tpr, threshold = roc_curve(y_score = y_prob_DT, y_true = y_test)
print("AUC值", auc(fpr, tpr))
plt.plot(fpr, tpr,"r-")
plt.plot([0, 1], [0, 1],"b-")
plt.xlable("FPR")
plt.ylable("TPR")
plt.title("ROC Curve")

通过预测概率和真实标签计算 ROC 曲线的假正率(fpr)、真正率(tpr)和阈值,然后计算 AUC 值,并绘制 ROC 曲线,其中红色曲线为模型的 ROC 曲线,蓝色直线为随机猜测的参考线。

  1. 输出结果到文件
result = pd.DataFrame()
result["load_ID"] = pd.read_csv("***.csv")["**ID"]
result["predict_labels"] = y_pred_DT
result.to_csv("result.csv", index = False)

创建一个包含预测标签和从指定 CSV 文件读取的 load_ID 的 DataFrame,并将结果保存到 result.csv 文件中。

  1. 特征重要性评估和绘制
best_DT = clf.best_estimator_
best_DT.fit(X_train, y_train)
plt.figure(figsize(8, 6))
pd.Series(best_DT.feature_importances_, index=X_train.columns).sort_values().plot(kind="barh")

使用最优决策树模型重新拟合训练数据,获取特征重要性,并以水平柱状图的形式绘制出来,展示各个特征在模型中的相对重要性。

总体而言,这段代码完整地展示了如何使用网格搜索优化决策树模型的参数,评估模型在测试集上的性能,包括准确率、分类报告、ROC 曲线和 AUC 值,以及输出预测结果和分析特征重要性,为分类问题的模型训练和分析提供了一个全面的示例。
✅💖⚠️▶️➡️🌿🍀🍄🌟⭐❄️✅💖⚠️▶️➡️🌿🍀🍄🌟⭐❄️✅💖⚠️▶️➡️🌿🍀🍄🌟⭐❄️✅💖⚠️

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZZY_dl

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值