在Scikit-Learn中多次训练分类器以获取指标平均值
多次训练分类器获取稳定指标平均值的实现
我发现每次训练分类器时,*false positive rate(假阳性率)和false negative rate(假阴性率)*这类指标的结果总是存在波动。为了得到更可靠的评估结果,我打算通过重复训练100次分类器,然后计算各项指标的平均值来降低随机性的影响。
下面是我写的相关代码片段(包含后续计算平均值的部分):
import numpy as np print('Executing Logistic Regression') all_fpr = [] all_tpr = [] all_roc_auc = [] all_acc = [] all_recall = [] # 重复训练100次 for i in range(0, 100): # 调用自定义方法获取当前训练的各项指标 lr_values = lrRocAucTest.execute(X_train, y_train, X_test, y_test) all_fpr.append(lr_values['fpr']) all_tpr.append(lr_values['tpr']) all_roc_auc.append(lr_values['roc_auc']) all_acc.append(lr_values['acc']) all_recall.append(lr_values['recall']) # 计算各项指标的平均值 mean_fpr = np.mean(all_fpr, axis=0) mean_tpr = np.mean(all_tpr, axis=0) mean_roc_auc = np.mean(all_roc_auc) mean_acc = np.mean(all_acc) mean_recall = np.mean(all_recall) # 输出平均结果 print(f"Mean False Positive Rate: {mean_fpr}") print(f"Mean True Positive Rate: {mean_tpr}") print(f"Mean ROC AUC: {mean_roc_auc}") print(f"Mean Accuracy: {mean_acc}") print(f"Mean Recall: {mean_recall}")
代码说明:
- 首先初始化多个列表,用来存储100次训练中每一次的指标结果;
- 通过
for循环执行100次分类器训练,每次调用lrRocAucTest.execute()获取当前训练的假阳性率(fpr)、真阳性率(tpr)、ROC AUC、准确率(acc)和召回率(recall),并添加到对应列表中; - 循环结束后,使用
numpy的mean()函数计算每个指标的平均值,这样就能得到消除单次训练随机性后的稳定指标结果。
内容的提问来源于stack exchange,提问作者cod3min3
相关产品推荐
相关产品推荐

