【问题标题】:One-hot-encoding labels giving input labels提供输入标签的单热编码标签
【发布时间】:2020-04-02 17:41:37
【问题描述】:

我正在尝试对 pandas 数据框应用单热编码,但我无法给出类别参数。我的想法是类别和编码之间有对应关系,例如:

CATEGORIES = ['A','B','C']
Y = pd.get_dummies(data['Article_Topic_1']).values

例如,Y 将是 [0,0,1] 类别 'A',但我想规定 'A' 的编码为 [1,0,0]

如果这不可能,有没有办法规定编码并知道那里的确切字符串?

【问题讨论】:

    标签: python pandas one-hot-encoding


    【解决方案1】:

    我认为您不能直接使用get_dummies() 执行此操作。但是如何重新组织结果呢?如果我的问题正确,您想重新排序 one-hot-encoded 数据的列以匹配规定的顺序。

    categories = ["A", "B", "C"]
    Y = pd.get_dummies(data["Article_Topic_1"])
    Y = Y[categories].values
    

    这里有一个函数检查该解决方案有效的一些假设。

    def get_dummies_for_coding(series, ordering):
        # Ordering must contain only values present in series.
        assert(len(set(ordering)-set(series.unique()))==0)
        # It's easier to work with series here, because pd.get_dummies()
        # will operate with string prefixes for data-frames, which make
        # things a bit more complicated.
        assert(isinstance(series, pd.Series))
        dummies = pd.get_dummies(series)
        dummies = dummies[ordering]
        #return dummies
        return dummies.values
    
    # Example
    df = pd.DataFrame([["a", "foo"],
                       ["a", "bar"],
                       ["b", "bar"],
                       ["a", "baz"],
                       ["b", "bar"]],
                      columns=["colA", "colB"])
    orderingA = ["b", "a"]
    orderingB = ["baz", "bar", "foo"]
    
    ret = get_dummies_for_coding(df["colA"], orderingA)
    print(ret)
    ret = get_dummies_for_coding(df["colB"], orderingB)
    print(ret)
    

    【讨论】:

      【解决方案2】:

      也许您可以尝试将scikit-learn 用于one-hot encoding? 查找here 一个综合示例。

      【讨论】:

      • 这真的回答了这个问题吗?您如何准确地按照 OP 的要求规定编码?
      猜你喜欢
      • 1970-01-01
      • 2018-12-25
      • 2020-08-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-18
      • 2015-08-17
      • 2021-04-16
      相关资源
      最近更新 更多