首页 > 解决方案 > 具有重复项的类的多标签编码

问题描述

如何对具有重复项的列表列进行 n-hot 编码?

类似于MultiLabelBinarizersklearn 的东西,它计算重复类的实例数而不是二值化。

示例输入:

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

标签: pythonpython-3.xscikit-learnpysparkapache-spark-mllib

解决方案


我编写了一个MultiLabelCounter基于MultiLabelBinarizer代码的新类。

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]]

推荐阅读