python - 具有重复项的类的多标签编码
问题描述
如何对具有重复项的列表列进行 n-hot 编码?
类似于MultiLabelBinarizer
sklearn 的东西,它计算重复类的实例数而不是二值化。
示例输入:
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代码的新类。
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]]
推荐阅读
- sql - 我正在尝试使用 SQL Developer 中的连接从多个表中检索数据,但我收到错误 ORA-00933: SQL command not properly end
- html - 创建下拉菜单
- r - 通过引用更新 data.table,但仅在存在重复项时使用优先级向量填充某些行
- vim - 在哪里可以找到 vim 的颜色列表?
- python - 如何将多个值传递给 keras 连接模型
- java - 如何将json中的html文本转换为android中的纯文本
- angular - 在提交时设置本地存储并在页面刷新时获取它
- css - 如何使用伪内容删除内容中的填充
- javascript - Graph API 和 REST API 之间的主要区别是什么?
- python - 使用列表遍历二叉树