AUC 在 CatBoost 的交叉验证中始终等于 1



我一直在尝试对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)

相关内容

  • 没有找到相关文章

最新更新