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

如何在不同机器间同步Polars的Categorical物理编码?

实现Polars Categorical跨机器一致编码的方案

不需要依赖pl.StringCache的全局状态,直接通过预定义分类列表的方式就能保证不同机器上的Categorical物理编码一致,全程用Polars实现:

训练机器端:保存分类编码规则

在训练时提取Categorical的分类列表并持久化,建议包含所有可能出现的类别(包括推理阶段可能遇到的):

import polars as pl
import json

with pl.StringCache():
    # 训练数据的Categorical系列
    s1 = pl.Series("color", ["red", "green", "red"], dtype=pl.Categorical)
    # 获取完整分类列表(若有多个训练数据集,建议合并所有唯一类别)
    all_categories = s1.cat.categories().to_list()
    # 将分类列表保存到文件(也可使用pickle等格式)
    with open("categorical_codes.json", "w") as f:
        json.dump(all_categories, f)

推理机器端:加载并应用编码规则

加载保存的分类列表,创建或转换Categorical系列时强制使用该规则:

import polars as pl
import json

# 加载预定义的分类列表
with open("categorical_codes.json", "r") as f:
    saved_categories = json.load(f)

# 方式1:创建Series时直接指定分类规则
s2 = pl.Series(
    "color",
    ["blue", "red", "green"],
    dtype=pl.Categorical.with_categories(saved_categories)
)

# 方式2:对已有Series转换为指定分类(处理未知类别)
# s2 = pl.Series("color", ["blue", "red", "green"], dtype=pl.Categorical)
# s2 = s2.cat.set_categories(saved_categories, strict=False)

关键说明

  • pl.Categorical.with_categories()会直接基于指定的分类列表生成编码,完全不依赖全局的StringCache,确保跨机器的编码一致性。
  • 如果推理时遇到训练时未出现的类别(比如示例中的blue),strict=False会将其转换为null;若需要保留未知类别,训练时就要提前把所有可能的类别加入到all_categories中。
  • 验证编码一致性:可通过cat.codes()方法查看物理编码,相同类别在两台机器上的编码值完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 14:20:22