机器学习-R-特征选择

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

1. Feature selection: All-relevant selection with the Boruta package

特征选择两种方法用于分析:

(1)最少最优特征选择(minimal-optimal feature selection)识别少量特征集合(理想状况最少)给出尽可能优的分类结果;

(2)所有相关特征选择(all-relevant feature selection)识别所有与分类有关的所有特征。

本文使用Boruta包,它使用随机森林分类算法,测量每个特征的重要行(z score)。

2. 使用caret包

使用递归特征消除法,rfe参数

x,预测变量的矩阵或数据框

y,输出结果向量(数值型或因子型)

sizes,用于测试的特定子集大小的整型向量

rfeControl,用于指定预测模型和方法的一系列选项

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

1)移除冗余特征

移除高度关联的特征。

Caret R包提供findCorrelation函数,分析特征的关联矩阵,移除冗余特征

[python] view plain copy

  1. set.seed(7)
  2. # load the library
  3. library(mlbench)
  4. library(caret)
  5. # load the data
  6. data(PimaIndiansDiabetes)
  7. #P calculate correlation matrix
  8. correlationMatrix <- cor(PimaIndiansDiabetes[,1:8])
  9. # summarize the correlation matrix
  10. print(correlationMatrix)
  11. # find attributes that are highly corrected (ideally >0.75)
  12. highlyCorrelated <- findCorrelation(correlationMatrix, cutoff=0.5)
  13. # print indexes of highly correlated attributes
  14. print(highlyCorrelated)

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

特征重要性可以通过构建模型获取。一些模型,诸如决策树,内建有特征重要性的获取机制。另一些模型,每个特征重要性利用ROC曲线分析获取。

下例加载Pima Indians Diabetes数据集,构建一个Learning Vector Quantization(LVQ)模型。varImp用于获取特征重要性。从图中可以看出glucose, mass和age是前三个最重要的特征,insulin是最不重要的特征。

  1. # ensure results are repeatable
  2. set.seed(7)
  3. # load the library
  4. library(mlbench)
  5. library(caret)
  6. # load the dataset
  7. data(PimaIndiansDiabetes)
  8. # prepare training scheme
  9. control <- trainControl(method="repeatedcv", number=10, repeats=3)
  10. # train the model
  11. model <- train(diabetes~., data=PimaIndiansDiabetes, method="lvq", preProcess="scale", trControl=control)
  12. # estimate variable importance
  13. importance <- varImp(model, scale=FALSE)
  14. # summarize importance
  15. print(importance)
  16. # plot importance
  17. plot(importance)

3)特征选择

自动特征选择用于构建不同子集的许多模型,识别哪些特征有助于构建准确模型,哪些特征没什么帮助。

特征选择的一个流行的自动方法称为 递归特征消除(Recursive Feature Elimination)或RFE。

下例在Pima Indians Diabetes数据集上提供RFE方法例子。随机森林算法用于每一轮迭代中评估模型的方法。该算法用于探索所有可能的特征子集。从图中可以看出当使用4个特征时即可获取与最高性能相差无几的结果。

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

原文:http://blog.csdn.net/python_learn/article/details/45008073

原文发布于微信公众号 - 大数据挖掘DT数据分析(datadw)

原文发表时间:2016-02-19

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏数值分析与有限元编程

逆迭代法求矩阵特征值

前面提到,幂迭代法用于求矩阵的主特征值以及对应的特征向量。如果把幂迭代用于这个矩阵的逆矩阵,那么就能求得最小的特征值。来看下面的定理: 设n阶矩阵A的特征值用λ...

3416
来自专栏帮你学MatLab

MATLAB智能算法30个案例分析(3-2)

神经网路部分 function err=Bpfun(x,P,T,hiddennum,P_test,T_test) %% 训练&测试BP网络 %% 输入 % x...

2895
来自专栏州的先生

使用机器学习模型快速进行图像分类识别

1013
来自专栏数据科学与人工智能

【机器学习】机器学习之组合算法总结

组合模型 下面简单的介绍下Bootstraping, Bagging, Boosting, AdaBoost, RandomForest 和Gradient b...

24910
来自专栏AI科技大本营的专栏

机器学习填坑:你知道模型参数和超参数之间的区别吗?

图片来自Bruce Guenter,保留部分权利 翻译 | AI科技大本营(rgznai100) 参与 | 姜沂,焦燕 导语 机器学习中的模型参数和模型超参数在...

3127
来自专栏人工智能

机器学习三人行-Logistic和Softmax回归实战剖析

关注公众号“智能算法”即可一起学习整个系列的文章 本文主要实战Logistic回归和softmax回归在iris数据集上的应用,通过该文章,希望我们能一起掌握该...

1896
来自专栏程序生活

第二周神经网络基础2.1 二分分类2.2 logistic回归2.3 logistic 回归损失函数2.4 梯度下降2.5 导数2.14 向量化logistic 回归的输出2.15 Python中的广

2.1 二分分类 使用二分分类来预测图片中是否有猫 ? 二分分类 ? 常见的符号表示 x:代表特征向量 y:代表标签 m:代表样本(Mtrain)的数量 ...

3084
来自专栏杨熹的专栏

神经网络 之 感知器的概念和实现

本文结构: 什么是感知器 有什么用 代码实现 ---- 1. 什么是感知器 如下图,这个神经网络中,每个圆圈都是一个神经元,神经元也叫做感知器 ? 只有一个隐藏...

3604
来自专栏企鹅号快讯

深入机器学习系列8-Gradient-boosted tree

梯度提升树 1 Boosting   是一类将弱学习器提升为强学习器的算法。这类算法的工作机制类似:先从初始训练集中训练出一个基学习器,再根据基学习器的表现对训...

1996
来自专栏https://www.cnblogs.com/L

【机器学习】--GBDT算法从初始到应用

提升是一种机器学习技术,可以用于回归和分类的问题,它每一步产生弱预测模型(如决策树),并加权累加到总模型中;如果每一步的弱预测模型的生成都是依据损失函数的梯度方...

712

扫描关注云+社区