You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在R中训练SVM模型后,如何获取超平面两侧的数据集?

解决方案

你可以通过SVM模型的**决策值(decision values)**来区分样本在超平面的哪一侧——决策值的正负对应超平面的两侧,和分类结果直接对应。以下是完整实现步骤:


步骤1:获取样本的决策值

使用predict()函数并开启decision.values=TRUE参数,得到每个样本到超平面的带符号距离(正负代表两侧):

# 获取训练集样本的决策值(带符号,正负对应超平面两侧)
pred_results <- predict(fit_7, training_set_7, decision.values = TRUE)
# 提取决策值向量
decision_vals <- attr(pred_results, "decision.values")

步骤2:分割数据集

根据决策值的正负,将原始训练集拆分为两个子集:

# 超平面一侧(决策值>0)的样本
subset_pos <- training_set_7[decision_vals > 0, ]
# 超平面另一侧(决策值<0)的样本
subset_neg <- training_set_7[decision_vals < 0, ]

注:如果存在决策值为0的样本(刚好落在超平面上),可根据需求单独处理,比如归入其中一侧或丢弃。

步骤3:保存为CSV文件

使用write.csv()函数将两个子集导出为CSV:

# 保存正侧样本
write.csv(subset_pos, "svm_subset_positive.csv", row.names = FALSE)
# 保存负侧样本
write.csv(subset_neg, "svm_subset_negative.csv", row.names = FALSE)

补充说明

如果你想直接用分类结果(而非决策值)分割样本,也可以用pred_results的分类标签筛选,代码类似:

# 按分类标签分割(需替换成你的Heatwave变量实际类别)
subset_class1 <- training_set_7[pred_results == "你的类别1", ]
subset_class2 <- training_set_7[pred_results == "你的类别2", ]

内容的提问来源于stack exchange,提问作者rpsparv

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 08:20:49