特征选择:SVM-RFE
专题介绍:R是一种广泛用于数据分析和统计计算的强大语言,于上世纪90年代开始发展起来。得益于全世界众多 爱好者的无尽努力,大家继而开发出了一种基于R但优于R基本文本编辑器的R Studio(用户的界面体验更好)。也正是由于全世界越来越多的数据科学社区和用户对R包的慷慨贡献,让R语言在全球范围内越来越流行。其中一些R包,例如MASS,SparkR, ggplot2,使数据操作,可视化和计算功能越来越强大。R是用于统计分析、绘图的语言和操作环境。R是属于GNU系统的一个自由、免费、源代码开放的软件,它是一个用于统计计算和统计制图的优秀工具。R作为一种统计分析软件,是集统计分析与图形显示于一体的。它可以运行于UNIX、Windows和Macintosh的操作系统上,而且嵌入了一个非常方便实用的帮助系统,相比于其他统计分析软件,R的学术性开发比较早,适合生物学和医学等学术学科的科研人员使用。
Guyon等人[1]提出了基于支持向量机(SVM)的特征选择Wrapper方法,这种方法称为SVM-RFE算法,即SVM-递归特征消除。算法原理伪代码如图1所示。
图1 SVM-RFE算法的伪代码
根据算法的代码,我们理解如下:
数据:二元分类问题,原始数据集有的特征为p*个。
输出:基于特征相关性做了排序
解释:SVM-RFE是一种基于SVM的最大间隔原理的序列的后项选择的算法,首次迭代的针对数据集所有的特征集,进行SVM模型的最佳化训练,然后对每个特征计算分数做降序操作,记录分数最小的特征集,然后删除分数最小的特征,再次迭代,直到最后只剩下1个特征。
特征选择策略:常用的两种方式,可以采用Top-N或者Top-N-Percentage做特征选择。
参考代码:
######################
# SVM-RFE算法
######################
set.seed(7)
# 加载库和包
library(mlbench)
library(caret)
# 加载数据集
data(PimaIndiansDiabetes)
control <- rfeControl(functions = caretFuncs, method = "cv", number = 5)
# 执行SVM-RFE算法
results <- rfe(PimaIndiansDiabetes[,1:8],
PimaIndiansDiabetes[,9],
sizes = c(1:8),
rfeControl = control,
method = "svmRadial")
# 结果分析
print(results)
# 列出选择的变量集
predictors(results)
# 绘制结果
plot(results, type=c("g", "o"))
结果如下:
总结:这个测试中,选择了所有特征集,根据不同变量子集的准确度曲线,可以发现选择Top3的特征集可以几乎接近所有变量集的模型性能。
参考资料:
[1] Guyon I, Weston J, Barnhill S, Vapnik V. Gene selection for cancer classification using support vector machines. Mach Learn. 2002;46:389–422. [2] 相关网址-
https://bmcbioinformatics.biomedcentral.com/articles/10.1186/s12859-018-2451-4
-
https://machinelearningmastery.com/feature-selection-with-the-caret-r-package/
-
https://blog.csdn.net/littlely_ll/article/details/72139195
-
https://stackoverflow.com/questions/17529537/example-for-svm-feature-selection-in-r
-
https://rdrr.io/cran/caret/man/rfe.html
关于SVM-RFE算法,您有什么想法请留言。
需要深入交流和沟通,请加我的微信:luqin360。备注:实名+工作或者专业,否则不会通过。
文章推荐

请关注“恒诺新知”微信公众号,感谢“R语言“,”数据那些事儿“,”老俊俊的生信笔记“,”冷🈚️思“,“珞珈R”,“生信星球”的支持!