如何基于自定义条件实现两分类One Hot编码
自定义条件规则的二分类One Hot编码实现方案
这类带自定义阈值的One Hot编码不需要修改常规编码逻辑,只需要前置一步条件映射,把原始值先归到目标的2个分类中,再做编码即可,以下是几种常用实现方式:
原生Python无依赖实现
不需要安装第三方库,直接遍历序列按规则生成编码:# 待编码原始序列 raw_data = [1, 2, 3, 5] encoded_result = [] for value in raw_data: if value < 3: encoded_result.append([1, 0]) else: encoded_result.append([0, 1]) print(encoded_result) # 输出结果:[[1, 0], [1, 0], [0, 1], [0, 1]]NumPy向量化实现(适合大规模数据)
面向数组操作,运行效率远高于原生循环,适合处理大批量数值序列:import numpy as np raw_data = np.array([1, 2, 3, 5]) # 初始化shape为(样本数, 2)的全0编码矩阵 encoded_result = np.zeros((len(raw_data), 2), dtype=int) # 生成阈值掩码 less_than_3_mask = raw_data < 3 # 按掩码给对应位置赋值 encoded_result[less_than_3_mask, 0] = 1 encoded_result[~less_than_3_mask, 1] = 1 print(encoded_result) # 输出结果: # [[1 0] # [1 0] # [0 1] # [0 1]]Scikit-learn流水线适配实现
如果需要接入现有sklearn特征处理流水线,可以先做二值标签映射,再调用标准One Hot编码组件:import numpy as np from sklearn.preprocessing import OneHotEncoder raw_data = np.array([1, 2, 3, 5]).reshape(-1, 1) # 第一步:按自定义规则把原始值映射为0、1两类标签 binary_labels = np.where(raw_data < 3, 0, 1) # 第二步:调用常规OneHotEncoder完成编码 encoder = OneHotEncoder(sparse_output=False, dtype=int) encoded_result = encoder.fit_transform(binary_labels) print(encoded_result) # 输出结果: # [[1 0] # [1 0] # [0 1] # [0 1]]
核心思路提示:所有自定义规则的定长One Hot编码,都可以拆解为「自定义规则映射离散标签」+「标准One Hot编码」两个步骤,不需要重构原有编码逻辑,只需要根据业务规则调整第一步的映射规则即可。
内容的提问来源于stack exchange,提问作者cocojambo
相关产品推荐
相关产品推荐

