R语言caret包的学习(二)--特征选择

在进行数据挖掘时,我们并不需要将所有的自变量用来建模,而是从中选择若干最重要的变量,这称为特征选择(feature selection)。本文主要介绍基于caret包的rfe()函数的特征选择。

一种算法就是后向选择,即先将所有的变量都包括在模型中,然后计算其效能(如误差、预测精度)和变量重要排序,然后保留最重要的若干变量,再次计算效能,这样反复迭代,找出合适的自变量数目。这种算法的一个缺点在于可能会存在过度拟合,所以需要在此算法外再套上一个样本划分的循环。在caret包中的rfe命令可以完成这项任务。

rfe(x, y, sizes = 2^(2:4), metric = ifelse(is.factor(y),
  "Accuracy", "RMSE"), maximize = ifelse(metric == "RMSE", FALSE, TRUE),
  rfeControl = rfeControl(), ...)
  • x 训练集自变量矩阵或数据库,注意,列名必须唯一
  • y 训练集的结果向量(数值型或因子型)
  • sizes 对应于应该保留的特征的数量的数值向量
  • metric 指定将使用什么汇总度量来选择最优模型。默认情况下,"RMSE" and "Rsquared" for regression and "Accuracy" and "Kappa" for classification
  • maximize 逻辑值,metric是否最大化
  • rfeControl 控制选项列表,包括拟合预测的函数。一些模型的预定义函数如下: linear regression (in the object lmFuncs), random forests (rfFuncs), naive Bayes (nbFuncs), bagged trees (treebagFuncs) and functions that can be used with caret’s train function (caretFuncs). 如果模型具有必须在每次迭代中确定的调整参数,则后者是有用的。
rfeControl(functions = NULL, rerank = FALSE, method = "boot",
  saveDetails = FALSE, number = ifelse(method %in% c("cv", "repeatedcv"),
  10, 25), repeats = ifelse(method %in% c("cv", "repeatedcv"), 1, number),
  verbose = FALSE, returnResamp = "final", p = 0.75, index = NULL,
  indexOut = NULL, timingSamps = 0, seeds = NA, allowParallel = TRUE)

functions

method 确定用什么样的抽样方法,默认提升boot,还有cv(交叉验证),LOOCV(留一交叉验证)

number folds的数量或重抽样的迭代次数

seeds 每次重抽样迭代时设置的随机种子

在第17个变量后面有 * 号,表明选择17个变量时,其预测精度最高

plot(lmProfile) 可观察到同样结果,如下:

返回最终保留的自变量:

参考:

http://topepo.github.io/caret/recursive-feature-elimination.html

http://blog.csdn.net/jiabiao1602/article/details/44975741

原文地址:https://www.cnblogs.com/Hyacinth-Yuan/p/8295700.html

时间: 2024-10-17 22:14:12

R语言caret包的学习(二)--特征选择的相关文章

R语言caret包的学习(一)--数据预处理

caret包(Classification and Regression Training)是一系列函数的集合,它试图对创建预测模型的过程进行流程化.本系列将就数据预处理.特征选择.抽样.模型调参等进行介绍学习. 本文将就caret包中的数据预处理部分进行介绍学习.主要包括以下函数:model.matrix(),dummyVars(),nearZeroVar(),findCorrelation(),findLinearCombos(),preProcess(),classDist() 创建虚拟变

通过R语言统计考研英语(二)单词出现频率

通过R语言统计考研英语(二)单词出现频率 大家对英语考试并不陌生,首先是背单词,就是所谓的高频词汇.厚厚的一本单词,真的看的头大.最近结合自己刚学的R语言,为年底的考研做准备,想统计一下最近考研英语(二)真正单词出现的频率次数. 整体思路: 收集数据-->整理数据-->统计分析-->输出结果 使用工具: `Rstudio,文本编辑器,CSV` 涉及到的包: "jiebaR"(中文分词引擎),"plyr", 第一步收集数据: 从网络搜索2013-20

安装R语言的包的方法

安装R语言的包的方法: 1. 在线安装 在R的控制台,输入类似install.packages("TSA")  # 安装 TSA install.packages("TSA", contriburl="url",  dependencies = TRUE) # 安装TSA 2. 手动安装(离线安装) 在Windows下: 下载对应的package.zip文件 打开R的菜单条->Packages->"Install packa

R语言的包管理功能

现代的开发语言都已经不再是单一的编程语言和编译环境,而是一个网络化的分布式系统.通过包(packages)管理程序进行软件模块的安装.卸载.更新等操作. 包管理的思路从Linux操作系统而来,通过Debian的apt-get可以从全球数万个网站快速获取软件的最新版本.在Mac OS X上也可以通过MacPort或Brew进行软件包的管理.Java语言自己不带包管理程序,但可通过maven进行包的自动下载和编译.链接.nodejs是通过npm进行包管理.python通过pip进行包管理.这些都是在

R语言——绘图函数深入学习

利用R自带数据集 通过data()函数可以查看R自带数据集. > data() 返回以下结果,每一条记录都是一个数据,键入相应的数据名称可以查看具体信息. Data sets in package ¡®datasets¡¯: AirPassengers Monthly Airline Passenger Numbers 1949-1960 BJsales Sales Data with Leading Indicator BJsales.lead (BJsales) Sales Data wit

R语言diagram包画订单状态流图

代码如下: library("diagram") #a <- read.table(file="clipboard",header=TRUE) write.table(a,file="a.txt",sep=";") aa <- a c <- matrix(nrow=ncol(aa),ncol=ncol(aa),0) i <- 1 while(i<=ncol(aa)){ j <- 1 whil

《r语言实战》菜鸟学习笔记(二)

这一部分将要说明R语言的数据类型以及数据输入方面的内容 因子 R语言中变量可以归结为名义型,有序型和连续变量. 名义型 :没有顺序之分的变量.如 天气 阴晴等 有序型:有顺序关系,但不是数量关系. 心情好 坏 适中等 连续型:就是同是有数量和顺序.当然这里的连续型并不是数学中的连续,也包括离散数据 名义型和有序型在R中称为因子. 下面介绍factor()函数 diabetes <- c("Type1", "Type2", "Type1",

R语言 机器学习包

from:http://www.zhizhihu.com/html/y2009/410.html 机器学习是计算机科学和统计学的边缘交叉领域,R关于机器学习的包主要包括以下几个方面:  1)神经网络(Neural Networks): nnet包执行单隐层前馈神经网络,nnet是VR包的一部分(http://cran.r-project.org/web/packages/VR/index.html).  2)递归拆分(Recursive Partitioning): 递归拆分利用树形结构模型,来

[译]用R语言做挖掘数据《二》

数据探索 一.实验说明 1. 环境登录 无需密码自动登录,系统用户名shiyanlou,密码shiyanlou 2. 环境介绍 本实验环境采用带桌面的Ubuntu Linux环境,实验中会用到程序: 1. LX终端(LXTerminal): Linux命令行终端,打开后会进入Bash环境,可以使用Linux命令2. GVim:非常好用的编辑器,最简单的用法可以参考课程[Vim编辑器](http://www.shiyanlou.com/courses/2)3. R:在命令行输入‘R’  进入R语言