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

使用H2O AutoML处理kr-vs-kp数据集时多分类异常问题排查

问题:H2O AutoML误将二分类任务识别为多分类任务

问题场景

处理kr-vs-kp数据集时,目标列仅包含"nowin"和"win"两个取值,属于二分类任务,但模型训练完成后被识别为多分类任务——无法调用accuracy()方法(抛出AttributeError),且混淆矩阵显示存在三类标签。

执行代码

info = h2o.import_file("kr-vs-kp.csv")
train,test = info.split_frame(ratios=[.75])

x = train.columns
y = x.pop()

train[y] = train[y].asfactor() #无变化
test[y] = test[y].asfactor()   #无变化

automl = h2o.automl.H2OAutoML(max_runtime_secs=900)

automl.train(x=x, y=y, training_frame=train)

perf = automl.leader.model_performance(test)

print("perf type:", type(perf))

print("Algorithm", automl.leader.show())

print("Confusion Matrix", perf.confusion_matrix())
print("Accuracy score", perf.accuracy())

输出结果

perf type: <class 'h2o.model.metrics.multinomial.H2OMultinomialModelMetrics'>

Algorithm GBM_1_AutoML_1_20230217_142818

Confusion Matrix Confusion Matrix: Row labels: Actual class; Column labels: Predicted class
class   nowin   won Error   Rate
-------  -------  -----  ---------  --------
0       0       0   nan     0 / 0
0       341     14  0.0394366  14 / 355
0       16      402 0.0382775  16 / 418
0       357     416 0.0388098  30 / 773

AttributeError: type object 'MetricsBase' has no attribute 'accuracy'

问题根源

文件首行的列名被H2O识别为数据行,导致目标列新增了"class"标签(首行列名的最后一个字段),最终目标列存在三个取值,模型因此判定为多分类任务。

原因分析与解决办法

可能原因

  1. 文件编码或格式异常:首行存在不可见字符、换行符不规范,或编码非标准UTF-8,导致H2O自动识别首行失败
  2. H2O自动识别逻辑偏差:部分文件特征触发了import_file的自动header识别错误,即使默认参数header=True也未生效

解决步骤

  1. 强制指定列名行:导入文件时显式设置header=1,强制将第一行作为列名:
    info = h2o.import_file("kr-vs-kp.csv", header=1)
    
  2. 验证数据导入结果:检查目标列的唯一取值,确认仅包含"nowin"和"win":
    print(info[y].unique())
    
  3. 预处理文件:手动检查CSV文件,确保首行无多余空格、特殊字符,文件编码为UTF-8,行尾换行符统一为LF或CRLF

内容的提问来源于stack exchange,提问作者Vladislav Daniel Kovalevsky

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 04:30:59