【问题标题】:How to create by default two columns for every features (One Hot Encoding)?如何默认为每个功能创建两列(一个热编码)?
【发布时间】:2020-09-16 20:43:18
【问题描述】:

我的特征工程针对不同的文档运行。对于某些文档,某些功能不存在,因此子列表仅包含相同的值,例如第三个子列表[0,0,0,0,0]。此子列表的一次热编码仅导致一列,而其他文档的特征列表转换为两列。如果它仅包含一个相同的值并将列插入正确的位置,是否有可能告诉 ohe 也创建两列?主要问题是我的不同文档的特征数据框包含不同数量的列的末尾,这使得它们无法比较。

import pandas as pd 
feature = [[0,0,1,0,0], [1,1,1,0,1], [0,0,0,0,0], [1,0,1,1,1], [1,1,0,1,1], [1,0,1,1,1], [0,1,0,0,0]]

df = pd.DataFrame(feature[0])
df_features_final  = pd.get_dummies(df[0])

for feature in feature[1:]:
    df = pd.DataFrame(feature)
    df_enc = pd.get_dummies(df[0])
    print(df_enc)
    df_features_final = pd.concat([df_features_final, df_enc], axis = 1, join ='inner')


print(df_features_final)

结果是以下数据框。正如您在不断变化的列标题中看到的,在第 5 列之后没有跟随 1:

   0  1  0  1  0  0  1  0  1  0  1  0  1
0  1  0  0  1  1  0  1  0  1  0  1  1  0
1  1  0  0  1  1  1  0  0  1  1  0  0  1
2  0  1  0  1  1  0  1  1  0  0  1  1  0
3  1  0  1  0  1  0  1  0  1  0  1  1  0
4  1  0  0  1  1  0  1  0  1  0  1  1  0

【问题讨论】:

    标签: python pandas dataframe one-hot-encoding feature-engineering


    【解决方案1】:

    我没有注意到你至少在 pandas 中想要的功能。但是,在 TensorFlow 中,我们确实有

    tf.one_hot(
        indices, depth, on_value=None, off_value=None, axis=None, dtype=None, name=None
    )
    

    将深度设置为 2。

    【讨论】:

    • 好的,这是 pandas 中的一种解决方法。检查您是否有一个只有 1 个唯一值的数组,最后添加一个虚拟值。运行假人功能。然后,从输出中删除最后一行。
    • 我尝试用 tf.对于我的输入,tf.one_hot 显示此错误:tensorflow.python.framework.errors_impl.NotFoundError: Could not find valid device for node. 你见过吗?
    • 你有哪个张量流。您尝试过解决方法吗?我认为将代码限制在一个库中会更好。
    • tf 为 2.1.0。我认为 tf 解决方案更清洁,如果可行,我更愿意使用它。被这个节点问题困扰了一段时间
    • 您可以尝试将您的数组转换为 np.float32。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-30
    • 1970-01-01
    • 1970-01-01
    • 2018-10-25
    • 1970-01-01
    • 2017-06-18
    • 2018-06-21
    相关资源
    最近更新 更多