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

基于CFS特征选择与10折交叉验证的SVM分类器subset参数使用问询

如何在SVM分类器中使用CFS特征选择的特征子集?

首先得澄清一个容易混淆的点:大部分机器学习函数(包括e1071::svm和caret::train)里的subset参数是用来筛选样本行的,不是用来选特征列的。我们用CFS得到的是「特征子集」,需要通过提取特征列的方式传入SVM,下面结合你的代码场景一步步说明:

第一步:先完成CFS特征选择,得到最优特征列表

你的代码里没写完CFS的部分,先补全这一步,以iris数据集为例(原代码中Cardio1M是笔误,换成iris的分类目标Species):

library(caret)
library(e1071)
library(FSelector)

# 加载数据,修正分类目标列名
data <- iris
target_col <- "Species"

# 10折交叉验证拆分数据(原代码中目标列修正为Species)
trainIndex <- createDataPartition(data[[target_col]], p=0.7, list=FALSE)
data_train <- data[trainIndex,]
data_test <- data[-trainIndex,]

# 用CFS进行特征选择
cfs_features <- cfs(paste(target_col, "~ ."), data = data_train)
cat("CFS选中的特征:", paste(cfs_features, collapse = ", "), "\n")

场景一:用e1071::svm直接训练模型

这里的subset参数是用来筛选样本的(比如只训练某类样本),而特征子集需要通过构造新数据集来传入:

# 构造仅包含选中特征和目标列的训练/测试集
train_subset <- data_train[, c(cfs_features, target_col)]
test_subset <- data_test[, c(cfs_features, target_col)]

# 训练SVM:如果不需要筛选样本,subset参数设为NULL即可
svm_model <- svm(Species ~ ., 
                 data = train_subset,
                 subset = NULL) # 示例:若只训练setosa和versicolor,可写subset = Species != "virginica"

# 评估模型
predictions <- predict(svm_model, test_subset[, cfs_features])
confusionMatrix(predictions, test_subset[[target_col]])

场景二:用caret::train封装SVM做10折交叉验证

caret的train函数的subset参数同样是筛选样本行的,我们可以通过构造特征子集的公式来使用CFS结果:

# 构造只包含CFS特征的公式
svm_formula <- as.formula(paste(target_col, paste(cfs_features, collapse = " + "), sep = " ~ "))

# 设置10折交叉验证参数
train_ctrl <- trainControl(method = "cv", number = 10)

# 训练SVM模型
svm_caret_model <- train(svm_formula,
                         data = data_train,
                         method = "svmRadial", # 这里用径向核SVM,也可以选"svmLinear"等
                         trControl = train_ctrl)

# 测试模型
predictions_caret <- predict(svm_caret_model, data_test[, cfs_features])
confusionMatrix(predictions_caret, data_test[[target_col]])

关键总结

  • 不要把「CFS特征子集」和函数的subset参数混淆:前者是选特征列,后者是选样本行。
  • 使用CFS特征的核心是:只把选中的特征列传入SVM模型训练,可以通过构造新数据集或定制公式实现。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:54:01