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

时间:2021-02-10 17:52:39

标签: python cross-validation catboost

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

1 个答案:

答案 0 :(得分:0)

必须从您的特征数据框中删除 label 特征。您得到的 AUC 为 1,因为目标在特征之间,因此是线性相关。

cv_data = df.drop(columns=['label'], axis=1)