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

使用混淆矩阵遇TypeError报错,求问题排查与解决方法

混淆矩阵报错问题

报错信息

TypeError: loop of ufunc does not support argument 0 of type float which has no callable exp method

已做排查

已确认所有库均正确导入,且已将虚拟变量转换为float类型,但问题仍未解决。

使用的库及代码

导入库代码

import pandas as pd
import numpy as np

# 数据拆分库
from sklearn.model_selection import train_test_split

# 数据可视化库
import matplotlib.pyplot as plt
import seaborn as sns

# 取消显示列数限制
pd.set_option("display.max_columns", None)

# 构建逻辑回归模型相关库
import statsmodels.stats.api as sms
from statsmodels.stats.outliers_influence import variance_inflation_factor
import statsmodels.api as sm
from statsmodels.tools.tools import add_constant
from sklearn.linear_model import LogisticRegression

# 评估指标相关库
from sklearn.metrics import (
    f1_score,
    accuracy_score,
    recall_score,
    precision_score,
    confusion_matrix,
    roc_auc_score,
    precision_recall_curve,
    roc_curve,
    make_scorer
)

# 决策树分类器相关库
from sklearn.tree import DecisionTreeClassifier
from sklearn import tree

# 模型调优相关库
from sklearn.model_selection import GridSearchCV
from sklearn.metrics import confusion_matrix, ConfusionMatrixDisplay

from sklearn.datasets import make_classification
from sklearn.metrics import confusion_matrix, ConfusionMatrixDisplay
from sklearn.model_selection import train_test_split

模型性能评估函数

def model_performance_classification_statsmodels(
    model, predictors, target, threshold=0.5
):
    """
    计算分类模型各项性能指标的函数

    model: 分类器
    predictors: 自变量
    target: 因变量
    threshold: 将样本分类为1类的阈值
    """

    # 判断预测概率是否大于阈值
    pred_temp = model.predict(predictors) > threshold
    # 四舍五入得到分类结果
    pred = np.round(pred_temp)

    acc = accuracy_score(target, pred)  # 计算准确率
    recall = recall_score(target, pred)  # 计算召回率
    precision = precision_score(target, pred)  # 计算精确率
    f1 = f1_score(target, pred)  # 计算F1分数

    # 构建指标结果DataFrame
    df_perf = pd.DataFrame(
        {"Accuracy": acc, "Recall": recall, "Precision": precision, "F1": f1,},
        index=[0],
    )

    return df_perf

混淆矩阵绘制函数

def confusion_matrix_statsmodels(model, predictors, target, threshold=0.5):
    """
    绘制带百分比的混淆矩阵

    model: 分类器
    predictors: 自变量
    target: 因变量
    threshold: 将样本分类为1类的阈值
    """
    y_pred = model.predict(predictors) > threshold
    cm = confusion_matrix(target, y_pred)
    labels = np.asarray(
        [
            ["{0:0.0f}".format(item) + "\n{0:.2%}".format(item / cm.flatten().sum())]
            for item in cm.flatten()
        ]
    ).reshape(2, 2)

    plt.figure(figsize=(6, 4))
    sns.heatmap(cm, annot=labels, fmt="")
    plt.ylabel("真实标签")
    plt.xlabel("预测标签")

内容的提问来源于stack exchange,提问作者Catryna Rodriguez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 19:37:29