10折交叉验证中各折测试准确率与平衡测试准确率数值完全一致的原因咨询
10折交叉验证中各折测试准确率与平衡测试准确率数值完全一致的原因咨询
嘿,我来帮你拆解下这个问题——你遇到的“每折测试准确率和平衡准确率完全相同”的情况,大概率是由两个核心原因导致的,咱们一步步捋清楚:
一、最可能的问题:交叉验证的评估逻辑搞错了
看你的代码能发现,你用kfold.split(X_train, y_train)拆分了训练集的子集来做交叉验证,但每折训练完后,你评估的是固定的X_test和y_test,而不是当前折对应的验证集(也就是X_train[test]和y_train[test])!
这就意味着,你输出的每折结果其实都是同一个独立测试集的指标,而不是交叉验证里各折验证集的结果——自然每折的数值会完全一样。
你需要把评估部分的代码改成针对当前折的验证集,比如:
# 替换原来的X_test/y_test为当前折的验证集 y_pred = model.predict(X_train[test], verbose=0) c = model.evaluate(X_train[test], y_train[test]) test_accuracy.append(c[1]) report = classification_report(y_train[test], (y_pred>0.5), output_dict=True) bal_acc = balanced_accuracy_score(y_train[test], (y_pred>0.5))
二、测试集类别完全均衡(如果确实是用同一测试集评估的话)
如果你的X_test里正样本和负样本的数量完全相等,那普通准确率和平衡准确率的计算结果会天然一致:
- 普通准确率公式:
(TP + TN) / (总样本数) - 平衡准确率公式:
(正样本召回率 + 负样本召回率) / 2 = [TP/(TP+FN) + TN/(TN+FP)] / 2
当正样本数=负样本数时,TP+FN = TN+FP = 总样本数/2,代入平衡准确率公式就会得到(TP + TN)/总样本数,和普通准确率完全相等。
其他小概率情况
如果测试集类别不均衡,但模型在两类上的召回率刚好满足特定比例,也可能让两个指标巧合相等,但这种情况非常少见,优先排查上面两个原因就好。
备注:内容来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

