提供输入标签的单热编码标签

One-hot-encoding labels giving input labels

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

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

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

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

也许您可以尝试使用 scikit-learn 作为 one-hot encoding? 找到 here 个综合示例。

我认为您不能直接使用 get_dummies() 执行此操作。但是重新组织结果怎么样?如果我答对了你的问题,你想重新排序单热编码数据的列以匹配规定的顺序。

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)