提供输入标签的单热编码标签
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)
我正在尝试对 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)