如何为Catboost创建列描述(CD)文件

时间:2017-12-27 19:57:41

标签: python pool catboost

我宣布从以下位置阅读CD文件:

pool = Pool(features_file, CDfile)

CDfile包含文本和< \ t>分隔符:

0   Target
1   Categ   cat_reg
97  Categ   cat_dow
98  Categ   cat_nweek
99  Categ   cat_month
100 Categ   cat_hour
101 Categ   cat_is_month_start
102 Categ   cat_is_year_end
103 Categ   cat_is_year_start
104 Categ   cat_anomaly2016

我有这样的结果: 第102列中的 因子False,第1行声明为数字,不能解析为float。请尝试更正列描述文件。

这是整个功能的切片= DataFrame()

len(cat_features),len(features.columns)9 105

   cat_columns            cat_positions values
    cat_reg                         1   1075
    cat_dow                        97      5
    cat_nweek                      98     17
    cat_month                      99      4
    cat_hour                      100      1
    cat_is_month_start            101  False
    cat_is_year_end               102  False
    cat_is_year_start             103  False
    cat_anomaly2016               104      0

第102列有什么问题?为什么它被声明为数字(非分类)功能?

2 个答案:

答案 0 :(得分:0)

行李是CD文件中的冗余不可打印字符。我没有抓到哪一个。 这是生成CD文件的代码。

def catboostCD(fname, cat_features, cat_features_names, sep='\t' ):
    with open(fname,"w") as fout:
        fout.write('0{0}Target'.format(sep))
        fout.write(''.join(['\n{0}{1}Categ{1}{2}'.format(el[0], sep, el[1]) for el in zip(cat_features, cat_features_names)]))

其中

cat_features = np.ravel( np.where( np.char.startswith(list(features.columns), prefix='cat_') ) )
cat_features_names = features.columns.values[ cat_features]

答案 1 :(得分:0)

CatBoost Python库具有create_cd()方法(https://catboost.ai/docs/concepts/python-reference_utils_create_cd.html

以下是如何使用它来创建具有不同类型列的文件的示例:

from catboost.utils import create_cd
feature_names = {
    4: 'Categ1',
    5: 'Categ2',
    12: 'Num1'
}

create_cd(
    label=0,
    cat_features=(4, 5, 6),
    weight=1,
    baseline=2,
    doc_id=3,
    group_id=7,
    subgroup_id=8,
    timestamp=9,
    auxiliary_columns=(10, 11),
    feature_names=feature_names,
    output_path='train.cd'
)