具有重复项的类的多标签编码 [英] Multi label encoding for classes with duplicates

查看:15
本文介绍了具有重复项的类的多标签编码的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何对一列具有重复项的列表进行 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