使用Logistic Regression遇NameError: name 'label'未定义的解决方法
解决Logistic Regression训练中的NameError与分类指标警告问题
核心错误:NameError: name 'label' is not defined
错误原因
你的Print_metrics函数中,调用confusion_matrix时存在两个问题:
- 传入了未定义的
label变量; confusion_matrix函数不支持average='macro'参数——该参数仅适用于precision_score、recall_score这类指标计算,混淆矩阵不需要它。
修复方案
修改Print_metrics函数中混淆矩阵的调用逻辑:
- 从测试集标签中提取并定义分类标签(排序保证一致性);
- 移除错误的
average参数,正确指定labels参数。
示例修复代码:
# 获取所有分类标签并排序 labels = sorted(y_test.unique()) # 正确调用混淆矩阵 print("Confusion Matrix", confusion_matrix(y_test, y_pred, labels=labels))
次要问题:sklearn分类指标警告
警告原因
当使用average='macro'计算多分类指标时,pos_label='positive'参数会被自动忽略——该参数仅适用于二分类任务的average='binary'模式。
处理方案
- 如果是二分类任务:将
average改为'binary',同时显式指定pos_label(比如pos_label=1); - 如果是多分类任务:直接移除
pos_label参数即可,警告不影响计算结果,仅为提示信息。
完整修复后的Print_metrics函数示例
from sklearn.metrics import confusion_matrix, accuracy_score, recall_score, precision_score, f1_score, roc_auc_score def Print_metrics(y_test, y_pred, model_name): print(f"Model name: {model_name}") # 计算各项分类指标(多分类用macro平均) accuracy = accuracy_score(y_test, y_pred) recall = recall_score(y_test, y_pred, average='macro') precision = precision_score(y_test, y_pred, average='macro') f1 = f1_score(y_test, y_pred, average='macro') auc = roc_auc_score(y_test, y_pred, average='macro') print(f"accuracy {accuracy:.2f}") print(f"recall {recall:.2f}") print(f"precision {precision:.4f}") print(f"F1_score {f1:.4f}") print(f"Area Under the Curve {auc:.2f}") # 修复后的混淆矩阵调用 labels = sorted(y_test.unique()) print("Confusion Matrix", confusion_matrix(y_test, y_pred, labels=labels))
额外注意
确保你的Our_models变量是已定义的分类器实例列表,比如:
from sklearn.tree import DecisionTreeClassifier # 示例:包含逻辑回归和决策树的模型列表 Our_models = [LogisticRegression(), DecisionTreeClassifier()]
内容的提问来源于stack exchange,提问作者Justin Bertsch
相关产品推荐
相关产品推荐

