如何在Flux.jl中配置并使用One-Hot Encoding(独热编码)
Flux.jl 符号类型分类型数据的One-Hot编码实现
依赖导入
Flux内置了完整的One-Hot编码工具,无需额外安装第三方包,直接导入即可使用:
using Flux
核心编码操作
你存储的符号类型数据可以直接传入Flux的编码函数,不需要提前转成数值类型,示例如下:
假设你的分类型样本为:labels = [:cat, :dog, :bird, :cat, :bird, :dog]
所有去重后的类别集合为:classes = unique(labels)
稀疏格式编码(推荐)
Flux默认输出的OneHotArray是稀疏存储结构,占用内存低,可直接传入模型参与运算,无需额外转换:
# 单个符号样本转One-Hot向量 single_onehot = Flux.onehot(:dog, classes) # 批量符号数组转One-Hot矩阵 batch_onehot = Flux.onehotbatch(labels, classes)
密集格式编码
如果需要使用标准Julia数组格式的0-1矩阵,对编码结果调用Array转换即可:
dense_onehot = Array(batch_onehot)
配套反向转换操作
模型推理输出概率结果后,可以用Flux.onecold直接转回原始符号类型的分类结果:
# 示例:3分类模型输出的概率向量 model_output = [0.1, 0.8, 0.1] predicted_label = Flux.onecold(model_output, classes) # 输出结果为:dog
注意事项
- 训练和推理阶段使用的
classes集合顺序必须完全一致,否则会出现标签匹配错误 - 若存在缺失值,可将缺失值单独设置为一个特殊符号类别(如
:missing)后再做编码
内容的提问来源于stack exchange,提问作者logankilpatrick
相关产品推荐
相关产品推荐

