OneHotEncoder多列

时间:2019-03-05 17:07:00

标签: pandas machine-learning scikit-learn one-hot-encoding

我正在尝试将具有多个列的数据表编码为一组给定的类别

ohe1 = OneHotEncoder(categories = [list_names_data_rest.values],dtype = 'int8')
data_rest1 = ohe1.fit_transform(data_rest.values).toarray()

在这里,list_names_data_rest.values是形状的数组(664,)。我有664个独特功能,我正在尝试将data_rest编码为(5050,6)。编码后,我希望有一个形状(5050,664)

我是对预定义功能集的一种热编码,因为我正在分块下载数据集(由于ram限制),我希望神经网络的输入形状保持一致

如果我使用pd.get_dummies,则根据我的数据集,我可以为NN获得不同的类别和不同的输入形状

ohe1.fit_transform确实需要一个形状(n_values,n_features),但是我不知道如何处理。

2 个答案:

答案 0 :(得分:0)

HashingVectorizer可能是一个适合您的情况的解决方案。它与输入功能的数量无关,只需将初始大小设置为足够大即可。

答案 1 :(得分:0)

如果您希望使用pd.get_dummies,则可以选择为每个批次迭代地添加编码。

第一批:

ohe = pd.get_dummies(data_rest, columns=['label_col'])

对于每个后续批次:

for b in batches:
    batch_ohe = pd.get_dummies(b, columns=['label_col'])
    ohe = pd.concat([ohe, batch_ohe], axis=0)

ohe = ohe.fillna(0)