使用R语言进行机器学习特征选择①

简介: 特征选择是实用机器学习的重要一步,一般数据集都带有太多的特征用于模型构建,如何找出有用特征是值得关注的内容。使用caret包,使用递归特征消除法,rfe参数:x,预测变量的矩阵或数据框,y,输出结果向量(数值型或因子型),sizes,用于测试的特定...

特征选择是实用机器学习的重要一步,一般数据集都带有太多的特征用于模型构建,如何找出有用特征是值得关注的内容。

使用caret包,使用递归特征消除法,rfe参数:x,预测变量的矩阵或数据框,y,输出结果向量(数值型或因子型),sizes,用于测试的特定子集大小的整型向量,rfeControl,用于指定预测模型和方法的一系列选项

一些列函数可以用于rfeControl$functions,包括:线性回归(lmFuncs),随机森林(rfFuncs),朴素贝叶斯(nbFuncs),bagged trees(treebagFuncs)和可以用于caret的train函数的函数(caretFuncs)。

  • 1 移除冗余特征,移除高度关联的特征。
set.seed(1234)
library(mlbench)
library(caret)
data(PimaIndiansDiabetes)
Matrix <- PimaIndiansDiabetes[,1:8]





library(Hmisc)
up_CorMatrix <- function(cor,p) {ut <- upper.tri(cor) 
data.frame(row = rownames(cor)[row(cor)[ut]] ,
           column = rownames(cor)[col(cor)[ut]], 
           cor =(cor)[ut] ) }

res <- rcorr(as.matrix(Matrix))
cor_data <- up_CorMatrix (res$r)
cor_data <- subset(cor_data, cor_data$cor > 0.5)
 cor_data
row column       cor
22 pregnant    age 0.5443412

  • 2 根据重要性进行特征排序

特征重要性可以通过构建模型获取。一些模型,诸如决策树,内建有特征重要性的获取机制。另一些模型,每个特征重要性利用ROC曲线分析获取。下例加载Pima Indians Diabetes数据集,构建一个Learning Vector Quantization(LVQ)模型。varImp用于获取特征重要性。从图中可以看出glucose, mass和age是前三个最重要的特征,insulin是最不重要的特征。




# ensure results are repeatable
set.seed(1234)
# load the library
library(mlbench)
library(caret)
# load the dataset
data(PimaIndiansDiabetes)
# prepare training scheme
control <- trainControl(method="repeatedcv", number=10, repeats=3)
# train the model
model <- train(diabetes~., data=PimaIndiansDiabetes, method="lvq", preProcess="scale", trControl=control)
# estimate variable importance
importance <- varImp(model, scale=FALSE)
# summarize importance
print(importance)
# plot importance
plot(importance)

ROC curve variable importance

Importance
glucose      0.7881
mass         0.6876
age          0.6869
pregnant     0.6195
pedigree     0.6062
pressure     0.5865
triceps      0.5536
insulin      0.5379
img_ba0a260db19681c11ef1d329bbc86c46.png
  • 3特征选择

自动特征选择用于构建不同子集的许多模型,识别哪些特征有助于构建准确模型,哪些特征没什么帮助。特征选择的一个流行的自动方法称为 递归特征消除(Recursive Feature Elimination)或RFE。
下例在Pima Indians Diabetes数据集上提供RFE方法例子。随机森林算法用于每一轮迭代中评估模型的方法。该算法用于探索所有可能的特征子集。从图中可以看出当使用5个特征时即可获取与最高性能相差无几的结果。





# ensure the results are repeatable
set.seed(7)
# load the library
library(mlbench)
library(caret)
# load the data
data(PimaIndiansDiabetes)
# define the control using a random forest selection function
control <- rfeControl(functions=rfFuncs, method="cv", number=10)
# run the RFE algorithm
results <- rfe(PimaIndiansDiabetes[,1:8], PimaIndiansDiabetes[,9], sizes=c(1:8), rfeControl=control)
# summarize the results
print(results)
# list the chosen features
predictors(results)
# plot the results
plot(results, type=c("g", "o"))


Recursive feature selection

Outer resampling method: Cross-Validated (10 fold) 

Resampling performance over subset size:

 Variables Accuracy  Kappa AccuracySD KappaSD Selected
         1   0.6926 0.2653    0.04916 0.10925         
         2   0.7343 0.3906    0.04725 0.10847         
         3   0.7356 0.4058    0.05105 0.11126         
         4   0.7513 0.4435    0.04222 0.09472         
         5   0.7604 0.4539    0.05007 0.11691        *
         6   0.7499 0.4364    0.04327 0.09967         
         7   0.7603 0.4574    0.04052 0.09838         
         8   0.7590 0.4549    0.04804 0.10781         

The top 5 variables (out of 5):
   glucose, mass, age, pregnant, insulin

