我如何告诉 CatBoost 将分类值与少量样本组合在一起。例如,假设我有一个名为 Country 的列,其中只有 1 个“柬埔寨”样本和 2 个“蒙古”样本,以及 999,998 个其他国家/地区,每个国家/地区至少有 100 个样本。我想告诉 CatBoost 不要费心在那些稀有国家做它的点击率魔法,而只是将它们视为“其他”。
问问题
49 次
1 回答
0
假设您有一个 pandas 数据框,并且您有一个要转换的训练/测试集。小代码片段会将您的低计数转换为“其他”。我设置了 100 的阈值,但您可以将其更改为您需要的!
基本上,代码获取具有低计数的值列表并将它们替换为所需的值。
注意:在转换类别列之前,您可以在列上运行.value_counts()以查看其中的内容。
def transform_lowcount_cat(train=train, test=test, colstoreplace=colstoreplace, replaceval = 'other', threshold=100):
for col in colstoreplace:
unique_vals_cat = pd.DataFrame(train[col].value_counts())
low_val_cat = unique_vals_cat[unique_vals_cat[col] < threshold].index.values
train[col].replace(low_val_cat, replaceval, inplace=True)
print(col + ' - TRAIN set transformed')
if test == None:
print('TEST set NOT transformed')
else:
test[col].replace(low_val_cat, replaceval, inplace=True)
print(col + ' - TEST set transformed')
然后你创建一个你想要转换的列/列的列表,并使用你想要的替换值和阈值限制运行代码。请注意,这会进行就地转换。
colstoreplace = ['Col1','Col2']
transform_lowcount_cat(train=train, test=test, colstoreplace=colstoreplace, replaceval='whatever you want!', threshold = 100)
于 2019-01-14T20:16:00.863 回答