【问题标题】:How to add your own categories into the OneHotEncoder如何将您自己的类别添加到 OneHotEncoder
【发布时间】:2021-06-13 02:49:06
【问题描述】:

我有格式的数据,例如['1', '5' '6', '5', '2'],其中每个标签可以是0-9之间的任意数字的字符。我的数据的性质是名义上的分类,因此它是无序的,随后,我使用 scikit OneHotEncoder 对我的数据进行分类编码。但是,我在测试模型时遇到错误,假设我有 ['1', '5', '9', '3', '1'] 当没有输入时数组的第三个索引是“9”。

我认为这是因为当我对数据进行编码时,假设在测试数据中第三个索引只有“0”-“8”之间的数字,OneHotEncoder 无法识别“9”何时是在第三个索引中,并引发错误。我想知道是否有一种方法可以手动添加这些类别,所以在 ML 模型中,类别会存在并且上面没有数据点。

例子:

from sklearn.preprocessing import OneHotEncoder

a = [['1'], ['2'], ['3'], ['5']]
enc = OneHotEncoder()
X = enc.fit_transform(a)
enc.transform([['4']])

您可以看到我的训练数据不包含“4”,即使“4”是一个可能的标签。所以当我对其进行编码并转换'4'时,它会抛出一个错误:

ValueError: Found unknown categories ['4'] in column 0 during transform

我想知道如何手动将“4”添加为类别。

【问题讨论】:

标签: python machine-learning scikit-learn


【解决方案1】:

这里可能有两种情况。

  1. 如果您事先知道所有类别。

在 OneHot Encoder 初始化时将所有可能的类别作为列表传递。

enc = OneHotEncoder(categories = [str(i) for i in range(10)])
  1. 如果您事先不知道某些类别。
# This argument by default is set to `error` hence throws error is an unknown
# category is encountered.
enc = OneHotEncoder(handle_unknown='ignore')

如果在转换期间存在未知的分类特征,是否引发错误或忽略(默认为引发)。当此参数设置为“忽略”并且在转换过程中遇到未知类别时,此功能的生成的 one-hot 编码列将全为零。在逆变换中,未知类别将表示为无。

这个案例也问here

有关每个参数的详细文档,请参阅 here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多