R语言线性SVM模型仅输出True positive和False positive的原因咨询
线性SVM模型混淆矩阵仅输出真阳性、假阳性的问题原因
混淆矩阵术语对应翻译
- True Positive (TP):真阳性
- False Positive (FP):假阳性
- False Negative (FN):假阴性
- True Negative (TN):真阴性
核心原因梳理
- 代码存在多处语法错误,导致模型训练/预测结果异常
- 变量拼写错误:训练的模型变量命名为
svm_Linar,后续预测调用的是未定义的svm_Linear,预测结果并非当前训练模型输出 - 训练函数参数缺失:
train方法中method"svmLinear"缺少等号,应为method = "svmLinear",参数传递错误导致模型未按预期训练 - 归一化函数语法错误:
normal_data函数的return括号仅包裹了分子部分,实际返回值为x-min(x)而非归一化结果,数据预处理完全不符合预期 - 训练集索引未定义:代码中直接使用
intrain_SVM做数据集拆分,但没有提前通过createDataPartition等方法生成采样索引,拆分逻辑完全随机,可能出现测试集仅包含单一类别的情况
- 变量拼写错误:训练的模型变量命名为
- 测试集类别单一
数据集拆分错误导致测试集中admit列仅存在「录取(正例)」一种标签,没有未录取的负样本,自然不存在真阴性、假阴性两类统计结果 - 目标变量被错误预处理
归一化操作时将admit目标列和特征列一起做了数值转换,若原始admit的标签值不是0/1二值,转换后标签映射错误,模型将所有样本预测为同一类别 - 类别极度不平衡
若数据集中录取样本占比极高,模型退化为无差别预测所有样本为录取,若测试集也以录取样本为主,也会出现假阴性、真阴性为0的情况
修复建议
- 修正上述所有语法错误,补充训练集索引生成代码:
intrain_SVM <- createDataPartition(y = SVMdata$admit, p = 0.7, list = FALSE) - 归一化仅作用于特征列,不要对目标
admit列做归一化处理 - 拆分数据集后先检查训练集、测试集的
admit类别分布,确保两类样本都存在 - 将测试集的
admit列也转换为因子类型,和训练集保持一致
内容的提问来源于stack exchange,提问作者MOHAMMAD SAMEER
相关产品推荐
相关产品推荐

