机器学习任务:将蘑菇数据集分类特征编码为二进制格式
解决分类特征到自定义二进制编码的转换问题
看起来你已经明确了蘑菇数据集中特定分类特征的自定义二进制映射规则,下面是用Python实现这个转换的具体方案,完全适配你现有的代码流程:
步骤1:定义特征编码映射字典
首先把你指定的每个分类值和对应的二进制数组一一对应起来,用字典存储最直观:
# 自定义特征到二进制编码的映射表 encoding_map = { 'x': [0, 0, 1], 's': [0, 1, 0], 'n': [0, 1, 1], 'y': [1, 0, 0] }
步骤2:处理单条特征示例
针对你给出的示例输入x s n x s y,可以这样转换:
# 拆分输入字符串为单个特征列表 input_features = "x s n x s y".split() # 逐个映射并格式化输出 encoded_result = ", ".join([" ".join(map(str, encoding_map[feat])) for feat in input_features]) print(encoded_result)
运行后会输出你需要的结果:
0 0 1, 0 1 0, 0 1 1, 0 0 1, 0 1 0, 1 0 0
步骤3:批量处理CSV读取的特征数据
结合你已经用numpy读取的features数组(形状为(样本数, 22)的字符串数组),可以用np.vectorize实现批量转换:
import numpy as np # 读取数据的代码(你已经写好的部分) mushroom = np.genfromtxt('dane/mushroom.csv', delimiter=',' ,dtype=str) features = mushroom[:, range(1,23)] classes = mushroom[:,0] # 把编码逻辑转为可批量处理的函数 encode_feature = np.vectorize(lambda val: encoding_map[val]) # 批量转换所有特征 encoded_features = encode_feature(features) # 此时encoded_features的形状为 (样本数, 22, 3),如果需要展平成一维特征可以用: flattened_encoded = encoded_features.reshape(encoded_features.shape[0], -1)
这个方案的好处是扩展性强——后续如果需要添加其他特征的编码规则,只需要在encoding_map里新增键值对即可,完全适配你现有的算法输入要求。
内容的提问来源于stack exchange,提问作者Kamil Septio Trojnar
相关产品推荐
相关产品推荐

