sklearn新版混淆矩阵调用报错:TypeError参数过多求助
解决scikit-learn新版中混淆矩阵绘制的TypeError问题
问题原因
scikit-learn 1.0及以上版本已彻底移除旧的plot_confusion_matrix函数,你沿用旧版调用方式(直接传入模型、测试特征、真实标签三个位置参数)会触发TypeError,因为新版API的参数结构已完全调整。
修复方案
使用ConfusionMatrixDisplay提供的from_estimator()或from_predictions()方法替代旧函数,以下是修改后的完整代码:
from sklearn.model_selection import train_test_split from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.naive_bayes import MultinomialNB from sklearn.metrics import confusion_matrix, ConfusionMatrixDisplay, classification_report import matplotlib.pyplot as plt # 需导入matplotlib用于显示图像 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=101) tfidf = TfidfVectorizer(stop_words='english') tfidf.fit(X_train) X_train_tfidf = tfidf.transform(X_train) X_test_tfidf = tfidf.transform(X_test) nb = MultinomialNB() nb.fit(X_train_tfidf, y_train) def report(model): preds = model.predict(X_test_tfidf) print(classification_report(y_test, preds)) # 方法1:直接通过模型生成混淆矩阵可视化 disp = ConfusionMatrixDisplay.from_estimator( model, X_test_tfidf, y_test, display_labels=['negative', 'neutral', 'positive'], cmap='Blues' ) disp.figure_.suptitle("Confusion Matrix") plt.show() print("NB MODEL") report(nb)
若你已提前得到预测结果,也可以用更灵活的from_predictions()方式:
def report(model): preds = model.predict(X_test_tfidf) print(classification_report(y_test, preds)) # 方法2:基于预测结果生成混淆矩阵可视化 cm = confusion_matrix(y_test, preds) disp = ConfusionMatrixDisplay(confusion_matrix=cm, display_labels=['negative', 'neutral', 'positive']) disp.plot(cmap='Blues') plt.show()
关键说明
- 必须导入
matplotlib.pyplot模块才能调用plt.show()显示混淆矩阵图像。 display_labels参数需手动指定与数据集一致的类别名称,避免标签顺序混乱。
内容的提问来源于stack exchange,提问作者Tanner Tolman
相关产品推荐
相关产品推荐

