【发布时间】:2018-02-27 12:50:45
【问题描述】:
我有一个类似的系列:
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)
【问题讨论】:
标签: python machine-learning encoding scikit-learn categorical-data