X_train = train_1[feas]
X_test = test_1[feas]
#建一个新的label,训练集label为1测试集label为0
features = X_train.columns.tolist()
X_train['label'] = 1
X_test['label'] = 0
train_test = pd.concat([X_train, X_test], axis =0,ignore_index=True)
train1, test1 = train_test_split(train_test, test_size=0.33, random_state=42, shuffle=True)
train_y = train1['label'].values
test_y = test1['label'].values
del train1['label'], test1['label']
#用label去训练每一个特征然后预测测试集
if 'label' in features:
features.remove('label')
adversarial_result = pd.DataFrame(index=train1.columns,columns=['roc'])
for i in features:
clf = lgb.LGBMClassifier(
random_state=47,
max_depth=2,
metric='auc',
n_estimators=1000,
importance_type='gain'
)
clf.fit(
np.array(train1[i]).reshape(-1,1),
train_y,
eval_set=[(np.array(test1[i]).reshape(-1,1),test_y)],
early_stopping_rounds=200,
verbose=0)
temp_pred = clf.predict_proba(np.array(test1[i]).reshape(-1,1))[:,1]
roc1 = roc_auc_score(test_y,temp_pred)
adversarial_result.loc[i,'roc'] = roc1
#如果训练集和测试集分布一致的话auc应该0.5 不一致的话auc会接近1
a = adversarial_result.sort_values('roc', ascending=False)
a
对抗验证()
于 2022-05-25 20:36:54 首次发布