威斯康星乳腺癌数据集Logistic Regression模型准确率极低排查求助
排查Logistic回归模型准确率极低的问题
你的模型准确率仅2%,核心问题出在预测结果的映射逻辑上,以下是逐步排查和修正方案:
1. 修正预测类别映射(最关键错误)
在R的glm二分类模型中,当因变量是因子类型时,默认将第一个因子水平(你设置的Benign)作为参考类别(对应概率0),第二个水平(Malignant)作为预测目标(对应概率1)。也就是说,predict(..., type='response')返回的是样本属于Malignant的概率,而非Benign。
你当前代码把概率≥0.5映射为Benign,完全搞反了类别,直接导致几乎所有预测错误。修正代码如下:
# 训练集预测修正 predicted_y_training <- ifelse(prob_y_train >= 0.5, "Malignant", "Benign") # 测试集预测修正 predicted_y_test <- ifelse(prob_y_test >= 0.5, "Malignant", "Benign")
2. 验证数据预处理正确性
- 检查
BareNuclei列:运行table(tumor_study$BareNuclei, useNA='always'),确认没有残留的?,且数值转换正常。 - 确认类别分布:运行
table(tumor_study$Class),该数据集良性样本占比约65%、恶性约35%,若比例异常,说明数据读取或清洗有误。 - 检查特征缩放:运行
summary(training_set[,1:9]),确认缩放后特征均值接近0、标准差接近1,避免尺度差异影响模型收敛。
3. 检查模型训练状态
运行summary(classifier)查看模型输出:
- 确认无系数为
NA(若存在,说明特征有完全共线性,需剔除冗余项)。 - 对比残差偏差与零偏差,判断模型是否具备拟合能力。
- 查看特征的p值,核心特征如
Uniformity_CellSize、Uniformity_CellShape应具备显著统计意义(p值极低)。
4. 验证混淆矩阵与准确率计算
修正预测映射后,重新计算混淆矩阵并手动验证准确率:
accuracy <- sum(diag(cm_test))/sum(cm_test) print(accuracy)
修正后准确率应能达到95%以上,接近官方给出的96%水平。
5. 确认数据集拆分合理性
sample.split默认采用分层抽样,确保训练/测试集的类别分布与原数据集一致。运行table(training_set$Class)和table(test_set$Class)验证比例是否匹配。
内容的提问来源于stack exchange,提问作者jojo
相关产品推荐
相关产品推荐

