0

这是一个小数据帧,其中包含我需要编码的非常小的数据片段。要编码的数据帧

我目前的工作是使用 SciKit-Learns LabelEncoder(),

le = preprocessing.LabelEncoder()
le.fit(["local", "animals", "local", "diet", "food", "health", "local", "police brutality", "police", "kids", "dogs"])
list(le.classes_)

(output) 
['animals',
 'diet',
 'dogs',
 'food',
 'health',
 'kids',
 'local',
 'police',
 'police brutality']

我现在已经将所有我想要的目标添加到编码器中,所以现在我需要开始编码。问题是 LabelEncoder 接受这样的参数。

le.transform(["local"]) #For the first row in the data frame
(output) array([6])

现在这是第一行的正确编码,但我将如何为每一行执行此操作?我不认为手工编写它是非常可行的,因为我的实际数据集大约有 6000 个样本。

我也不确定目标是否应该用逗号分隔,我总是可以改变它,但我的最终目标是获得一个带有编码标签而不是分类标签的新数据框。

此外,由于编码器返回单个数组,如果我要对每一行做同样的事情,每行都有不同数量的标签(即(狗,动物)而不是(本地)),我需要附加每个数组制作矩阵,但这也是我不知道该怎么做的事情。非常感谢你的帮忙!

4

3 回答 3

0

我想你会想要MultiLabelBinarizer的。无论如何,对于 sklearn 多标签模型,预期的格式是布尔数组而不是整数列表数组。

于 2020-08-05T20:06:39.963 回答
0

我最近也遇到了这个问题,这是一个可以完成这项工作的函数:

from sklearn.preprocessing import LabelEncoder
from sklearn.pipeline import Pipeline

class MultiColumnLabelEncoder:
    def __init__(self,columns = None):
        self.columns = columns # array of column names to encode

    def fit(self,X,y=None):
        return self # not relevant here

    def transform(self,X):
        '''
        Transforms columns of X specified in self.columns using
        LabelEncoder(). If no columns specified, transforms all
        columns in X.
        '''
        output = X.copy()
        if self.columns is not None:
            for col in self.columns:
                output[col] = LabelEncoder().fit_transform(output[col])
        else:
            for colname,col in output.iteritems():
                output[colname] = LabelEncoder().fit_transform(col)
        return output

    def fit_transform(self,X,y=None):
        return self.fit(X,y).transform(X)

这是您在示例中使用它的方式

    dataset = MultiColumnLabelEncoder(columns = ["local", "animals", "local", "diet", "food", "health", "local", "police brutality", "police", "kids", "dogs"]).fit_transform(dataset)
于 2020-08-05T18:20:57.110 回答
0

尝试这个

from sklearn.preprocessing import MultiLabelBinarizer


mlb = MultiLabelBinarizer()

mlb.fit([["local", "animals", "local", "diet", "food", "health", "local", "police brutality", "police", "kids", "dogs"]])
于 2021-10-20T10:24:01.853 回答