当前位置: 首页 > news >正文

机器学习——08 特征降维

1 特征降维

  • 为什么要进行特征降维?特征对于训练模型很关键,但训练数据里可能有不重要的特征,导致模型泛化性能不佳

    • 比如有些特征取值接近,能提供的信息少;

    • 又比如如果两个特征变化趋势高度一致,就会存在冗余信息,不能给模型带来新的有用信息;

  • 特征降维目的:在特定条件下减少特征的数量;

  • 因为特征降维涉及多种知识,目前常用的方法有低方差过滤法PCA(主成分分析)降维法以及相关系数(包括皮尔逊相关系数和斯皮尔曼相关系数)等。

2 低方差过滤法

  • 低方差过滤法

    • 核心思想是删除方差低于设定阈值的特征;

    • 特征方差小意味着特征值波动范围小,能提供的信息少,模型很难从中学习到有用的内容;

    • 特征方差大则表示特征值波动范围大,包含的信息相对丰富,更有利于模型学习;

  • API

    • sklearn.feature_selection.VarianceThreshold(threshold = 0.0):这是用于实现低方差过滤的类,实例化这个对象可以用来删除所有低方差特征,这里的阈值默认是0.0;

    • variance_obj.fit_transform(X):其中X是numpy array格式的数据,形状为[n_samples, n_features],这个方法会对数据进行处理;

    • 返回值:会删除训练集中方差低于阈值的特征。默认情况下是保留所有非零方差特征,也就是会删除所有样本中具有相同值的特征。

  • 例:

    from sklearn.feature_selection import VarianceThreshold
    import pandas as pddata = pd.read_csv('data/垃圾邮件分类数据.csv')
    print(data.shape)# 低方差过滤法
    transform =VarianceThreshold(threshold=0.1)
    x =transform.fit_transform(data)
    print(x.shape)
    

    在这里插入图片描述

3 主成分分析

  • PCA(Principal Component Analysis)的作用是对数据的维数进行压缩;

    • 在尽可能降低原数据的维数(也就是复杂度)的同时,只损失少量信息;

    • 在这个过程中,可能会舍弃原有数据,并创造新的变量;

    • 下图也形象地展示了PCA的过程,将三维数据映射到二维空间,用1st PC和2nd PC来表示新的主成分

      在这里插入图片描述

  • API

    • sklearn.decomposition.PCA(n_components=None):这个类用于将数据分解到较低维数的空间;

      • 其中n_components参数很关键,如果是小数,表示保留百分之多少的信息;如果是整数,表示将特征减少到指定的数量;
    • mypcaobj.fit_transform(X):这是对数据进行拟合和转换的方法;

    • 返回值:是转换后指定维度的数组(array)。

  • 例:

    from sklearn.decomposition import PCA
    # 从 sklearn 的 datasets 模块中导入 load_iris 函数,用于加载鸢尾花数据集
    from sklearn.datasets import load_iris# PCA
    # 使用 load_iris 函数加载鸢尾花数据集,并通过 return_X_y=True 指定返回特征数据 x 和标签数据 y
    x,y=load_iris(return_X_y=True)
    print(x)# 创建一个 PCA 对象,n_components=0.95 表示希望保留 95% 的原始数据方差
    pca1=PCA(n_components=0.95)
    # 对特征数据 x 进行 PCA 降维处理,fit_transform 方法会先拟合数据,然后进行转换
    print(pca1.fit_transform(x))# 创建另一个 PCA 对象,n_components=3 表示将特征数据降到 3 维
    pca1=PCA(n_components=3)
    print(pca1.fit_transform(x))
    

