如何获取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
相关产品推荐
相关产品推荐

