用可能看不见的数据标记编码



我有一个包含多个列的数据帧,这些列需要进行标签编码。问题是测试组将来可能会包含看不见的数据(类(。我希望这些类被标记为自己的一组,这样当我预测新的数据集时,代码就不会崩溃。

我尝试使用sklearn标签编码器,但收到。

ValueError: y contains previously unseen labels: 'rat'

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

有办法做到这一点吗?

我多次遇到同样的困难。

我的变通方法有点贵,尽管

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)

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

步骤1:对标签编码器中存在的缝隙进行标签编码。步骤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_)])

可以用scikit解决,学习是使用参数为handle_unknown='ignore':的类OneHotEncoder

from sklearn.preprocessing import OneHotEncoder
encoder = OneHotEncoder(handle_unknown='ignore')
encoder.fit(train)
encoder.transform(train)

最新更新