【问题标题】:Is it possible to apply sklearn.preprocessing.LabelEncoder() on a 2D list?是否可以将 sklearn.preprocessing.LabelEncoder() 应用于 2D 列表?
【发布时间】:2021-07-14 23:34:39
【问题描述】:

假设我有一个如下列表:

l = [
       ['PER', 'O', 'O', 'GEO'],
       ['ORG', 'O', 'O', 'O'],
       ['O', 'O', 'O', 'GEO'],
       ['O', 'O', 'PER', 'O']
    ]

我想用 LabelEncoder() 对二维列表进行编码。

它应该看起来像:

l = [
       [1, 0, 0, 2],
       [3, 0, 0, 0],
       [0, 0, 0, 2],
       [0, 0, 1, 0]
    ]

有可能吗? 如果没有,有什么解决方法吗?

提前致谢!

【问题讨论】:

  • 您的预期输出是什么?问题不清楚。
  • 我刚刚更新了问题。感谢您指出。

标签: python label-encoding


【解决方案1】:

您可以使用所有潜在值平整列表,请将编码器拟合,然后使用编码器来转换每个子符,如下所示:

from sklearn.preprocessing import LabelEncoder

l = [
       ['PER', 'O', 'O', 'GEO'],
       ['ORG', 'O', 'O', 'O'],
       ['O', 'O', 'O', 'GEO'],
       ['O', 'O', 'PER', 'O']
    ]

flattened_l = [e for sublist in l for e in sublist]

# flattened_l is ['PER', 'O', 'O', 'GEO', 'ORG', 'O', 'O', 'O', 'O', 'O', 'O', 'GEO', 'O', 'O', 'PER', 'O']

le = LabelEncoder().fit(flattened_l)

# See the mapping generated by the encoder:
list(enumerate(le.classes_))
# [(0, 'GEO'), (1, 'O'), (2, 'ORG'), (3, 'PER')]

# And, finally, transform each sublist:
res = [list(le.transform(sublist)) for sublist in l]
res

# Getting the result you want:
# [[3, 1, 1, 0], [2, 1, 1, 1], [1, 1, 1, 0], [1, 1, 3, 1]]

【讨论】:

    猜你喜欢
    • 2020-02-17
    • 1970-01-01
    • 2019-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多