我宣布从以下位置阅读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列有什么问题?为什么它被声明为数字(非分类)功能?
答案 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'
)