高维数据中特征筛选方法的思考总结——多变量分析筛选法

article/2025/8/14 9:24:43

前言:之前的文章(高维数据中特征筛选方法的思考总结——单变量分析筛选法)中,对单变量分析筛选变量进行了初步考量,本文将进一步总结多变量分析筛选法。由于本文多处摘录网上的博客,只是进行了归纳整理,因此笔者将本文定性为转载类(转载请注明出处:https://blog.csdn.net/fjsd155/article/details/93754257)。

多变量分析方法根据建模特点可以分为线性降维和非线性降维。线性降维主要是 LASSO 和 PLS。非线性降维包括:XGBoost(GBDT的高效实现)、Random Forest 等。其实个人感觉CNN应该也是可以进行非线性降维的(但是目前CNN处理“非序列数据”并没有优势,笔者有个预处理的设想,准备尝试一下拓宽CNN的适用范围)。另外SVM这种强大的机器学习方法,似乎只能用来建模而不能筛选特征。

LASSO和PLS都是线性模型的降维方法,也就是说,这两种方法甚至包括上述单变量降维的方法,最终筛选的变量都是为了建立线性模型而准备的,而不能孵育出非线性模型(如存在交互作用的模型、复杂的SVM模型、决策树类模型以及复杂的神经网络模型)。非线性模型的生物学解释性很差(黑箱模型),一般不推荐使用。但是若强行想构建非线性模型,则仅采用上述线性降维的方法是不够理想的,需要采用非线性降维。

注意一个问题的存在:我们筛选特征往往基于训练数据(选择超参数或者最终建模常常会根据交叉验证,但是变量的筛选却常常只是基于训练集)。在训练数据中,变量的贡献程度越大,并不意味着这个变量越有价值。可能某些变量在模型中表现很普通,但是始终十分稳定(经得起考验);而有些变量在训练数据中表现很好,但外推性却较弱,表现波动大。因此变量的选择有必要综合训练数据和验证数据(如综合CV或Bootstrapping筛选变量)。最后再由独立测试数据进行检验。

筛选特征及建模的科学观念:模型的可重复性(多批数据)>大样本建模>模型的准确性。有人提出(貌似是范剑青老师等人提出),“针对一个统计方法,统计准确性、模型可解释性和计算复杂性是衡量其好坏的三个重要指标。”

(下面部分内容参考自:

一些变量筛选方法——1、综述

一些变量筛选方法——2、《An Introduction to Statistical Learning with R》上的数据降维方法

一些变量筛选方法——3、部分其它变量筛选方法)

刚刚从线性与否的角度对降维方法进行了分类概述。另外,An Introduction to Statistical Learning with R 这本书中将筛选变量的方法分为:子集选择法(Subset Selection)系数压缩法(Shrinkage)映射降维法(Dimension Reduction)

子集选择法

子集选择法分为最优子集选择逐步筛选法等,这部分方法依赖于下述模型评判指标:

  • Mallows 提出运用Cp去评估一个以普通最小二乘法(Ordinary Least Square或OLS)为假设的线性回归模型的优良性,从而用于模型选择。
  • 日本学者 Akaike 在1974年基于极大似然方法提出了AIC准则,它建立在熵的概念基础上,可以权衡所估计模型的复杂度和此模型拟合数据的优良性。
  • Schwarz 在Bayes方法的基础上提出BIC准则。与AIC相比,BIC加强了惩罚力度,考虑了样本量,从而在选择变量进入模型上更加谨慎。
  • Seymour Geisser 提出了交叉验证法(Cross validation),利用交叉验证结合最小平方误差的方法,是一种在没有任何前提假定的情况下直接进行参数估计的变量选择方法。

此外,还可以使用Adjusted R2进行评价来选择特征子集。这些指标的具体含义和使用方法,可参照An Introduction to Statistical Learning with R 或 一些变量筛选方法——2、《An Introduction to Statistical Learning with R》上的数据降维方法。

最优子集法(Best Subset Selection):其思想是将所有的特征组合都进行建模,然后选择最优的模型(最优的判断依据都是前面叙述的几种指标)。特点是能够找到全局最优但是计算量较大。

逐步筛选法(Stepwise Selection)分为向前逐步回归与向后逐步回归。其主要思想是:每一次迭代都只能沿着上一次迭代的方向继续进行。向前逐步回归是指初始模型只有常数项,然后逐渐添加变量;向后逐步回归是指初始模型包含了所有变量,然后逐渐删除变量。特点是仅关注局部最优(贪心策略)难以保证全局最优(注:向前与向后逐步回归筛选出的变量可能不一样,但其思想完全一样。)

系数压缩法

系数压缩法主要指LASSO。岭回归只能实现系数压缩而不能降维,但是可以通过合理的调参,将系数压缩后对系数进行排序,从而实现降维(但既然LASSO已经还不错了,没必要强行使用岭回归降维)。

LASSO可参考博客:LASSO回归

映射降维法

映射降维法主要指的是PLS。另外,PCR(主元回归法)是进行主成分分析(PCA)后,选取前几个主成分进行建模,但实际上建模的效果很一般;PLS是基于PCA的思想,结合回归建模、典型关联分析(CCA)以及拟合残差(带一点Gradient Boost)等各家思想,所孕育出的一种建模分析和降维方法。

PLS可参考博客:偏最小二乘法 Partial Least Squares

其他不错的方法

除了上述三大类方法,树结构的方法以及Boosting类的方法也是比较有效的,如:Random ForestXGBoost(GBDT的高效实现)等。此外,Fan和Li 结合L0与L1范数提出的SCAD (Smoothly Clipped Absolute Deviation);Fan 提出的SIS(Sure Independence Screening)等。

Random Forest

随机森林模型本身是用于预测的模型,但在预测过程中,可以对变量重要性进行排序,然后通过这种排序来进行变量筛选。

变量重要性评判用Gini指数为标准,针对一棵树中的每个节点 k,我们都可以计算一个Gini指数:
      

其中\hat{p}_k表示样本在节点 k 属于任意一类的概率估计值。

一个节点的重要性由节点分裂前后Gini指数的变化量来确定:
      

G_{k1} 和G_{k2} 分别表示G_{k} 产生的子节点。针对森林中的每棵树,都用上述的标准来递归产生,最终随机抽取样本和变量,产生森林,假设森林共产生 T 棵树。

森林中,如果变量X_i 在第 t 棵树中出现 M 次,则变量X_i 在第 t 棵树的重要性为:
      

X_i 在整个森林中的变量重要性为:
      
最终我们根据变量重要性来选择变量,选择的个数可以用SIS中的方法,选取n−1 或n/logn 个。

XGBoost

GBDT的建模过程是,一步步拟合残差,那么在一步步的拟合的过程中,也便是变量选择的过程(从一定程度上实现了变量的筛选)(这种逐步拟合残差的思想的方法还有PLS)。XGBoost是GBDT的高效实现方法。

GBDT的介绍可参考:GBDT

XGBoost 的介绍可参考:XGBoost

SCAD

与岭回归相比,SCAD降低了模型的预测方差,与此同时与LASSO相比,SCAD又缩小了参数估计的偏差,因而受到了广泛的关注。L0方法只会进行变量筛选,不会进行压缩,L1(LASSO)既会进行变量筛选,也会对系数继续一定的调整。而SCAD可以从图中很明显的其结合了两种方法,对系数较大的变量不进行惩罚,对系数较少的进行压缩或者删去,因此这种方法既可以筛选变量,也有着Oracle的性质。SCAD虽然有相应的迭代算法,但是由于其复杂度高,所以计算速度相对较慢

SCAD的产生,有点借鉴Elastic Net。

SIS

当遇到超高维数据,即维数P无穷大时,上述的算法会出现问题。针对这类超高维问题,Fan等人提出了SIS的方法。

针对线性回归模型(2),按照SIS的思想,首先Y为中心化向量,计算Y与每一个自变量x_i 的相关系数,记为 \omega=X^TY

其中\omega=(\omega_1,\omega_2,...,\omega_p)^T,若\omega_i越大,说明x_i与Y 相关性越强。所以,可以根据 |\omega_i| 的大小来进行变量选择。对任意的\gamma \in (0,1),对 |\omega_i| 进行从大到小排序,然后取其一个子集

      

其中,n是样本数,[\gamma n] 是\gamma n 的整数部分,进而保证了[\gamma n]<n,与之对应的自变量则入选模型。如果觉得选择 [\gamma n] 不便于确定,可以选择 n-1 或n/logn。

而关于相关系数,可以选用自己认为合适的。本文后面的模拟选用传统的Pearson相关系数,以及近几年比较火的可用于检验独立的无参数假设的距离相关性(Distance Covariance)(见:一些变量筛选方法——3、部分其它变量筛选方法)。

严格来说,SIS 属于单变量分析方法。

另外,SIS有一些衍生版本,如DC-SIS及Qa-SIS等,其中Qa-SIS好像是可以处理非线性问题的(据说还是“异方差”)。

PDAS

原始对偶激活集算法(Primal Dual Active Set,PDAS)是一个非常新的方法,但做的事情是最优子集选择的事情。其主要思想是引入激活集,对所有的 β 进行批量迭代更新。这个方法的优势在于,可以处理超高维数据(上万维),而最优子集选择一旦超过了50维,基本就完全没办法进行运算。后面我们也将采用PDAS来进行模拟。

PDAS的介绍可参考:一些变量筛选方法——3、部分其它变量筛选方法

 

另外,有人总结了7种降维方法(七种降维方法):

  1. 缺失值比率 (Missing Values Ratio) ;
  2. 低方差滤波 (Low Variance Filter) ;
  3. 高相关滤波 (High Correlation Filter);
  4. 随机森林/组合树 (Random Forests);
  5. 主成分分析 (PCA);
  6. 反向特征消除 (Backward Feature Elimination);
  7. 前向特征构造 (Forward Feature Construction)。

本文的总结其实基本上都包含了这些内容。

也有人总结了12种降维方法(在以上7种方法基础上加了5种)(来源:Analytics Vidhya:The Ultimate Guide to 12 Dimensionality Reduction Techniques (with Python codes),也可参考:12种降维方法终极指南(含Python代码)):

  1. 缺失值比率:如果数据集的缺失值太多,我们可以用这种方法减少变量数。
  2. 低方差滤波器:这个方法可以从数据集中识别和删除常量变量,方差小的变量对目标变量影响不大,所以可以放心删去。
  3. 高相关滤波器:具有高相关性的一对变量会增加数据集中的多重共线性,所以用这种方法删去其中一个是有必要的。
  4. 随机森林:这是最常用的降维方法之一,它会明确算出数据集中每个特征的重要性。
  5. 向后特征消除:耗时较久,计算成本也都很高,所以只适用于输入变量较少的数据集。
  6. 前向特征选择:思路类似于“向后特征消除”。
  7. 因子分析:这种方法适合数据集中存在高度相关的变量集的情况。
  8. 主成分分析(PCA):这是处理线性数据最广泛使用的技术之一。
  9. 独立分量分析(ICA):我们可以用ICA将数据转换为独立的分量,使用更少的分量来描述数据。
  10. 基于投影的方法:ISOMAP适合非线性数据处理。
  11. t分布式随机邻域嵌入(t-SNE):也适合非线性数据处理,相较上一种方法,这种方法的可视化更直接。
  12. UMAP:用于高维数据,与t-SNE相比,这种方法速度更快。

      

之后有空可以再总结下 t-SNE(无监督降维方法,主要用于高维度数据的降维可视化)。

另外,scikit-learn机器学习工具包的官网也有一些特征筛选的方法介绍,有博客基于此进行了介绍(原文:http://dataunion.org/14072.html,但是好像原文访问不了了,可以看看转载的博客,比如:几种常用的特征选择方法,或 干货:结合Scikit-learn介绍几种常用的特征选择方法 )。

除了这些,还有一些方法也值得一试,如:随机投影(Random Projections),非负矩阵分解(N0n-negative Matrix Factorization),自动编码(Auto-encoders),卡方检测与信息增益(Chi-square and information gain), 多维标定(Multidimensional Scaling), 相关性分析(Coorespondence Analysis),聚类(Clustering)以及贝叶斯模型(Bayesian Models)。

基于聚类的方法,可以参考:

特征筛选(变量聚类proc varclus)

聚类特征变量选取、聚类算法与效果评价简述

特征选择(二)-聚类变换

还有互信息法模拟退火法以及一些组合策略等,之后再了解一下。参考:

特征选择(2):特征选择:方差选择法、卡方检验、互信息法、递归特征消除、L1范数

模拟退火筛选变量

特征选择的策略--数据相关性(皮尔逊系数)与gini或者信息熵的的结合

特征选择之基于相关性的特征选择(CFS)

自编码器也是不错的无监督降维方法,是一种神经网络,之后可以研究下。

 

各种方法的对比评测及代码示例

这部分内容可以参考:

一些变量筛选方法——4、模拟实验

一些变量筛选方法——5、真实数据与总结

一些变量筛选方法——6、代码

 

参考资料

一些变量筛选方法——1、综述

一些变量筛选方法——2、《An Introduction to Statistical Learning with R》上的数据降维方法

一些变量筛选方法——3、部分其它变量筛选方法

一些变量筛选方法——4、模拟实验

一些变量筛选方法——5、真实数据与总结

一些变量筛选方法——6、代码

LASSO回归

偏最小二乘法 Partial Least Squares

GBDT

XGBoost

七种降维方法

The Ultimate Guide to 12 Dimensionality Reduction Techniques (with Python codes)

Comprehensive Guide on t-SNE algorithm with implementation in R & Python

12种降维方法终极指南(含Python代码)

特征筛选(变量聚类proc varclus)

聚类特征变量选取、聚类算法与效果评价简述 

特征选择(一)-维数问题与类内距离

特征选择(二)-聚类变换


http://chatgpt.dhexx.cn/article/m3qo3A1r.shtml

相关文章

R语言实现单变量分析教程

单变量分析是理解单个变量的数值分布情况&#xff0c;与之相对的有双变量分析和多变量分析。 加载示例数据 因为csv文件中年收入字段有千分位分隔符&#xff0c;所以先定义转换函数。 setClass("num.with.commas") setAs("character", "num.with.co…

多变量分析绘图及分类属性绘图【知识整理】

多变量分析绘图及分类属性绘图 综述代码模块多指标离散图绘制盒图violin图条形图点图多层面板分类图factorplot()详细说明 小结 综述 学生党整理一些关于数据分析的知识&#xff1a;整理了多变量分析绘图及分类属性绘图的相关代码。主要包括了多指标离散图的绘制、盒图的绘制、…

python多变量相关性分析_多变量相关性分析(一个因变量与多个自变量)

目录:前言 偏相关或复相关 意义与用途 分析方法: 1、 样本相关系数矩阵、相关系数检验 2、 复相关分析 3、 决定系数 (RMSE的介绍) 小结 一、前言: 继上一篇文章,继续探讨相关性分析,这次不再是两个变量,而是3个或者以上的变量之间的相关关系分析。 没读过上…

一文了解11个常见的多变量分析方法!

在社会科学研究中&#xff0c;主要的多变量分析方法包括多变量方差分析&#xff08;Multivariate analysis of variance&#xff0c;MANOVA&#xff09;、主成分分析&#xff08;Principal component analysis&#xff09;、因子分析&#xff08;Factor analysis&#xff09;、…

多变量分析”——数据挖掘、数据分析

I。多重对应分析 多重对应分析在超过两个以上定类变量时有时候非常有效&#xff0c;当然首先我们要理解并思考&#xff0c;如果只有三个或有限的几个变量完全可以通过数据变换和交互表变量重组可以转换成两个定类变量&#xff0c;这时候就可以用简单对应分析了。 对应分析对数据…

点赞、收藏必读文章--数据分析的多变量分析

数据探索性分析(EDA)——多(双)变量分析 0 引言 上一篇文章震惊&#xff01;Python单变量分析竟然如此简单&#xff1f; 介绍了数据分析中的单变量分析&#xff0c;但是我们在实际场景中&#xff0c;遇到的数据大多数是具有多特征、多变量的&#xff0c;因此除了对单个变量进…

“多变量分析”——数据挖掘、数据分析

I。多重对应分析 多重对应分析在超过两个以上定类变量时有时候非常有效&#xff0c;当然首先我们要理解并思考&#xff0c;如果只有三个或有限的几个变量完全可以通过数据变换和交互表变量重组可以转换成两个定类变量&#xff0c;这时候就可以用简单对应分析了。 对应分析对数据…

Open source Python toolbox for seismology

Open source Python toolbox for seismology ObsPy: A Python Toolbox for Seismology https://www.iris.edu/hq/webinar/2015/05/obspy_a_python_toolbox_for_seismology https://github.com/obspy/obspy http://www.obspy.org → https://github.com/obspy/obspy/wiki 2.用p…

Xmy的Python----Numpy库

目录 例题10-1&#xff1a;创建数组并查看数组属性 构造复杂数组 生成随机数 例题10-2&#xff1a;绘制&#xff1a;随机生成10000数据&#xff0c;服从均值为0&#xff0c;方差为1的正态分布的直方图&#xff08;间隔个数&#xff1a;50&#xff09; 通过索引访问数组 数组的…

python3.8安装pysal库

python3.8 安装 pysal 库 我最后是在虚拟环境中测试成功的&#xff0c;在原来的环境中测试还是有问题&#xff0c;但是装这个库只是为了一个assignment&#xff0c;踩完坑来总结一下&#xff0c;先用上再说。 1. 创建虚拟环境 正常环境无论是conda install 还是 conda-forge …

YYlabelCopy

YYlabelCopy 前言 最近公司刷题项目重构,之前刷题是采用富文本渲染,性能极差,业界大神ibireme的YYKit想必大家都知道,YYText的好用之处我就不再赘述.一开始我们是把UIlabel换成YYTextView,为什么不直接换成YYlabel,YYlabel支持异步绘制,因为我们是做公考项目的,试题都要支持复…

Kong Customize Python Plugin

Kong Customize Python Plugin 前情提要&#xff1a;由于公司业务需求&#xff0c;需要针对 Kong 自定义插件&#xff0c;而 Kong 的插件主要是 Lua 语言&#xff0c;公司的技术栈是 Python&#xff0c;所以升级了 Kong 版本到 3.1。Kong3.1支持使用 Python 语言的插件&#xf…

ubuntu中pip install cython_bbox报错

pip install cython_bbox报错 问题记录 pip install cython_bbox报错如下 Collecting cython_bboxUsing cached cython_bbox-0.1.3.tar.gz (41 kB)Preparing metadata (setup.py) ... errorerror: subprocess-exited-with-error python setup.py egg_info did not run succe…

Cython-bbox pip 安装报错

安装步骤 下载Cython_bbox源码&#xff0c;点击Download files下载。解压文件。打开setup.py&#xff0c;找到第31行&#xff0c;把其中extra_compile_args[’-Wno-cpp’]的替换为extra_compile_args{‘gcc’: [‘/Qstdc99’]}。保存改动&#xff0c;返回cython_bbox-0.1.3文件…

pysot-toolkit测试及对比

文章目录 前言1、环境搭建2、文件配置3、测试及对比3.1 单跟踪器测试3.2 多跟踪器对比 前言 pysot-toolkit是一款评估单目标跟踪性能的工具&#xff0c;可以计算OPE(One Pass Evaluation)下的Success和Precision、以及VOT(Visual Object Tracking)的性能指标Accuracy、Robustne…

Python加解密库——pycrypto(pycryptodome)

文章目录 简介安装方法一&#xff1a;Visual Studio方法二&#xff1a;pycryptodome&#xff08;推荐&#xff09; 初试公钥加解密对称加密非对称加密 数字签名哈希函数安全通信加密IO封装遇到的坑参考文献 简介 pycrypto 实现了哈希函数&#xff08;如 SHA256&#xff09;和加…

自制Python小工具(1)——Gadgets 0.1

文章目录 1. 前言2. Gadgets 0.1介绍2.1 使用过程概述 3. Gadgets 0.1功能实现3.1 创建文件3.2 功能编程3.2.1 安装3.2.2 导库3.2.3 定义函数并实现功能 3.3 主程序3.3.1 向用户问好并提供指示3.3.2 填入功能 3.4 装饰加载 4. 源码展示4.1 extract_music.py4.2 loading.py4.3 G…

Windows下安装pycocotools(本人亲测,可以解决)

Windows下安装pycocotools 1. 下载pycocotools的源码2. 安装python对应的VC3. 进行pycocotools的编译4. 测试安装是否成功 参考博客&#xff1a;原博客 由于windows下是不能直接使用conda install 或者pip install pycocotools&#xff0c;唉&#xff0c;不像linux系统&#x…

学习 PySOT(2)(PySOT-toolkit、对比、画图)

文章目录 前言一、pysot-toolkit准备工作1.所需环境要求2.文件配置3.运行配置&#xff08;对比算法&#xff09; 二、安装latex软件(win10系统)1.安装MiKTeX2.安装TexMaker3.配置TexMaker4.配置MiKTeX 三、运行eval.py画图1. 修改eval.py参数&#xff0c;运行2. 常见问题解决 前…

redis-exporter监控

文章目录 启动redis-export服务启动prometheus服务启动granfana服务测试报警 使用redis-exporter监控redis服务&#xff0c;并且使用prometheus收集数据&#xff0c;使用grafana展示数据。 监控报警利用alertmanager插件&#xff0c;报警信息发送钉钉消息。所使用的安装包可以 …