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

如何获取R1、R2、R3及NA对应的独热编码二进制矩阵?

获取独热编码中每个类别对应的二进制向量/矩阵

首先修正你代码里的小问题:原代码中df['downtime code']应该是df['downtime'],否则会因列名不存在报错。以下是完整实现步骤:

1. 修正并完成独热编码

from sklearn.preprocessing import OneHotEncoder
import pandas as pd
import numpy as np

# 构造示例DataFrame(如果已有df可跳过这步)
df = pd.DataFrame({'downtime': ['R1', 'R1', 'R2', 'R3', 'R1', np.nan]})

# 初始化编码器,设置sparse_output=False直接输出数组,handle_unknown处理未知类别
enc_downtime_code = OneHotEncoder(sparse_output=False, handle_unknown='ignore')
# 用二维数组输入(df[['downtime']]而非df['downtime'])更符合sklearn要求
downtime_code_enc = enc_downtime_code.fit_transform(df[['downtime']])

2. 获取所有类别及对应编码

OneHotEncoder的categories_属性会返回训练时识别到的所有类别,我们可以基于此生成每个类别的独热编码:

方法1:用transform直接生成

遍历每个类别,通过编码器的transform方法得到对应编码:

# 获取所有类别
categories = enc_downtime_code.categories_[0]

# 逐个输出类别与对应编码
for cat in categories:
    # 构造单个样本的二维数组
    sample = [[cat]]
    code = enc_downtime_code.transform(sample)
    print(f"类别 {cat} 的独热编码: {code[0]}")

输出结果类似:

类别 R1 的独热编码: [1. 0. 0. 0.]
类别 R2 的独热编码: [0. 1. 0. 0.]
类别 R3 的独热编码: [0. 0. 1. 0.]
类别 nan 的独热编码: [0. 0. 0. 1.]

方法2:手动构造编码矩阵

由于独热编码的规则是每个类别对应向量中唯一的1,我们可以直接基于类别的顺序生成矩阵:

# 获取类别数量
n_cats = len(categories)
# 构造单位矩阵,每行对应一个类别的编码
category_code_matrix = np.eye(n_cats)

# 关联类别与编码
for cat, code in zip(categories, category_code_matrix):
    print(f"类别 {cat} 的独热编码: {code}")

3. 获取所有类别对应的编码矩阵

如果需要将所有类别的编码整合成一个矩阵,可直接用编码器转换类别数组:

category_code_matrix = enc_downtime_code.transform(categories.reshape(-1, 1))
print("所有类别对应的独热编码矩阵:\n", category_code_matrix)

输出的矩阵每行对应一个类别的独热编码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 15:30:16