交叉验证逻辑回归返回非常不同的准确度

问题描述 投票:0回答:0

我在逻辑回归上运行交叉验证,我遇到了一个奇怪的问题,即训练和测试准确率都是 100%,除了第一次和第二次折叠,准确率约为 66%。 100% 的准确率绝对是错误的,我希望准确率在 60 到 70 之间,所以只有第一和第二折符合我的预期。

我手动创建了用于交叉验证的训练/验证折叠,并且我在所有折叠中使用了 sklearn 的逻辑回归。我检查并重新检查了我是如何创建折叠和数据的,一切似乎都已正确处理。我还在训练/评估每次折叠之前重新初始化模型,因此模型不可能在每次折叠时都有改进。 positive 和 negative class 的比例是我在每一折中所期望的。即使火车准确率很高,我也不希望测试准确率也很高。任何人都知道这里可能发生什么并对我应该研究的内容有建议吗?我不确定发生了什么

谢谢!

results = []
for i in range(len(TRAIN_FOLDS)):
    # i = 2
    train_fp = os.path.join(TRAIN_DIR, TRAIN_FOLDS[i])
    val_fp = os.path.join(VAL_DIR, VAL_FOLDS[i])
    print("RUNNING:", train_fp)
    wes_data_train = sc.read_h5ad(train_fp)
    print("training data shape:", wes_data_train.X.shape)
    wes_data_val = sc.read_h5ad(val_fp)
    print("val data shape:", wes_data_val.X.shape)
    print("proportion responders:", (wes_data_val.obs['response'] == 1).sum() / len(wes_data_val.obs['response']))

    # fit and score the data
    lr = LogisticRegression()
    lr.fit(wes_data_train.X, wes_data_train.obs['response'])
    coeff_df = pd.DataFrame(lr.coef_, columns=wes_data_train.var.features)
    # print("coeffs:", lr.coef_)
    print("train acc:", lr.score(wes_data_train.X, wes_data_train.obs['response']))
    print("test acc:", lr.score(wes_data_val.X, wes_data_val.obs['response']))

Results for every fold

scikit-learn logistic-regression cross-validation
© www.soinside.com 2019 - 2024. All rights reserved.