0

我声明一个 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 列和第 1 行中的因子 False 被声明为数字并且不能被解析为浮点数。尝试更正列描述文件。

这是整个功能的切片= 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 列有什么问题?为什么将其声明为数字(非分类)特征?

4

2 回答 2

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'
)
于 2019-04-08T15:45:53.757 回答
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]
于 2017-12-27T22:26:56.890 回答