img_3ea8512170bbd6543eab8407eb1e5055.png
目录
相关文章
|
2月前
|
机器学习/深度学习 数据采集 算法
R语言中的机器学习库:caret与mlr的深度解析
【9月更文挑战第2天】Caret和mlr是R语言中两个非常重要的机器学习库,它们在数据预处理、模型构建、调优和评估等方面提供了丰富的功能。Caret以其易用性和集成性著称,适合初学者和快速原型开发;而mlr则以其全面性和可扩展性见长,适合处理复杂的机器学习项目。在实际应用中,用户可以根据具体需求和项目特点选择合适的库进行开发。无论是学术研究、商业智能还是教育场景,这两个库都能为数据科学家和机器学习爱好者提供强大的支持。
|
4月前
|
机器学习/深度学习 人工智能 算法
没想到!AlphaZero式树搜索也能用来增强大语言模型推理与训练
【7月更文挑战第26天】Xidong Feng等研究人员提出了一项创新方法,通过采用AlphaZero式的树搜索算法来增强大语言模型(LLMs)的推理与训练能力。这项技术,称为TS-LLM(Tree-Search for LLMs),将LLMs的解码过程视为搜索问题,并运用AlphaZero的树搜索来指导这一过程。TS-LLM不仅提升了模型的通用性和适应性,还在多个任务中实现了显著的性能提升。此外,它能在训练阶段指导LLMs学习更优的解码策略。尽管如此,TS-LLM依赖于高质量的预训练LLM,并面临较高的计算成本挑战。[论文](https://arxiv.org/abs/2309.17179)
81 5
|
25天前
|
机器学习/深度学习 数据采集 人工智能
R语言是一种强大的编程语言,广泛应用于统计分析、数据可视化、机器学习等领域
R语言是一种广泛应用于统计分析、数据可视化及机器学习的强大编程语言。本文为初学者提供了一份使用R语言进行机器学习的入门指南,涵盖R语言简介、安装配置、基本操作、常用机器学习库介绍及实例演示,帮助读者快速掌握R语言在机器学习领域的应用。
52 3
|
25天前
|
机器学习/深度学习 并行计算 数据挖掘
R语言是一种强大的统计分析工具,广泛应用于数据分析和机器学习领域
【10月更文挑战第21天】R语言是一种强大的统计分析工具,广泛应用于数据分析和机器学习领域。本文将介绍R语言中的一些高级编程技巧,包括函数式编程、向量化运算、字符串处理、循环和条件语句、异常处理和性能优化等方面,以帮助读者更好地掌握R语言的编程技巧,提高数据分析的效率。
42 2
|
2月前
|
机器学习/深度学习 算法 前端开发
R语言基础机器学习模型:深入探索决策树与随机森林
【9月更文挑战第2天】决策树和随机森林作为R语言中基础且强大的机器学习模型,各有其独特的优势和适用范围。了解并熟练掌握这两种模型,对于数据科学家和机器学习爱好者来说,无疑是一个重要的里程碑。希望本文能够帮助您更好地理解这两种模型,并在实际项目中灵活应用。
|
4月前
|
算法 API 数据中心
魔搭社区利用 NVIDIA TensorRT-LLM 加速开源大语言模型推理
魔搭社区于 2022 年 11 月初创建,首次在业界提出了 “模型即服务”( MaaS, Model as a Service)的理念。
|
6月前
|
数据可视化
R语言机器学习方法分析二手车价格影响因素
R语言机器学习方法分析二手车价格影响因素
|
6月前
|
机器学习/深度学习 算法 数据挖掘
【C 言专栏】C 语言与机器学习的应用
【5月更文挑战第6天】C语言在机器学习中扮演关键角色,以其高效性、灵活性和可移植性实现底层算法、嵌入式系统和高性能计算。在神经网络、决策树和聚类算法等领域的实现中不可或缺。C语言被用于TensorFlow和OpenCV等知名库的底层,常与C++、Python结合使用。尽管面临开发难度和适应新算法的挑战,但C语言在机器学习领域的价值和潜力将持续展现,为科技进步贡献力量。
108 0
【C 言专栏】C 语言与机器学习的应用
|
6月前
|
机器学习/深度学习 数据采集 算法
数据分享|R语言机器学习预测案例合集:众筹平台、机票折扣、糖尿病患者、员工满意度
数据分享|R语言机器学习预测案例合集:众筹平台、机票折扣、糖尿病患者、员工满意度
|
7天前
|
机器学习/深度学习 人工智能 算法
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
手写数字识别系统,使用Python作为主要开发语言,基于深度学习TensorFlow框架,搭建卷积神经网络算法。并通过对数据集进行训练,最后得到一个识别精度较高的模型。并基于Flask框架,开发网页端操作平台,实现用户上传一张图片识别其名称。
24 0
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型

热门文章

最新文章