以下是一个按折进行分组并计算AUC的示例代码:
import numpy as np
from sklearn import metrics
from sklearn.model_selection import StratifiedKFold
# 假设有一组数据X和对应的标签y
X = np.array([[1, 2], [3, 4], [1, 2], [3, 4]])
y = np.array([0, 0, 1, 1])
# 初始化StratifiedKFold对象,设置折数为5
kfold = StratifiedKFold(n_splits=5)
# 初始化变量用于存储每折的AUC值
auc_scores = []
# 使用k折交叉验证进行分组计算
for train_index, test_index in kfold.split(X, y):
X_train, X_test = X[train_index], X[test_index]
y_train, y_test = y[train_index], y[test_index]
# 训练模型,这里使用逻辑回归作为示例
model = LogisticRegression()
model.fit(X_train, y_train)
# 预测概率
y_pred_proba = model.predict_proba(X_test)[:, 1]
# 计算AUC
auc = metrics.roc_auc_score(y_test, y_pred_proba)
# 将AUC值添加到列表中
auc_scores.append(auc)
# 计算平均AUC值
mean_auc = np.mean(auc_scores)
# 打印平均AUC值
print("Mean AUC:", mean_auc)
上述代码示例使用了StratifiedKFold
来进行分组,将数据分成5个折。然后使用逻辑回归模型训练每个折的训练集,预测测试集的概率,并计算AUC值。最后,将所有折的AUC值取平均得到最终的AUC值。