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

Streamlit加载XGBClassifier预测报Unicode-3 is not supported错如何解决

错误产生原因

该报错与模型加载方式无关,pkl反序列化、json加载模型的两种逻辑本身没有问题,故障点在传入clf.predict()的输入参数feat_list:
你所用的1.6.0版本XGBoost底层数据解析接口,不支持直接识别原生Python列表中存储的Unicode格式字符串。即使开启enable_categorical=True参数,该版本XGBoost也仅支持两类输入:一是全数值类型的数组/矩阵,二是pandas结构中提前声明为category类型的分类特征,直接传入包含原生字符串的列表时,底层解析碰到不支持的Unicode类型就会抛出该错误。

修复方案
  • 不要直接传入存储了字符串值的原生Python列表给预测接口,优先将输入特征转换为列顺序、列名与训练阶段完全一致的pandas DataFrame:
    转换完成后,将所有分类特征列的类型强制设置为category,不得保留string/object类型的列,参考实现:
    import pandas as pd
    
    # 列名、列顺序必须和模型训练时的特征输入完全对齐
    feat_df = pd.DataFrame(
        [feat_list],
        columns=["col1", "col2", "col3"] # 替换为训练时实际使用的特征名、按训练顺序排列
    )
    # 将所有分类特征列转换为category类型
    cat_columns = ["cat_col1", "cat_col2"] # 替换为实际的分类特征列名
    for col in cat_columns:
        feat_df[col] = feat_df[col].astype("category")
    
    # 传入模型预测
    predict_result = clf.predict(feat_df)
    
  • 如果不使用pandas作为输入载体,需要提前对所有字符串格式的分类特征做标签编码,把所有特征值转换为整数/浮点数类型,再构造成numpy数组传入预测接口,确保输入结构中不存在任何字符串类型的值。
  • 做一致性校验:训练阶段如果对分类特征做了自定义编码,预测阶段必须复用完全相同的编码规则,禁止出现训练时用整数编码、预测时传入原始字符串的不匹配问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 03:21:26