具有重复项的类的多标签编码 [英] Multi label encoding for classes with duplicates
本文介绍了具有重复项的类的多标签编码的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
如何对一列具有重复项的列表进行 n-hot 编码?
How can I n-hot encode a column of lists with duplicates?
类似于 sklearn 的 MultiLabelBinarizer
,它计算重复类的实例数而不是二值化.
Something like MultiLabelBinarizer
from sklearn which counts the number of instances of duplicate classes instead of binarizing.
示例输入:
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
推荐答案
我写了一个新的类 MultiLabelCounter
基于 MultiLabelBinarizer 代码.
I have written a new class MultiLabelCounter
based on the MultiLabelBinarizer code.
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]]
这篇关于具有重复项的类的多标签编码的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文