赞
踩
机器学习方法通常用于对由数百个属性描述的对象进行分类。在许多这类应用中,很大一部分属性可能与分类问题完全无关。更重要的是,通常人们不能先验地决定哪些属性是相关的。
删除冗余变量有助于提高准确性。同样,纳入相关变量对模型精度也有积极影响。
太多的变量可能导致过拟合,这意味着模型不能泛化模式。
太多的变量导致计算速度慢,反过来又需要更多的内存和硬件。
有以下使用 Boruta 进行特性选择的原因。
对分类和回归问题都有很好的效果。
考虑了多变量关系。
是对随机森林变量重要性测度的改进,随机森林变量重要性测度是一种常用的变量选择方法。
遵循一种全相关变量选择方法,其中考虑与结果变量相关的所有特征。然而,大多数其他变量选择算法遵循最小最优方法,它们依赖于一小部分特征,从而在选择的分类器上产生最小的错误。
可以处理变量之间的相互作用,
可以处理随机森林重要性度量的波动性。
创建所有独立变量的副本。当原始数据中的自变量数小于5个时,使用现有变量至少创建5个副本。
打乱添加的重复副本的值,以删除它们与目标变量的相关性。被称为影子特征或排列副本。
将原件与洗过的副本合并。
在组合数据集上运行随机森林分类器,并执行变量重要性度量(默认为Mean reduce Accuracy)来评估每个变量的重要性,其中越高意味着越重要。
然后计算Z分数。即精度损失的均值除以精度损失的标准差。
找出阴影属性中的最大Z值(MZSA)
当变量的重要性显著低于MZSA时,将其标记为“不重要”。然后永久地把它们从这个过程中移除。
当变量的重要性显著高于MZSA时,将其标记为“重要”。
按照预定义的迭代次数(随机森林运行)重复上述步骤,或者直到所有属性都标记为“不重要”或“重要”,以先到者为准。
相反,有3个区域:
拒绝区域(红色区域):此处结束的要素被视为噪音,因此将其丢弃;一个无法解决的区域(蓝色区域):Boruta对于该区域中的特征犹豫不决;可接受区域(绿色区域):此处的特征被认为是可预测的,因此将其保留。
安装很简单直接安装即可。
- if(!require(Boruta))
- install.packages("Boruta")
我们分布选择了两组临床数据一种是分类类型,一种是生存数据,基于这两种数据类型进行变量特征的筛选。
- BreastCancer <- read.csv("wisc_bc_data.csv", stringsAsFactors = FALSE)
- str(BreastCancer)
- ## 'data.frame': 568 obs. of 32 variables:
- ## $ id : int 842517 84300903 84348301 84358402 843786 844359 84458202 844981 84501001 845636 ...
- ## $ diagnosis : chr "M" "M" "M" "M" ...
- ## $ radius_mean : num 20.6 19.7 11.4 20.3 12.4 ...
- ## $ texture_mean : num 17.8 21.2 20.4 14.3 15.7 ...
- ## $ perimeter_mean : num 132.9 130 77.6 135.1 82.6 ...
- ## $ area_mean : num 1326 1203 386 1297 477 ...
- ## $ smoothness_mean : num 0.0847 0.1096 0.1425 0.1003 0.1278 ...
- ## $ compactne_mean : num 0.0786 0.1599 0.2839 0.1328 0.17 ...
- ## $ concavity_mean : num 0.0869 0.1974 0.2414 0.198 0.1578 ...
- ## $ concave_points_mean : num 0.0702 0.1279 0.1052 0.1043 0.0809 ...
- ## $ symmetry_mean : num 0.181 0.207 0.26 0.181 0.209 ...
- ## $ fractal_dimension_mean : num 0.0567 0.06 0.0974 0.0588 0.0761 ...
- ## $ radius_se : num 0.543 0.746 0.496 0.757 0.335 ...
- ## $ texture_se : num 0.734 0.787 1.156 0.781 0.89 ...
- ## $ perimeter_se : num 3.4 4.58 3.44 5.44 2.22 ...
- ## $ area_se : num 74.1 94 27.2 94.4 27.2 ...
- ## $ smoothness_se : num 0.00522 0.00615 0.00911 0.01149 0.00751 ...
- ## $ compactne_se : num 0.0131 0.0401 0.0746 0.0246 0.0335 ...
- ## $ concavity_se : num 0.0186 0.0383 0.0566 0.0569 0.0367 ...
- ## $ concave_points_se : num 0.0134 0.0206 0.0187 0.0188 0.0114 ...
- ## $ symmetry_se : num 0.0139 0.0225 0.0596 0.0176 0.0216 ...
- ## $ fractal_dimension_se : num 0.00353 0.00457 0.00921 0.00511 0.00508 ...
- ## $ radius_worst : num 25 23.6 14.9 22.5 15.5 ...
- ## $ texture_worst : num 23.4 25.5 26.5 16.7 23.8 ...
- ## $ perimeter_worst : num 158.8 152.5 98.9 152.2 103.4 ...
- ## $ area_worst : num 1956 1709 568 1575 742 ...
- ## $ smoothness_worst : num 0.124 0.144 0.21 0.137 0.179 ...
- ## $ compactne_worst : num 0.187 0.424 0.866 0.205 0.525 ...
- ## $ concavity_worst : num 0.242 0.45 0.687 0.4 0.535 ...
- ## $ concave_points_worst : num 0.186 0.243 0.258 0.163 0.174 ...
- ## $ symmetry_worst : num 0.275 0.361 0.664 0.236 0.399 ...
- ## $ fractal_dimension_worst: num 0.089 0.0876 0.173 0.0768 0.1244 ...
- dim(BreastCancer)
- ## [1] 568 32
- table(BreastCancer$diagnosis)
- ##
- ## B M
- ## 357 211
- data = na.omit(BreastCancer)
- data = data[, -1]
- sum(is.na(data)) # 检测数据是否有缺失
- ## [1] 0
- data$diagnosis = factor(data$diagnosis)
- library(Boruta)
- set.seed(123456)
- # Boruta on the 'small redundant XOR' problem; read ?srx for details
-
- Boruta.srx <- Boruta(diagnosis ~ ., data = data)
-
- # Results summary
- print(Boruta.srx)
- ## Boruta performed 99 iterations in 4.828853 secs.
- ## 28 attributes confirmed important: area_mean, area_se, area_worst,
- ## compactne_mean, compactne_se and 23 more;
- ## No attributes deemed unimportant.
- ## 2 tentative attributes left: smoothness_se, symmetry_se;
-
- getSelectedAttributes(Boruta.srx, withTentative = F)
- ## [1] "radius_mean" "texture_mean"
- ## [3] "perimeter_mean" "area_mean"
- ## [5] "smoothness_mean" "compactne_mean"
- ## [7] "concavity_mean" "concave_points_mean"
- ## [9] "symmetry_mean" "fractal_dimension_mean"
- ## [11] "radius_se" "texture_se"
- ## [13] "perimeter_se" "area_se"
- ## [15] "compactne_se" "concavity_se"
- ## [17] "concave_points_se" "fractal_dimension_se"
- ## [19] "radius_worst" "texture_worst"
- ## [21] "perimeter_worst" "area_worst"
- ## [23] "smoothness_worst" "compactne_worst"
- ## [25] "concavity_worst" "concave_points_worst"
- ## [27] "symmetry_worst" "fractal_dimension_worst"
- getConfirmedFormula(Boruta.srx)
- ## diagnosis ~ radius_mean + texture_mean + perimeter_mean + area_mean +
- ## smoothness_mean + compactne_mean + concavity_mean + concave_points_mean +
- ## symmetry_mean + fractal_dimension_mean + radius_se + texture_se +
- ## perimeter_se + area_se + compactne_se + concavity_se + concave_points_se +
- ## fractal_dimension_se + radius_worst + texture_worst + perimeter_worst +
- ## area_worst + smoothness_worst + compactne_worst + concavity_worst +
- ## concave_points_worst + symmetry_worst + fractal_dimension_worst
- ## <environment: 0x0000018ec9d1da58>
查看下变量重要性鉴定结果(实际上面的输出中也已经有体现了),重要的变量(Confirmed),可能重要的变量 (Tentative, 重要性得分与最好的影子变量得分无统计差异),不重要的变量(Rejected)。
- # Attribute statistics
- attStats(Boruta.srx)
- ## meanImp medianImp minImp maxImp normHits
- ## radius_mean 10.071099 10.020482 8.89346761 11.433229 1.0000000
- ## texture_mean 10.892140 10.786118 8.98909647 12.846505 1.0000000
- ## perimeter_mean 10.223638 10.176604 8.94580870 11.534818 1.0000000
- ## area_mean 10.860116 10.852067 9.41161564 12.279282 1.0000000
- ## smoothness_mean 6.783699 6.832254 4.80767802 8.277114 1.0000000
- ## compactne_mean 6.264837 6.325530 4.85415252 7.554644 1.0000000
- ## concavity_mean 11.285933 11.260715 10.27740089 12.885148 1.0000000
- ## concave_points_mean 14.322787 14.220415 12.84816023 15.764685 1.0000000
- ## symmetry_mean 3.527213 3.593182 1.77659293 5.113061 0.8888889
- ## fractal_dimension_mean 3.573217 3.659878 1.58723946 5.240371 0.8686869
- ## radius_se 9.618961 9.577086 7.73723164 11.406974 1.0000000
- ## texture_se 3.268693 3.272174 0.75825557 5.816369 0.7575758
- ## perimeter_se 8.924915 8.870981 7.33077155 10.456411 1.0000000
- ## area_se 12.997349 13.009021 11.12331299 14.533677 1.0000000
- ## smoothness_se 2.470768 2.482660 0.54746529 4.488274 0.5050505
- ## compactne_se 4.405955 4.460622 2.87506010 5.779804 0.9696970
- ## concavity_se 5.521887 5.564202 4.01514226 6.516104 1.0000000
- ## concave_points_se 4.526428 4.625969 2.27646296 5.575703 0.9696970
- ## symmetry_se 2.441335 2.430235 0.36753495 5.328948 0.5151515
- ## fractal_dimension_se 3.346859 3.401471 -0.01172355 5.516967 0.7979798
- ## radius_worst 16.251607 16.217142 14.76565032 18.315129 1.0000000
- ## texture_worst 12.166592 12.219712 10.25806869 13.636629 1.0000000
- ## perimeter_worst 16.660151 16.580006 15.07094801 18.003991 1.0000000
- ## area_worst 16.802971 16.853102 15.16086916 18.559157 1.0000000
- ## smoothness_worst 9.643527 9.598221 8.58943124 11.163587 1.0000000
- ## compactne_worst 8.278087 8.348195 7.11928867 9.600703 1.0000000
- ## concavity_worst 12.681600 12.804867 11.12062428 14.198925 1.0000000
- ## concave_points_worst 17.189034 17.230931 15.54955351 18.633487 1.0000000
- ## symmetry_worst 7.355968 7.372868 5.65925679 8.603888 1.0000000
- ## fractal_dimension_worst 5.223650 5.215871 3.61622636 6.661654 0.9797980
- ## decision
- ## radius_mean Confirmed
- ## texture_mean Confirmed
- ## perimeter_mean Confirmed
- ## area_mean Confirmed
- ## smoothness_mean Confirmed
- ## compactne_mean Confirmed
- ## concavity_mean Confirmed
- ## concave_points_mean Confirmed
- ## symmetry_mean Confirmed
- ## fractal_dimension_mean Confirmed
- ## radius_se Confirmed
- ## texture_se Confirmed
- ## perimeter_se Confirmed
- ## area_se Confirmed
- ## smoothness_se Tentative
- ## compactne_se Confirmed
- ## concavity_se Confirmed
- ## concave_points_se Confirmed
- ## symmetry_se Tentative
- ## fractal_dimension_se Confirmed
- ## radius_worst Confirmed
- ## texture_worst Confirmed
- ## perimeter_worst Confirmed
- ## area_worst Confirmed
- ## smoothness_worst Confirmed
- ## compactne_worst Confirmed
- ## concavity_worst Confirmed
- ## concave_points_worst Confirmed
- ## symmetry_worst Confirmed
- ## fractal_dimension_worst Confirmed
绘制Boruta算法运行过程中各个变量的重要性得分的变化 (绿色是重要的变量,红色是不重要的变量,蓝色是影子变量,黄色是Tentative变量)。
# Result plotpar(mar=c(10,4,4,4))plot(Boruta.srx, las = 2,xlab = "")
Boruta运行期间属性Z-Score的演变。查看是否有必要增加迭代的次数以便再次确认Tentative变量中是否有一部分为有意义的特征变量。从下图来看,黄色变量部分随着迭代还是有部分可能高于最高值,可以继续尝试增加迭代次数。
plotImpHistory(Boruta.srx)
我们同样使用TCGA-LUSC的整理后的数据,带有生存分析 time和status,如下:
- library(survival)
- library(survminer)
- data(myeloma)
- myeloma <- na.omit(myeloma)
进行基于生存分析的特征选择,需要使用Surv()函数,如下:
- set.seed(123456)
-
- Y = Surv(myeloma$time, myeloma$event)
- Boruta_myeloma <- Boruta(y = Y, x = myeloma[, c(3, 6:11)])
-
- getSelectedAttributes(Boruta_myeloma, withTentative = F)
- ## [1] "WHSC1"
查看下变量重要性鉴定结果
- # Attribute statistics
- attStats(Boruta_myeloma)
- ## meanImp medianImp minImp maxImp normHits decision
- ## treatment 0.0000000 0.0000000 0.000000 0.0000000 0.00000000 Rejected
- ## CCND1 -0.6973991 -0.6388310 -2.328181 1.0746954 0.01010101 Rejected
- ## CRIM1 -0.4276388 -0.3696783 -1.906432 0.8617213 0.01010101 Rejected
- ## DEPDC1 2.9113813 2.8826225 -1.501727 7.1419334 0.46464646 Tentative
- ## IRF4 -2.1927083 -2.4296892 -4.416328 0.7547158 0.02020202 Rejected
- ## TP53 0.4520237 0.1772435 -2.935493 3.8682161 0.12121212 Rejected
- ## WHSC1 3.9403418 3.9254756 0.562233 10.7607458 0.62626263 Confirmed
绘制Boruta算法运行过程中各个变量的重要性得分的变化 (绿色是重要的变量,红色是不重要的变量,蓝色是影子变量,黄色是Tentative变量)。
- # Result plot
- plot(Boruta_myeloma, las = 2, xlab = "")
Boruta运行期间属性Z-Score的演变。查看是否有必要增加迭代的次数以便再次确认Tentative变量中是否有一部分为有意义的特征变量。从下图来看,黄色变量部分随着迭代还是有部分可能高于最高值,可以继续尝试增加迭代次数。
plotImpHistory(Boruta_myeloma)
我们已经看到了如何使用Boruta对数据集执行可靠的,基于统计的特征选择。实际上,对特征做出重大决策对于确保预测模型的成功至关重要。
Miron B. Kursa, Witold R. Rudnicki (2010). Feature Selection with the Boruta Package. Journal of Statistical Software, 36(11), p. 1-13. URL: tools:::Rd_expr_doi("10.18637/jss.v036.i11")
MachineLearning 2. 因子分析(Factor Analysis)
MachineLearning 3. 聚类分析(Cluster Analysis)
MachineLearning 4. 癌症诊断方法之 K-邻近算法(KNN)
MachineLearning 5. 癌症诊断和分子分型方法之支持向量机(SVM)
MachineLearning 6. 癌症诊断机器学习之分类树(Classification Trees)
MachineLearning 7. 癌症诊断机器学习之回归树(Regression Trees)
MachineLearning 8. 癌症诊断机器学习之随机森林(Random Forest)
MachineLearning 9. 癌症诊断机器学习之梯度提升算法(Gradient Boosting)
MachineLearning 10. 癌症诊断机器学习之神经网络(Neural network)
MachineLearning 11. 机器学习之随机森林生存分析(randomForestSRC)
MachineLearning 12. 机器学习之降维方法t-SNE及可视化(Rtsne)
MachineLearning 13. 机器学习之降维方法UMAP及可视化 (umap)
MachineLearning 14. 机器学习之集成分类器(AdaBoost)
MachineLearning 15. 机器学习之集成分类器(LogitBoost)
MachineLearning 16. 机器学习之梯度提升机(GBM)
MachineLearning 17. 机器学习之围绕中心点划分算法(PAM)
MachineLearning 18. 机器学习之贝叶斯分析类器(Naive Bayes)
MachineLearning 19. 机器学习之神经网络分类器(NNET)
MachineLearning 20. 机器学习之袋装分类回归树(Bagged CART)
MachineLearning 21. 机器学习之临床医学上的生存分析 (xgboost)
MachineLearning 22. 机器学习之有监督主成分分析筛选基因 (SuperPC)
MachineLearning 23. 机器学习之岭回归预测基因型和表型 (Ridge)
MachineLearning 24. 机器学习之似然增强Cox 比例风险模型筛选变量及预后估计 (CoxBoost)
MachineLearning 25. 机器学习之支持向量机应用于生存分析 (survivalsvm)
MachineLearning 26. 机器学习之弹性网络算法应用于生存分析 (Enet)
MachineLearning 27. 机器学习之逐步Cox回归筛选变量 (StepCox)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。