我在Python Pandas中有DataFrame,如下所示:
- 输入数据:**
- Y-二进制目标
- X1...X5-预测因子
| 是|X1|X2|X3|X4|X5|
| - ------|- ------|- ------|- ------|- ------|- ------|
| 1个|一百一十一|二十二|1个|无|一百五十|
| 无|十二|三十三|1个|无|二百二十二|
| 1个|一百五十|四十四|无|无|二百三十|
| 无|二百七十|五十五|无|1个|五百|
| ...|...|...|...|...|...|
- 要求:**我需要:
- 通过所有变量运行循环,使得在每次迭代之后创建新的XGBoost分类模型,并且还在每次迭代之后丢弃变量之一并创建下一模型
- 因此,如果我具有例如5个预测因子(X1...X5),我需要创建5个XGBoost分类模型,并且在每个连续模型中必须少1个变量
- 每个模型应通过
roc_auc_score
进行评估 - 作为输出,我需要:
list_of_models = []
,其中将保存创建的模型和数据框,以及列车和测试的AUC - 所需产出:**
因此,我需要以下内容
- 模型-模型列表中模型的位置
- Num_var-模型中使用的预测变量数
- AUC_train-训练数据集上的roc_auc_评分
- AUC_test-检验数据集上的roc_auc_评分
| 型号|变量编号|AUC_列车|AUC_试验|
| - ------|- ------|- ------|- ------|
| 无|五个|0.887|0.884|
| 1个|四个|0.875|0.845|
| 第二章|三个|0.854|0.843|
| 三个|第二章|0.965|零点九二八|
| 四个|1个|0.922|零点九二一|
- 我的草稿:**这是错误的,因为它应该循环通过所有变量,每次迭代后创建一个新的XGBoost分类模型,并且每次迭代后丢弃一个变量并创建下一个模型
X_train, X_test, y_train, y_test = train_test_split(df.drop("Y", axis=1)
, df.Y
, train_size = 0.70
, test_size=0.30
, random_state=1
, stratify = df.Y)
results = []
list_of_models = []
for val in X_train:
model = XGBClassifier()
model.fit(X_train, y_train)
list_of_models.append(model)
preds_train = model.predict(X_train)
preds_test = model.predict(X_test)
preds_prob_train = model.predict_proba(X_train)[:,1]
preds_prob_test = model.predict_proba(X_test)[:,1]
results.append({("AUC_train":round(metrics.roc_auc_score(y_train,preds_prod_test),3),
"AUC_test":round(metrics.roc_auc_score(y_test,preds_prod_test),3})
results = pd.DataFrame(results)
在Python中如何实现这一点?
1条答案
按热度按时间62lalag41#
你想让你的数据在每个循环中变窄吗?如果我理解正确的话,你可以这样做: