化妆培训网站 源码,网站维护中怎么解决,厦门网站建设公司推荐,郑州正规公司网站建设服务医学预测变量筛选的几种方法#xff08;R语言版#xff09;
预测变量筛选是机器学习中的一个重要环节#xff0c;它可以帮助我们识别出与目标变量最相关的特征#xff0c;从而提高模型的预测精度和解释性。在医学领域#xff0c;预测变量筛选可以用于疾病诊断、预后评估、…医学预测变量筛选的几种方法R语言版
预测变量筛选是机器学习中的一个重要环节它可以帮助我们识别出与目标变量最相关的特征从而提高模型的预测精度和解释性。在医学领域预测变量筛选可以用于疾病诊断、预后评估、个性化治疗等方面。 目前 多种预测变量筛选方法每种方法都有其特点。本文将介绍几种常用的R语言方法包括
线性模型相关的 逐步法Lasso回归法 树形模型相关的 Boruta法SHAP法 通用型 RFE
1. 线性模型相关方法
1.1 逻辑回归的逐步法
逐步法是一种经典的变量筛选方法它通过不断迭代的方式逐步加入或剔除变量最终找到一个最优的变量子集。逐步法有两种常见的形式
前向逐步回归从一个包含所有变量的模型开始每次迭代加入一个与目标变量最相关的变量直到达到停止条件。后向逐步回归从一个包含所有变量的模型开始每次迭代剔除一个与目标变量最不相关的变量直到达到停止条件。
逐步法的优点是简单易懂计算效率高。缺点是容易陷入局部最优并且不能很好地处理多重共线性问题。这里是用的是R语言的klaR包主要进行逻辑回归的逐步法其中又包括两种算法stepclass和greedy.wilks。
library(klaR)
library(MASS)
#criterion:A list with elements:CR:Correctness Rate;AC:Accuracy;AS:Ability to Seperate;CF:Confidence;CFvec:Confidence for each (true) class
sc_obj - stepclass(class ~ ., data data, method qda,criterion AS)
sc_obj1.2 Lasso回归法
Lasso回归法是一种基于L1正则化的回归方法它可以同时进行变量筛选和系数估计。Lasso回归的惩罚项会使部分系数变为0从而实现变量筛选。
Lasso回归的优点是能够有效地处理多重共线性问题并且具有较好的泛化能力。缺点是可能无法选择出所有重要的变量。
这里主要用到的包是glmnet。
library(glmnet)
#glmnet要求的数据格式,释放出分类变量的各个类别
ydata_one_hot%%dplyr::select(contains(class))%%as.matrix()
xdata_one_hot%%dplyr::select(!contains(class))%%as.matrix()
#cv获取lambda的取值范围
lasso_cvcv.glmnet(x,y,familybinomial,type.measuredeviance)
plot(lasso_cv)
# tidy(lasso_cv)
lassoglmnet(x,y,familybinomial,lambdac(lasso_cv$lambda.min,lasso_cv$lambda.1se))
plot(lasso,xvarlambda,labelTRUE)
coef(lasso)2. 树形模型相关方法
2.1 Boruta法
Boruta法是一种基于随机森林的变量筛选方法。它通过构建多个随机森林模型并比较每个变量在不同模型中的重要性来判断该变量是否重要。
Boruta法的优点是能够有效地处理非线性关系并且可以用于处理高维数据。缺点是计算效率较低。
R语言中的Boruta包可以实现。
library(Boruta)
set.seed(1)
boruta_obj-Boruta(class ~.,datadata,doTrace0,ntree500,pValue0.001)
print(TentativeRoughFix(boruta_obj))#分两类
print(boruta_obj)#三类包含怀疑的数据2.2 SHAP法
SHAP法是一种基于SHAP值SHapley Additive Explanations的变量解释方法。SHAP值可以解释每个变量对模型预测结果的贡献。
SHAP法可以用于变量筛选通过比较不同变量的SHAP值大小来判断该变量的重要性。SHAP法的优点是能够解释模型的预测结果并且具有较好的可解释性。缺点是计算效率较低。
R语言的shapviz包可以实现SHAP值的计算和可视化。
shp - shapviz(extract_fit_engine(lightgbm_final_fit), X_pred data.matrix(data[,-9]),Xdata)
# svg(shap_plot_N_M.svg)
sv_importance(shp,kindboth,show_numbers TRUE,number_size 5)theme(axis.textelement_text(size14),axis.title.x element_text(size14))
# dev.off()3. RFE 通过改变rfeControl函数中的functions参数可以选定各种模型
library(caret)
# 设置rfe的选项
set.seed(1)
rfeControl rfeControl(functions gamFuncs,method cv, # 默认自助法重采样 bootsaveDetails F, # 保存预测值和变量重要性number 5, # 重抽样次数allowParallel F # 允许多线程用这个之前你要先准备好多线程)
set.seed(1)
gamProfile - rfe(class~., data,sizes c(1:8),rfeControl rfeControl)
gamProfile以上介绍了五种常用的预测变量筛选方法每种方法都有其优缺点。在实际应用中可以根据具体情况选择合适的方法。文中代码为部分代码完整的代码参见可一键运行。和鲸社区代码示例