Python ValueError:y包含以前未看到的标签:';A';使用普通编码器

Python ValueError:y包含以前未看到的标签:';A';使用普通编码器,python,scikit-learn,Python,Scikit Learn,堆栈跟踪 label_encode_dict['cat116'] # output OrdinalEncoder(handle_unknown='use_encoded_value', unknown_value=-99) label_encode_dict['cat116'].transform(np.array([xq['cat116']]).reshape(-1,1)) 我现在认为它处理的是高于字母顺序的未知_值。在上面的例子中,as“A”比“AA”小。这导致了错误。有什么转机吗?您没

堆栈跟踪

label_encode_dict['cat116']
# output
OrdinalEncoder(handle_unknown='use_encoded_value', unknown_value=-99)

label_encode_dict['cat116'].transform(np.array([xq['cat116']]).reshape(-1,1))

我现在认为它处理的是高于字母顺序的未知_值。在上面的例子中,as“A”比“AA”小。这导致了错误。有什么转机吗?

您没有安装顺序编码器,它不知道如何转换数据

from sklearn.preprocessing import OrdinalEncoder
enc = OrdinalEncoder(handle_unknown = 'use_encoded_value', unknown_value = -9)
PP = [['AA','B']]
enc.fit(PP)

print(enc.categories_)

enc.transform(np.array(['A','B']).reshape(1,-1))  # gives the same  ValueError: y contains previously unseen labels: 'A'

enc.transform(np.array(['AC','B']).reshape(1,-1))  # this works as expected

请将跟踪格式化为代码,而不是文本(已编辑)。sk learn github repo中存在一个问题。它将在下一版本中修复。很抱歉。但它以前被安装在火车数据上。哦,好吧,我的错。编码器只能转换已经看到的值。它创建了一种包含两个列表的地图。第一个列表是字符串,第二个列表是转换后的值。因此,如果您的训练数据中没有字符串“A”,那么它将无法转换它,因为它没有映射。是的,这就是为什么我使用handle\u unknown参数的原因。预计它将处理培训中未看到的值。
from sklearn.preprocessing import OrdinalEncoder
enc = OrdinalEncoder(handle_unknown = 'use_encoded_value', unknown_value = -9)
PP = [['AA','B']]
enc.fit(PP)

print(enc.categories_)

enc.transform(np.array(['A','B']).reshape(1,-1))  # gives the same  ValueError: y contains previously unseen labels: 'A'

enc.transform(np.array(['AC','B']).reshape(1,-1))  # this works as expected
enc = OrdinalEncoder(handle_unknown='use_encoded_value', unknown_value=-99)
enc.fit(label_encode_dict['cat116'])
enc.transform(np.array([xq['cat116']])