gpt4 book ai didi

python - 获取值错误 : y contains new labels when using scikit learn's LabelEncoder

转载 作者:太空狗 更新时间:2023-10-30 02:38:41 27 4
gpt4 key购买 nike

我有一个像这样的系列:

df['ID'] = ['ABC123', 'IDF345', ...]

我正在使用 scikit 的 LabelEncoder 将其转换为数值以输入 RandomForestClassifier

在训练过程中,我做了如下操作:

le_id = LabelEncoder()
df['ID'] = le_id.fit_transform(df.ID)

但是,现在为了测试/预测,当我传入新数据时,我想根据 le_id 从该数据中转换“ID”,即,如果存在相同的值,则根据给上述标签编码器,否则分配一个新的数值。

在测试文件中,我做了如下操作:

new_df['ID'] = le_dpid.transform(new_df.ID)

但是,我收到以下错误:ValueError: y contains new labels

我该如何解决这个问题??谢谢!

更新:

所以我的任务是使用以下(例如)作为训练数据并预测新 BankNum、ID 组合的 'High'、'Mod'、'Low' 值。该模型应该学习从训练数据集中给出“高”和“低”的特征。例如,当存在具有相同 BankNum 和不同 ID 的多个条目时,下面会给出“高”。

df = 

BankNum | ID | Labels

0098-7772 | AB123 | High
0098-7772 | ED245 | High
0098-7772 | ED343 | High
0870-7771 | ED200 | Mod
0870-7771 | ED100 | Mod
0098-2123 | GH564 | Low

然后预测它:

BankNum   |  ID | 

00982222 | AB999 |
00982222 | AB999 |
00981111 | AB890 |

我正在做这样的事情:

df['BankNum'] = df.BankNum.astype(np.float128)

le_id = LabelEncoder()
df['ID'] = le_id.fit_transform(df.ID)

X_train, X_test, y_train, y_test = train_test_split(df[['BankNum', 'ID'], df.Labels, test_size=0.25, random_state=42)
clf = RandomForestClassifier(random_state=42, n_estimators=140)
clf.fit(X_train, y_train)

最佳答案

我认为错误信息非常明确:您的测试数据集包含 ID 标签,这些标签尚未包含在您的训练数据集中。对于此项,LabelEncoder 无法找到合适的数值来表示。有几种方法可以解决这个问题。您可以尝试平衡您的数据集,以确保每个标签不仅存在于您的测试中,还存在于您的训练数据中。否则,您可以尝试遵循提出的想法之一 here .

一种可能的解决方案是,您在开始时搜索数据集,获取所有唯一 ID 值的列表,在该列表上训练 LabelEncoder , 并保持其余代码保持原样。

另一种可能的解决方案是,检查测试数据是否只包含在训练过程中看到的标签。如果有新标签,您必须将其设置为一些后备值,如 unknown_id(或类似的东西)。为此,您将所有新的、未知的 ID 放在一个类中;对于这些项目,预测将失败,但您可以像现在一样使用其余代码。

关于python - 获取值错误 : y contains new labels when using scikit learn's LabelEncoder,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46288517/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com