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

使用二维嵌套列表训练CatBoost分类器时特征识别错误问题咨询

问题根源

CatBoost 对未做类型规整的 Python 原生嵌套列表的维度解析存在缺陷,不会自动将内层列表的1455个元素识别为独立特征列,反而会把整行的内层列表内容封装为单个字符串形式的特征值,触发数值特征的类型校验报错。
注意不要为了规避报错随意将整行内容标记为类别特征,这类操作会完全违背1455个独立数值特征的建模初衷。

修复步骤
  • 第一步:优先将嵌套列表转换为 CatBoost 原生完全兼容的规整格式,避免解析逻辑出错
    推荐使用 NumPy 数组格式转换,代码如下:
    import numpy as np
    # 强制指定浮点类型,消除隐式类型转换风险
    x_train = np.array(x_train, dtype=np.float64)
    # 严格校验输出形状,确认维度为(85276, 1455)无嵌套错乱
    print(f"转换后特征矩阵形状: {x_train.shape}")
    
    也可选择转换为 Pandas DataFrame 格式,同样兼容:
    import pandas as pd
    x_train = pd.DataFrame(x_train)
    # 校验全表数据类型,确保没有混入字符串、嵌套列表
    print(f"特征矩阵所有列类型: {x_train.dtypes.unique()}")
    
  • 第二步:转换完成后做单值校验,彻底排除结构问题
    取首个样本的首个特征值,确认其类型为单浮点数值,而非列表或字符串:
    # NumPy 格式校验示例
    print(f"单值类型: {type(x_train[0, 0])}")
    # Pandas DataFrame 格式校验示例
    print(f"单值类型: {type(x_train.iloc[0, 0])}")
    
    正常输出应为 <class 'numpy.float64'> 或 <class 'float'>,如果返回类型为列表、字符串,说明原始嵌套列表存在三维嵌套的结构错误(比如每一行的元素又被包了一层列表),需要手动拆解多余的嵌套层级。
  • 第三步:用转换后的规整数据重新执行模型训练,原有训练代码无需修改即可正常运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.22 10:54:00