我一直在尝试对CatBoost模型进行交叉验证。我几乎可以肯定地知道,所提供的代码所依赖的所有功能都是正确的,我在cv函数中运行的参数和数据集似乎是正确的。对于所有数据集,AUC得分始终为1。
def train_cat(file, cat_feat):
start = timeit.default_timer()
print("Model Bayesian Optimization")
params = optimize_catboost(file, cat_feat)
stop = timeit.default_timer()
df = pd.read_csv('./Data/'+file+'.csv')
for i in cat_feat:
df[i] = df[i].astype(np.int)
start = timeit.default_timer()
cv_data = df
labels = df['label']
cat2 = cat_feat
cv_dataset = Pool(data=cv_data,
label=labels,
cat_features=cat2)
params2=list(params[0].values())
params = {'learning_rate' : params2[2], 'reg_lambda' : params2[4],
'max_depth' : int(params2[3]), 'colsample_bylevel' : params2[0],
'iterations':int(params2[1]), 'custom_metric':'AUC',
'thread_count':4, 'task_type':'CPU','verbose':False,
"loss_function": "Logloss"}
auc = cv(cv_dataset,
params,
fold_count=10,
plot="True")
stop = timeit.default_timer()
print(f'Model Training Time: {stop - start} s')
time = stop - start
print("Model Train and Test AUC Report")
return auc, time, params
你必须从特性数据框架中删除label
特性。您得到的AUC为1,因为目标位于特征之中,因此是线性相关。
cv_data = df.drop(columns=['label'], axis=1)