You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 11:30:08