欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 文化 > 特征降维

特征降维

2025/4/2 8:50:18 来源:https://blog.csdn.net/qq_28309121/article/details/146774729  浏览:    关键词:特征降维

特征降维


1 降维

为什么要进行特征降维?

特征对训练模型时非常重要的;用于训练的数据集包含一些不重要的特征,可能导致模型泛化性能不佳
eg:某些特征的取值较为接近,其包含的信息较少
eg:希望特征独立存在对预测产生影响,两个特征同增同减非常相关,不会给模型带来更多的信息

特征降维目的

指在某些限定条件下,降低特征个数,用来降低模型出现过拟合的情况
特征降维涉及的知识面比较多,当前阶段常用的方法:
低方差过滤法、PCA(主成分分析)降维法、相关系数(皮尔逊相关系数、斯皮尔曼相关系数)

1.1 定义

降维是指在某些限定条件下, 降低随机变量(特征)个数,得到 一组“不相关”主变量的过程
  • 降低随机变量的个数
  • 相关特征(correlated feature)
    • 相对湿度与降雨量之间的相关
    • 等等
正是因为在进行训练的时候,我们都是使用特征进行学习。如果特征本身存在问题或者特征之间相关性较强,对于算法学习预测会影响较大

1.2 降维方式

我们可以通过下面两种方式达到降维目的:
  • 特征选择
  • 主成分分析(可以理解一种特征提取的方式)

2 特征选择

2.1 定义

数据中包含 冗余或无关变量(或称特征、属性、指标等),旨在从 原有特征中找出主要特征

2.2 方法

  • Filter(过滤式):主要探究特征本身特点、特征与特征和目标值之间关联
    • 方差选择法:低方差特征过滤
    • 相关系数
  • Embedded (嵌入式):算法自动选择特征(特征与目标值之间的关联)
    • 决策树:信息熵、信息增益
    • 正则化:L1、L2
    • 深度学习:卷积等

2.3 低方差特征过滤

删除低方差的一些特征,前面讲过方差的意义。再结合方差的大小来考虑这个方式的角度。
  • 特征方差小:某个特征大多样本的值比较相近
  • 特征方差大:某个特征很多样本的值都有差别
2.3.1 API
  • sklearn.feature_selection.VarianceThreshold(
threshold = 0.0 # 训练集差异低于threshold的特征将被删除。默认值是保留所
)
2.3.2 数据计算
我们对 某些股票的指标特征之间进行一个筛选,除去'index,'date','return'列不考虑 (这些类型不匹配,也不是所需要指标)一共这些特征
(971, 25734) 共计25734列,注意这里是列
1、初始化VarianceThreshold,指定阀值方差
2、调用fit_transform
# 删除低方差特征——特征选择
df = pd.read_csv("垃圾邮件分类数据.csv")
df.shape
# 1、实例化一个转换器类
transfer = VarianceThreshold(threshold=1)
# 2、调用fit_transform
data = transfer.fit_transform(df)
print("删除低方差特征的结果:\n", data)
print("形状:\n", data.shape)

返回结果:

2.4 相关系数

  • 主要实现方式:
    • 皮尔逊相关系数
    • 斯皮尔曼相关系数
2.4.1 皮尔逊相关系数
1.作用
皮尔逊相关系数(Pearson Correlation Coefficient)的作用是:反映变量之间相关关系密切程度的统计指标
2.公式计算案例(了解,不用记忆)
公式
举例
  • 比如说我们计算年广告费投入与月均销售额
那么之间的相关系数怎么计算
最终计算:
= 0.9942
所以我们最终得出结论是广告投入费与月平均销售额之间有高度的正相关关系。
3.特点
相关系数的值介于–1与+1之间,即–1≤ r ≤+1。其性质如下:
  • 当r>0时,表示两变量正相关,r<0时,两变量为负相关
  • 当|r|=1时,表示两变量为完全相关,当r=0时,表示两变量间无相关关系
  • 当0<|r|<1时,表示两变量存在一定程度的相关。且|r|越接近1,两变量间线性关系越密切;|r|越接近于0,表示两变量的线性相关越弱
  • 一般可按三级划分:|r|<0.4为低度相关;0.4≤|r|<0.7为显著性相关;0.7≤|r|<1为高度线性相关
4.api
  • from scipy.stats import pearsonr
    • x : (N,) array_like
    • y : (N,) array_like Returns: (皮尔逊相关系数 ,不相关性概率)
      • 返回一个元组,第一个值为皮尔逊相关系数,第二个为不相关性概率
5.案例
from scipy.stats import pearsonrx1 = [12.5, 15.3, 23.2, 26.4, 33.5, 34.4, 39.4, 45.2, 55.4, 60.9]
x2 = [21.2, 23.9, 32.9, 34.1, 42.5, 43.2, 49.0, 52.8, 59.4, 63.5]pearsonr(x1, x2)
2.4.2 斯皮尔曼相关系数
1.作用:
斯皮尔曼相关系数(Rank IC)的作用是:反映变量之间相关关系密切程度的统计指标
2.公式计算案例(了解,不用记忆)
公式:
举例:
3.特点
  • ρ>0:这表示两个变量之间存在正的单调关系。即当一个变量增加时,另一个变量也倾向于增加。正相关系数的值越接近 1,单调关系越强。
  1. ρ<0:这表示两个变量之间存在负的单调关系。即当一个变量增加时,另一个变量倾向于减少。负相关系数的值越接近 -1,单调关系越强。
  2. ∣ρ∣=1:这表示两个变量之间存在完美的单调关系。如果 ρ=1,则存在完美的正单调关系;如果 ρ=−1,则存在完美的负单调关系。在完美单调关系中,所有数据点都落在一条单调的曲线上。
  3. 0<∣ρ∣<1:这表示两个变量之间存在不同程度的单调关系,但不是完美的单调关系。相关系数的绝对值越接近 1,单调关系越强;绝对值越接近 0,单调关系越弱。如果 ρ 为正,则表示正单调关系;如果 ρ 为负,则表示负单调关系。
