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