特征降维
文章目录
降维是指在某些限定条件下,降低随机变量(特征)个数,得到一组“不相关”主变量的过程。
降低随机变量的个数
正是因为在进行训练的时候,我们都是使用特征进行学习。如果特征本身存在问题或者特征之间相关性较强,对于算法学习预测会影响较大。
特征选择
1定义 数据中包含冗余或相关变量(或称特征、属性、指标等),旨在从原有特征中找出主要特征。
方法
- Filter(过滤法):按照发散性或相关性对各个特征进行评分,设定阈值或者待选择特征的个数进行筛选
- 方差选择法:低方差特征过滤
- 相关系数:特征与特征之间的相关性
- Wrapper(包装法):根据目标函数(往往是预测效果评分),每次选择若干特征,或者排除若干特征
- Embedded(嵌入法):先使用某些机器学习的模型进行训练,得到各个特征的权值系数,根据系数从大到小选择特征(类似于Filter,只不过系数是通过训练得来的)
- 决策树:信息熵、信息增益
- 正则化:L1、L2
- 深度学习:卷积等
过滤式
基本想法是:分别对每个特征 x_i ,计算 x_i 相对于类别标签 y 的信息量 S(i) ,得到 n 个结果。然后将 n 个 S(i) 按照从大到小排序,输出前 k 个特征。显然,这样复杂度大大降低。那么关键的问题就是使用什么样的方法来度量 S(i) ,我们的目标是选取与 y 关联最密切的一些 特征x_i 。
Pearson相关系数 卡方验证 互信息和最大信息系数 距离相关系数 方差选择法
方差选择法
这种方法先要计算各个特征的方差,然后根据阈值,选择方差大于阈值的特征。
例如,假设我们有一个具有布尔特征的数据集,并且我们要删除超过80%的样本中的一个或零(开或关)的所有特征。布尔特征是伯努利随机变量,这些变量的方差由下式给出:
VarianceThreshold是特征选择的简单基线方法。它删除方差不符合某个阈值的所有特征。默认情况下,它会删除所有零差异特征,即所有样本中具有相同值的特征。代码如下:
- class原型: sklearn.feature_selection.VarianceThreshold(threshold=0.0)
- 参数: threshold: 指定方差的阙值,特征的方差低于此阙值将被剔除
- 成员属性:variances_:一个数组,分别为各特征的方差
- 成员方法:
- fit(X,[,y]):从样本数据中学习方差
- transform(X): 执行特征选择(删除低于阙值的特征)
- fit_transform(X [,y]) 执行特征选择(删除低于阙值的特征)
- get_support([indices])
- True:返回被选出的特征的下标
- False:返回一个布尔值组成的数组,该数组指示哪些特征被选中
例子: 假设我们有一个bool型的数据集,并且我们想要去掉那些超过80%的样本都取值为0(或者为1)的所有特征。bool型特征是伯努利随机变量,方差为 $\operatorname{Var}(X)=p(1-p)$
|
|
方差选择的逻辑并不是很合理,这个是基于各特征分布较为接近的时候,才能以方差的逻辑来衡量信息量。但是如果是离散的或是仅集中在几个数值上,如果分布过于集中,其信息量则较小。而对于连续变量,由于阈值可以连续变化,所以信息量不随方差而变。 实际使用时,可以结合cross-validate进行检验
Pearson相关系数
皮尔森相关系数是一种最简单的,能帮助理解特征和响应变量之间关系的方法,该方法衡量的是变量之间的线性相关性,结果的取值区间为[-1,1],-1表示完全的负相关,+1表示完全的正相关,0表示没有线性相关。
- 相关系数的值介于-1与+1之间,即-1≤r≤+1。其性质如下:
- 当>0时,表示两变量正槽关,r<0时,两变量为负相关。
- 当|r|=1时,表示两变量为完全相关,当r=0时,表示两变量间无相关关系。
- 当0<|r|<1时,表示两变量存在一定程度的相关。且越接近1,两变量间线性关系越密切;越接近于0,表示两变量的线性相关越弱。
- 一般可按三级划分:|r|<0.4为低度相关;0.4≤|r|<0.7为显著性相关;0.7≤|r|<1为高度线性相关。
Pearson Correlation速度快、易于计算,经常在拿到数据(经过清洗和特征提取之后的)之后第一时间就执行。Scipy的 pearsonr 方法能够同时计算 相关系数 和p-value.
|
|
Pearson相关系数的一个明显缺陷是,作为特征排序机制,他只对线性关系敏感。如果关系是非线性的,即便两个变量具有一一对应的关系,Pearson相关性也可能会接近0。例如:
|
|
主成分分析
主成分分析(Principal Component Analysis,PCA)是一种常用的数据降维技术。其目的是从高维度的数据中提取主要特征,将数据的维度降低到较低的维度,同时尽可能保留大部分原始数据的信息。
- 定义:高维数据转化为低维数据的过程,在此过程中可能会舍弃原有数据、创造新的变量
- 作用:是数据维数压缩,尽可能降低原数据的维数(复杂度),损失少量信息。
- 应用:回归分析或者聚类分析当中
具体来说,主成分分析的过程如下:
- 对数据进行标准化处理,使得每个变量的均值为0,方差为1。
- 计算数据的协方差矩阵。
- 对协方差矩阵进行特征值分解,得到特征值和特征向量。
- 将特征值按大小排序,选取最大的k个特征值对应的特征向量作为主成分。
- 将原始数据映射到选取的主成分上,得到降维后的数据。
主成分分析的重点在于计算协方差矩阵和特征值分解。协方差矩阵描述了变量间的线性关系,特征值和特征向量是协方差矩阵的数学特性。在数据降维时,我们通过选取最大的k个特征值对应的特征向量作为主成分,保留了数据中的主要变化方向和信息。由于特征值表示了这些主成分解释变量总方差的比例,因此可以根据特征值的大小选择适当的主成分数量,实现数据的降维。
|
|
附录
标准差和方差
差:的意思是离正常有多远。
关于0-1分布的方差推导
0-1分布是一种特殊的离散概率分布,只有两个可能取值:0 和 1。它也被称为伯努利分布或两点分布。
对于一个随机变量 $X$,若 $X$ 服从 0-1 分布,则其方差 $\operatorname{Var}(X)$ 的计算如下:
首先,0-1分布的期望值为 $E(X)=p$,其中 $p$ 是 $X=1$ 的概率,$1-p$ 是 $X=0$ 的概率。
然后,根据方差的定义:
$$ \begin{aligned} \operatorname{Var}(X)&=E[(X-E(X))^2]\ &=E[(X-p)^2] \end{aligned} $$
因为 $X$ 只能取 0 或 1,所以可以将上式展开,得到:
$$ \begin{aligned} \operatorname{Var}(X)&=E[(X-p)^2]\ &=E[X^2-2Xp+p^2]\ &=E(X^2)-2pE(X)+p^2\ &=E(X^2)-2p^2+p^2\ &=E(X^2)-p^2 \end{aligned} $$
最后我们来计算 $E(X^2)$,根据定义:
$$ E(X^2)=\sum_{i=0}^{1} i^2 P(X=i) $$
因为 $X$ 只能取 0 或 1,所以:
$$ E(X^2)=0^2P(X=0)+1^2P(X=1)=0\times(1-p)+1\times p=p $$
带入前面的式子可得:
$$ \operatorname{Var}(X)=E(X^2)-p^2=p-p^2=p(1-p) $$
因此,当 $X$ 服从 0-1 分布时,$\operatorname{Var}(X)=p(1-p)$。
参考
(x mean)/std fit_transform() fit() 计算每一列的平均值、标准差 transform() 带入(X-mean)/std进行最终的转换
3.1 sklearn转换器和估计器 转换器 估计器(estimator) 3.1.1 转换器 - 特征工程的父类 1 实例化 (实例化的是一个转换器类(Transformer)) 2 调用fit_transform(对于文档建立分类词频矩阵,不能同时调用) 标准化: (x - mean) / std fit_transform() fit() 计算 每一列的平均值、标准差 transform() (x - mean) / std进行最终的转换 3.1.2 估计器(sklearn机器学习算法的实现) 估计器(estimator) 1 实例化一个estimator 2 estimator.fit(x_train, y_train) 计算 —— 调用完毕,模型生成 3 模型评估: 1)直接比对真实值和预测值 y_predict = estimator.predict(x_test) y_test == y_predict 2)计算准确率 accuracy = estimator.score(x_test, y_test)
文章作者 zput
上次更新 2023-11-02