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

逻辑回归ROC-AUC计算报错:dtype='numeric'与字节/字符串数组不兼容

解决roc_auc_score的ValueError问题

错误原因

这个报错的核心是真实标签(y_test)或模型预测结果的类型不是数值型,而是字符串/字节类型,导致roc_auc_score无法处理。即使你对output_test做了dtype=float转换,如果原始y_test是字符串(比如"0"、"1"这类文本标签),直接转float会存在隐藏类型问题;另外如果训练时y_train是字符串,模型预测的结果也会是字符串类型,同样会触发错误。

修复步骤

  1. 转换训练标签为数值型
    训练模型前,先把y_train转换成数值类型,确保模型学习的是数值标签:

    # 将y_train从字符串转为数值(假设标签是二分类的"0"/"1"或类似文本)
    y_train = np.array(y_train, dtype=np.float64)
    y = y_train.reshape(-1, 1)
    model_lr = LogisticRegression()
    res = model_lr.fit(X, y)
    
  2. 正确转换测试标签为数值型
    不要只做reshape,先处理原始y_test的类型:

    # 先转换y_test为数值型,再reshape
    output_test = np.array(y_test, dtype=np.float64).reshape(-1, 1)
    
  3. 验证预测结果的类型
    可以打印model_lr.predict(test)的类型和值,确认是数值型:

    pred = model_lr.predict(test)
    print(pred.dtype)  # 应输出float64或int64
    print(pred)        # 应是0/1这类数值,而非字符串
    

优化后的完整代码示例

import numpy as np
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import roc_auc_score, roc_curve

# 处理训练数据
X = X_train.reshape(-1, 2)  # 用-1自动计算行数更合理
y_train = np.array(y_train, dtype=np.float64)
y = y_train.reshape(-1, 1)

# 训练模型
model_lr = LogisticRegression()
model_lr.fit(X, y)

# 处理测试数据
X_test = np.array(X_test, dtype=np.float64).reshape(-1, 2)
output_test = np.array(y_test, dtype=np.float64).reshape(-1, 1)

# 计算ROC AUC
logit_roc_auc = roc_auc_score(output_test, model_lr.predict(X_test))
print(f"ROC AUC Score: {logit_roc_auc}")

额外注意点

  • 如果你的标签是其他文本(比如"positive"/"negative"),需要先做映射转换:
    label_mapping = {"positive": 1.0, "negative": 0.0}
    y_train = np.array([label_mapping[label] for label in y_train], dtype=np.float64)
    y_test = np.array([label_mapping[label] for label in y_test], dtype=np.float64)
    
  • 避免重复的数组转换操作,比如你之前重复对test做np.array(test,dtype=float),这完全没必要。

内容的提问来源于stack exchange,提问作者Erta Beqiri

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 22:50:43