4 PCA相关系数法

  • 相关系数基础概念

    • 作用:相关系数是反映特征列之间(变量之间)密切相关程度的统计指标;
    • 常见类型:常见的有皮尔逊相关系数和斯皮尔曼相关系数;
    • 取值范围与性质:相关系数的值介于-1与+1之间,即−1≤r≤+1-1\leq r\leq +11r+1
      • r>0r>0r>0时,表示两变量正相关;r<0r<0r<0时,两变量为负相关
      • ∣r∣=1|r| = 1r=1时,表示两变量为完全相关;当r=0r = 0r=0时,表示两变量间无相关关系
      • 0<∣r∣<10<|r|<10<r<1时,表示两变量存在一定程度的相关,且∣r∣|r|r越接近1,两变量间线性关系越密切;∣r∣|r|r越接近于0,表示两变量的线性相关越弱
    • 三级划分:一般可按三级划分相关性:∣r∣<0.4|r|<0.4r<0.4为低度相关;0.4≤∣r∣<0.70.4\leq|r|<0.70.4r<0.7为显著性相关;0.7≤∣r∣<10.7\leq|r|<10.7r<1为高度线性相关
  • 皮尔逊相关系数

    • 公式
      r=n∑xy−∑x∑yn∑x2−(∑x)2n∑y2−(∑y)2 r=\frac{n\sum xy-\sum x\sum y}{\sqrt{n\sum x^{2}-(\sum x)^{2}}\sqrt{n\sum y^{2}-(\sum y)^{2}}} r=nx2(x)2ny2(y)2nxyxy

    • 例子:已知广告投入xxx特征与月均销售额yyy之间的关系,通过给定的数据计算,得出皮尔逊相关系数为0.9942,属于高度相关;

      在这里插入图片描述

  • 斯皮尔曼相关系数

    • 公式
      RankIC=1−6∑di2n(n2−1) RankIC = 1-\frac{6\sum d_{i}^{2}}{n(n^{2}-1)} RankIC=1n(n21)6di2

      • 其中nnn为等级个数,ddd为成对变量的等级差数;
    • 例子:以身高(X)(X)(X)和睡眠时间(Y)(Y)(Y)为例,通过计算成对变量的等级差数的平方和等,可利用上述公式计算斯皮尔曼相关系数;

      在这里插入图片描述

  • 例:

    在这里插入图片描述

    • 皮尔逊相关系数结果:PearsonRResult(statistic=np.float64(-0.4284401043305397), pvalue=np.float64(4.513314267273042e-08))
      • statistic 是皮尔逊相关系数,值为 -0.4284,表明 x1x2 之间存在中等程度的负相关
      • pvalue 是相关系数的显著性水平,值为 4.5133e-08,远小于 0.05,说明这种负相关关系是显著的
    • 斯皮尔曼相关系数结果:SignificanceResult(statistic=np.float64(-0.30963508601557777), pvalue=np.float64(0.0001153938375056188))
      • statistic 是斯皮尔曼相关系数,值为 -0.3096,表明 x1x2 之间存在较弱的负相关
      • pvalue 是相关系数的显著性水平,值为 0.000115,小于 0.05,说明这种负相关关系也是显著的
http://www.dtcms.com/a/322457.html

相关文章:

  • Android MVP架构详解:从理论到实践
  • (第三篇)spring cloud之Zookeeper注册中心
  • 观远BI 工具驱动零售消费行业精益增长的实践路径
  • 从反射到方法句柄:深入探索Java动态编程的终极解决方案
  • 【3D图像技术分析与实现】如何进行基于3DGS的城市道路重建?
  • 疯狂星期四文案网第34天运营日记
  • 计算机网络:如何将/22的CIDR地址块划分为4个子网
  • CosyVoice 语音合成模型性能优化实战:从 CPU 瓶颈到 GPU 加速的完整解决方案
  • Nginx 性能优化与动态内容处理
  • LeetCode 面试经典 150_数组/字符串_分发糖果(15_135_C++_困难)(贪心算法)
  • 关于开发语言的一些效率 从堆栈角度理解一部分c java go python
  • nginx的安装
  • QML 鼠标穿透
  • 目标检测数据集 - 人脸佩戴检测数据集下载「包含VOC、COCO、YOLO三种格式」
  • 105-基于Flask的珍爱网相亲数据可视化分析系统
  • 深度学习图像分类数据集—七种虾病虫害分类
  • 制作 VSCode 插件
  • 2025华数杯B题一等奖方案:网络切片无线资源管理全解析(附Python/MATLAB代码)
  • 「iOS」————分类与扩展
  • Baumer高防护相机如何通过YoloV8深度学习模型实现火星陨石坑的检测识别(C#代码UI界面版)
  • rem:CSS中的相对长度单位
  • 从灵感枯竭到批量产出:无忧秘书创作平台如何重构内容生产者的工作流程?全环节赋能分析
  • Java基础-TCP通信单服务器接受多客户端
  • Pytorch模型复现笔记-FPN特征金字塔讲解+架构搭建(可直接copy运行)+冒烟测试
  • 强光干扰下误报率↓82%!陌讯多模态算法在睡岗检测的落地优化
  • 力扣 hot100 Day70
  • Linux高级编程-文件操作
  • 人类语义认知统一模型:融合脑科学与AI的突破
  • 工业场景反光衣识别准确率↑32%:陌讯多模态融合算法实战解析
  • Leetcode——556. 下一个更大元素 III