如何在R的e1071库SVM模型中识别超平面最远的误分类样本
识别e1071 SVM模型中误分类且距超平面最远的样本
我正在用R语言的e1071库训练SVM模型,数据集包含790个样本和18710个预测变量,目标是找出被模型误分类且距离SVM超平面最远的样本。
训练模型的代码
best_model <- list( model = svm(x = omicDataReduced[, -which(colnames(omicDataReduced) == classVariable)], y = omicDataReduced[[classVariable]], kernel = best_kernel, cost = best_C, probability = TRUE, decision.values = TRUE), error = best_error, cost = best_C, kernel = best_kernel )
核心问题与现有代码
我已明确可通过decision.values属性获取样本到超平面的距离,当前需要解决的是如何检查样本是否处于间隔之外。目前已有的误分类样本筛选代码如下:
pred <- predict(best_model$model, omicDataReduced[, -which(colnames(omicDataReduced) == classVariable)], decision.value=T) decision_values <- attr(pred, "decision.values") misclassified_indices <- which(as.numeric(pred) != as.numeric(omicDataReduced[[classVariable]])) misclassified_decision_values <- abs(decision_values[misclassified_indices]) selected_indices <- misclassified_indices[order(misclassified_decision_values, decreasing = TRUE)][1:round(diagnosticChangeProbability * length(misclassified_indices))]
检查样本是否处于间隔之外的方法
在SVM的标准化定义中,间隔边界对应决策值的绝对值等于1的位置:
abs(decision_values) > 1:样本处于间隔之外,这类样本被模型赋予了较高的分类信心(若为误分类,说明模型对该样本的判断错误且信心强烈)abs(decision_values) < 1:样本处于间隔之内,属于靠近超平面的样本,包含所有支持向量abs(decision_values) == 1:样本刚好落在间隔边界上
结合需求,可在现有代码基础上加入筛选逻辑,精准定位误分类且处于间隔之外的样本:
# 提取误分类样本的决策值 misclassified_dv <- decision_values[misclassified_indices] # 筛选误分类且处于间隔之外的样本索引 misclassified_outside_margin <- misclassified_indices[abs(misclassified_dv) > 1] # 按距离超平面由远及近排序 sorted_outside_margin <- misclassified_outside_margin[order(abs(misclassified_dv[abs(misclassified_dv) > 1]), decreasing = TRUE)] # 按比例选取目标样本 selected_indices <- sorted_outside_margin[1:round(diagnosticChangeProbability * length(sorted_outside_margin))]
内容的提问来源于stack exchange,提问作者José Adrián Pardo Pérez
相关产品推荐
相关产品推荐

