标签编码与可能看不见的数据

时间:2020-10-13 09:06:16

标签: python machine-learning xgboost

我有一个带有多个列的数据框,需要对其进行标签编码。 问题在于测试组将来可能包含看不见的数据(类)。 我希望将这些类标记为它们自己的组,以便在预测新数据集时代码不会崩溃。

我尝试使用sklearn labelencoder但收到了。

ValueError: y contains previously unseen labels: 'rat'

我还需要编码器可重用,这意味着我将能够使用相同的值对未来的数据集进行编码。

有办法吗?

3 个答案:

答案 0 :(得分:1)

我多次遇到同样的困难。

虽然我的解决方法有点贵

le=LabelEncoder()
le.fit(trainDf)

le.classes_=np.array([-99999] + le.classes_.tolist())
testDf[~testDf.isin(le.classes_)]=-99999 #anything that is not used in your dataframe and the same datatype (here int64)

le.transform(testDf)

答案 1 :(得分:0)

可以使用scikit-learn解决,方法是将类OneHotEncoder与参数handle_unknown='ignore'一起使用:

from sklearn.preprocessing import OneHotEncoder

encoder = OneHotEncoder(handle_unknown='ignore')
encoder.fit(train)

encoder.transform(train)

答案 2 :(得分:0)

我稍微更新了Sayan Dey's的想法:

步骤1:对标签编码器中存在的cals进行标签编码。 步骤2:安装标签编码器,然后将所有不在编码器中的测试类设置为-1。

i='browser'
le = LabelEncoder()
train[i] = le.fit_transform(train[i])
#Set classes in test which don't exist in the encoder to -1
test.loc[~test[i].isin(le.classes_),i] = -1    
#Encode classes that exist in the encoder
test.loc[test[i].isin(le.classes_),i] = le.transform(test[i][test[i].isin(le.classes_)])