Python逻辑回归调用confusion_matrix报错len() of unsized object如何解决
报错原因
- 传入
confusion_matrix的X_train_p或y_train_p不属于可计算长度的序列类对象,常见的情况包括参数是单个标量、零维数组、未转换格式的深度学习框架张量,或是预测逻辑出错返回了模型对象、空值等非序列类型。 - 部分低版本scikit-learn不支持直接读取Pytorch/TensorFlow张量类的长度,即使张量本身是一维结构,也会触发该报错。
解决方法
- 先添加调试代码确认两个参数的类型和结构:
print(type(X_train_p), X_train_p.shape if hasattr(X_train_p, 'shape') else len(X_train_p), X_train_p) print(type(y_train_p), y_train_p.shape if hasattr(y_train_p, 'shape') else len(y_train_p), y_train_p)
如果输出显示参数为单个数值、零维结构,说明生成预测值X_train_p的逻辑存在错误,需要修正代码保证两个参数均为长度一致的一维标签序列。
- 若参数为深度学习框架张量,先转换为numpy数组再传入:
# Pytorch张量转换示例 X_train_p = X_train_p.detach().cpu().numpy() y_train_p = y_train_p.detach().cpu().numpy() # TensorFlow张量转换示例 X_train_p = X_train_p.numpy() y_train_p = y_train_p.numpy()
- 若你传入的是逻辑回归输出的二维概率数组,需要先通过
argmax(axis=1)取出最大概率对应的类别标签,再传入混淆矩阵函数:
X_train_p = model.predict_proba(X_train).argmax(axis=1)
内容的提问来源于stack exchange,提问作者boerndt
相关产品推荐
相关产品推荐

