【问题标题】:min samples per categorical value in catboostcatboost 中每个分类值的最小样本数
【发布时间】:2018-12-05 10:41:44
【问题描述】:

如何告诉 CatBoost 将分类值与少量样本组合在一起。 例如,假设我有一个名为 Country 的列,其中只有 1 个“柬埔寨”样本和 2 个“蒙古”样本,以及 999,998 个其他国家/地区,每个国家/地区至少有 100 个样本。 我想告诉 CatBoost 不要费心在那些稀有国家/地区使用它的 CTR 魔术,而只是将它们视为“其他”。

【问题讨论】:

    标签: categorical-data catboost


    【解决方案1】:

    假设您有一个 pandas 数据框,并且您有一个要转换的训练/测试集。小代码 sn-p 会将您的低计数转换为“其他”。我设置了 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)
    

    【讨论】:

      猜你喜欢
      • 2012-04-18
      • 2017-07-18
      • 2011-01-18
      • 2016-01-16
      • 1970-01-01
      • 1970-01-01
      • 2018-04-12
      • 1970-01-01
      • 2020-10-22
      相关资源
      最近更新 更多