如何将自定义类别添加到OneHotEncoder中

我的数据格式例如为 [‘1’, ‘5’, ‘6’, ‘5’, ‘2’],其中每个标签可以是0到9之间的任意数字字符。我的数据是名义类别数据,因此是无序的,接下来我使用scikit的OneHotEncoder对数据进行类别编码。然而,在测试模型时,如果输入数据是 [‘1’, ‘5’, ‘9’, ‘3’, ‘1’],而在训练数据中数组的第三个索引处没有出现过’9’,就会遇到错误。

我认为这是因为当我编码数据时,如果测试数据中的第三个索引只包含’0’到’8’的数字,OneHotEncoder无法识别第三个索引处的’9’,因此会抛出错误。我想知道是否有办法手动添加这些类别,这样在机器学习模型中这些类别就会存在,只是没有数据点与之对应。

示例:

from sklearn.preprocessing import OneHotEncodera = [['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’添加为一个类别。


回答:

这里有两种情况。

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

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

enc = OneHotEncoder(categories = [str(i) for i in range(10)])
  1. 如果你事先不知道某些类别。
# 此参数默认为`error`,因此如果遇到未知类别会抛出错误enc = OneHotEncoder(handle_unknown='ignore')

如果在转换过程中存在未知的分类特征,是否引发错误或忽略(默认为引发错误)。当此参数设置为‘ignore’且在转换过程中遇到未知类别时,该特征的one-hot编码列将全部为零。在逆转换中,未知类别将被标记为None。

此问题也在此处被提问 这里

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

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注