应用场景
斯皮尔曼相关系数适用于以下情况:
  • 数据不服从正态分布.
  • 数据是等级数据或顺序数据.
  • 需要评估两个变量之间的单调关系,而不是线性关系
4.api
  • from scipy.stats import spearmanr
5.案例
from scipy.stats import spearmanrx1 = [12.5, 15.3, 23.2, 26.4, 33.5, 34.4, 39.4, 45.2, 55.4, 60.9]
x2 = [21.2, 23.9, 32.9, 34.1, 42.5, 43.2, 49.0, 52.8, 59.4, 63.5]spearmanr(x1, x2)

结果
SpearmanrResult(correlation=0.9999999999999999, pvalue=6.646897422032013e-64)(皮尔逊相关系数 ,不相关性概率) 

3 主成分分析(PCA)

3.1 什么是主成分分析

  • 定义:高维数据转化为低维数据的过程,在此过程中可能会舍弃原有数据、创造新的变量
  • 作用:是数据维数压缩,尽可能降低原数据的维数(复杂度),损失少量信息。
  • 应用:回归分析或者聚类分析当中
对于信息一词,在决策树中会进行介绍
那么更好的理解这个过程呢?我们来看一张图
弊端:
pca不适合处理大批次的特征数据(例如:有几W个特征列...),可以先用 低方差法删除保留重要特征, 然后结合pca分析法实现。

3.2 API

将数据分解为较低维数空间
sklearn.decomposition. PCA(n_components=None)
X:numpy array格式的数据[n_samples,n_features]

3.3 数据计算

先拿个简单的数据计算一下
[[2,8,4,5],
[6,3,0,8],
[5,4,9,1]]
from sklearn.decomposition import PCAdef pca_demo():"""对数据进行PCA降维:return: None"""data = [[2,8,4,5], [6,3,0,8], [5,4,9,1]]# 1、实例化PCA, 小数——保留多少信息transfer = PCA(n_components=0.9)# 2、调用fit_transformdata1 = transfer.fit_transform(data)print("保留90%的信息,降维结果为:\n", data1)# 1、实例化PCA, 整数——指定降维到的维数transfer2 = PCA(n_components=3)# 2、调用fit_transformdata2 = transfer2.fit_transform(data)print("降维到3维的结果:\n", data2)return None

返回结果:
保留90%的信息,降维结果为:[[ -3.13587302e-16   3.82970843e+00][ -5.74456265e+00  -1.91485422e+00][  5.74456265e+00  -1.91485422e+00]]
降维到3维的结果:[[ -3.13587302e-16   3.82970843e+00   4.59544715e-16][ -5.74456265e+00  -1.91485422e+00   4.59544715e-16][  5.74456265e+00  -1.91485422e+00   4.59544715e-16]]


4 小结

  • 降维的定义【了解】
    • 就是改变特征值,选择哪列保留,哪列删除
    • 目标是得到一组”不相关“的主变量
  • 降维的两种方式【了解】
    • 特征选择
    • 主成分分析(可以理解一种特征提取的方式)
  • 特征选择【知道】
    • 定义:提出数据中的冗余变量
    • 方法:
      • Filter(过滤式):主要探究特征本身特点、特征与特征和目标值之间关联
        • 方差选择法:低方差特征过滤
        • 相关系数
      • Embedded (嵌入式):算法自动选择特征(特征与目标值之间的关联)
        • 决策树:信息熵、信息增益
        • 正则化:L1、L2
  • 低方差特征过滤【知道】
    • 把方差比较小的某一列进行剔除
    • api:sklearn.feature_selection.VarianceThreshold(threshold = 0.0)
      • 删除所有低方差特征
      • 注意,参数threshold一定要进行值的指定
  • 相关系数【掌握】
    • 主要实现方式:
      • 皮尔逊相关系数
      • 斯皮尔曼相关系数
    • 皮尔逊相关系数
      • 通过具体值的大小进行计算
      • 相对复杂
      • api:from scipy.stats import pearsonr
        • 返回值,越接近|1|,相关性越强;越接近0,相关性越弱
        • 相关性强了就可以考虑舍去一个
    • 斯皮尔曼相关系数
      • 通过等级差进行计算
      • 比上一个简单
      • api:from scipy.stats import spearmanr
      • 返回值,越接近|1|,相关性越强;越接近0,相关性越弱
      • 相关性强了就可以考虑舍去一个
  • pca【知道】
    • 定义:高维数据转换为低维数据,然后产生了新的变量
    • api:sklearn.decomposition.PCA(n_components=None)
      • n_components
        • 整数 -- 表示降低到几维
        • 小数 -- 保留百分之多少的信息

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com