Dan*_*757 6 python machine-learning scikit-learn
我有格式的数据,例如 ['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']])
Run Code Online (Sandbox Code Playgroud)
您可以看到我的训练数据不包含“4”,尽管“4”是一个可能的标签。所以当我对其进行编码并转换“4”时,它会抛出错误:
ValueError: Found unknown categories ['4'] in column 0 during transform
Run Code Online (Sandbox Code Playgroud)
我想知道如何手动添加“4”作为类别。
这里可能有两种情况。
\n初始化 OneHot Encoder 时将所有可能的类别作为列表传递。
\nenc = OneHotEncoder(categories = [str(i) for i in range(10)])\nRun Code Online (Sandbox Code Playgroud)\n# This argument by default is set to `error` hence throws error is an unknown\n# category is encountered.\nenc = OneHotEncoder(handle_unknown=\'ignore\')\nRun Code Online (Sandbox Code Playgroud)\n\n\n如果转换期间存在未知分类特征,是否引发错误或忽略(默认为引发)。当此参数设置为 \xe2\x80\x98ignore\xe2\x80\x99 且在转换过程中遇到未知类别时,该功能生成的 one-hot 编码列将全为零。在逆变换中,未知类别将被表示为 None。
\n
这个案例也在这里问
\n有关每个参数的详细文档,请参阅此处。
\n| 归档时间: |
|
| 查看次数: |
6630 次 |
| 最近记录: |