如何对包含重复项的列表列进行 n-hot 编码?
类似于 sklearn 中的 MultiLabelBinarizer
,它计算重复类的实例数量而不是二值化。
示例输入:
x = pd.Series([['a', 'b', 'a'], ['b', 'c'], ['c','c']])
预期输出:
a b c
0 2 1 0
1 0 1 1
2 0 0 2
最佳答案
我基于 MultiLabelBinarizer 编写了一个新类 MultiLabelCounter
代码。
import itertools
import numpy as np
class MultiLabelCounter():
def __init__(self, classes=None):
self.classes_ = classes
def fit(self,y):
self.classes_ = sorted(set(itertools.chain.from_iterable(y)))
self.mapping = dict(zip(self.classes_,
range(len(self.classes_))))
return self
def transform(self,y):
yt = []
for labels in y:
data = [0]*len(self.classes_)
for label in labels:
data[self.mapping[label]] +=1
yt.append(data)
return yt
def fit_transform(self,y):
return self.fit(y).transform(y)
import pandas as pd
x = pd.Series([['a', 'b', 'a'], ['b', 'c'], ['c','c']])
mlc = MultiLabelCounter()
mlc.fit_transform(x)
# [[2, 1, 0], [0, 1, 1], [0, 0, 2]]
关于python - 具有重复项的类的多标签编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57371409/