y 包含以前看不见的标签:标签编码器中的 'Male'

y contains previously unseen labels: 'Male' in Label encoder

我正在尝试使用 LabelEncoder 将我的数据集的分类列转换为数值。 dataset

转换代码如下:

for i in cat_columns:
    df[i]=encoder.fit_transform(df[i])

转换后的数据集看起来像 dataset after transformation

但问题是,每当我尝试转换我的测试数据集时,它都会给出一个错误

y contains previously unseen labels: 'Male'

测试数据转换代码:

for i in cat_columns:
    df1[i]=encoder.transform(df1[i])

test data

现在我该如何解决这个问题?

我想问题是您使用相同的编码器来适应所有不同的列。您应该改为使用不同的编码器来适应每一列。例如,您可以使用字典来存储不同的编码器:

from sklearn import preprocessing

encoders = {}
for i in cat_columns:
    encoders[i] = preprocessing.LabelEncoder()
    df[i] = encoders[i].fit_transform(df[i])
    
for i in cat_columns:
    df1[i] = encoders[i].transform(df1[i])

您遇到的错误 (previously unseen labels: 'Male') 是由于您尝试使用在上一个 for 循环中创建的最后一个编码器来转换 gender 列,在您的情况下可能成为 smoking_status 标签编码器。