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

《机器学习》—— PCA降维

文章目录

  • 一、PCA降维简单介绍
  • 二、python中实现PCA降维函数的介绍
  • 三、代码实现
  • 四、PCA降维的优缺点

一、PCA降维简单介绍

  • PCA(主成分分析,Principal Component Analysis)是一种常用的数据降维技术。
  • 它通过线性变换将原始数据转换到新的坐标系统中,使得任何投影的第一大方差在第一个坐标(称为第一主成分)上,第二大方差在第二个坐标(第二主成分)上,依此类推。
  • PCA的主要目的是通过保留数据集中对方差贡献最大的特征来降低数据的维度,同时尽可能保留原始数据的信息。
  • PCA降维的步骤
    • 1、标准化数据
      由于PCA对数据的尺度非常敏感,因此在进行PCA之前,通常需要先将数据标准化(也称为归一化),即每个特征减去其均值并除以其标准差,使得每个特征的均值为0,方差为1。
    • 2、计算协方差矩阵
      协方差矩阵衡量的是数据集中各个特征之间的相关性。对于n维数据,其协方差矩阵是一个n×n的矩阵,其中每个元素C ij是第i个特征和第j个特征的协方差。
    • 3、计算协方差矩阵的特征值和特征向量
      特征值表示了每个主成分在数据集中的方差贡献率,而特征向量则定义了新的坐标轴的方向。
    • 4、选择主成分
      根据特征值的大小,选择前k个最大的特征值对应的特征向量。这些特征向量将构成新的特征空间,其中k是降维后的维度数。
    • 5、将原始数据投影到新的特征空间
      使用选定的特征向量作为基,将原始数据投影到新的特征空间,得到降维后的数据。

二、python中实现PCA降维函数的介绍

  • 在Python中,使用scikit-learn库来进行PCA分析,其中PCA是通过PCA类来实现的

  • PCA类有以下参数(默认值)

    PCA(n_components=None, copy=True, whiten=False, svd_solver=’auto’, tol=0.0, iterated_power=’auto’, random_state=None)
    
  • 重要参数的介绍:

  • n_components:这个参数可以帮我们指定希望PCA降维后的特征维度数目。

    • 如果为整数,表示要降维到的目标,比如十维的数据,指定n_components=5,表示将十维数据降维到五维;
    • 如果为小数,表示累计方差百分比。
  • copy : bool类型,True或者False,缺省时默认为True。 表示是否在运行算法时,将原始训练数据复制一份。

    • 若为True,则运行PCA算法后,原始训练数据的值不会有任何改变,因为是在原始数据的副本上进行运算;
    • 若为False,则运行PCA算法后,原始训练数据的值会改,因为是在原始数据上进行降维计算。
  • whiten:判断是否进行白化。

    • 所谓白化,就是对降维后的数据的每个特征进行归一化,让方差都为1对于PCA降维本身来说,一般不需要白化。如果你PCA降维后有后续的数据处理动作,可以考虑白化。默认值是False,即不进行白化。
  • svd_solver:即指定奇异值分解SVD的方法,由于特征分解是奇异值分解SVD的一个特例,一般的PCA库都是基于SVD实现的。有4个可以选择的值:{‘auto’, ‘full’, ‘arpack’, ‘randomized’}。

    • randomized一般适用于数据量大,数据维度多同时主成分数目比例又较低的PCA降维,它使用了一些加快SVD的随机算法。
    • full则是传统意义上的SVD,使用了scipy库对应的实现。
    • arpack和randomized的适用场景类似,区别是randomized使用的是scikit-learn自己的SVD实现,而arpack直接使用了scipy库的sparse SVD实现。
    • auto是默认值,即PCA类会自己去在前面讲到的三种算法里面去权衡,选择一个合适的SVD算法来降维。一般来说,使用默认值就够了。
  • 一些返回值属性

    • components_:一个形状为(n_components, n_features)的NumPy数组,包含了定义主成分的特征向量(即每个主成分是原始特征的哪个线性组合)。
    • explained_variance_:一个形状为(n_components,)的NumPy数组,包含了每个主成分解释的方差值。方差值越大,则说明越是重要的主成分。
    • explained_variance_ratio_:一个形状为(n_components,)的NumPy数组,包含了每个主成分解释的方差占总方差的比例。

三、代码实现

  • 数据集介绍

    • 此数据集是一份少量的(60+)鸢尾花数据,前四列为特征数据,最后一列为标签数据
    • 部分数据如下所示
      在这里插入图片描述
  • 此数据中有四个特征,代表的有4个维度,下面将通过PCA降维方法将其降维至2维,并将降维后的特征数据划分为新的数据集,传入到逻辑回归模型中进行训练与测试

  • 并将没有进行PCA降维处理的原数据也传入到回归模型中,得出结果,进行比较

  • 代码如下

    from sklearn.decomposition import PCA
    import pandas as pd# 读取数据
    data = pd.read_excel('hua.xlsx')# 数据划分
    x = data.iloc[:, :-1]  # 训练数据
    y = data.iloc[:, -1]  # 标签数据# 实例化PCA对象
    pca = PCA(n_components=2)
    pca.fit(x)print('特征所占百分比:{}'.format(sum(pca.explained_variance_ratio_)))
    print('每个主成分的方差值:{}'.format(pca.explained_variance_))new_x = pca.transform(x)
    print('PCA降维后数据:')
    print(new_x)# 切分降维后的数据集
    from sklearn.model_selection import train_test_splitx_train_pca, x_test_pca, y_train_pca, y_test_pca = \train_test_split(new_x, y, test_size=0.2, random_state=0)from sklearn.linear_model import LogisticRegression# 实例一个逻辑回归模型
    classifier_pca = LogisticRegression()
    classifier_pca.fit(x_train_pca, y_train_pca)  # 训练数据from sklearn import metrics# accuracy 值
    train_score_pca = classifier_pca.score(x_train_pca, y_train_pca)
    print("训练集数据测试的accuracy值为:{}".format(train_score_pca))
    # 训练集数据评估指标报告
    train_predict_pca = classifier_pca.predict(x_train_pca)
    print("训练集数据评估指标报告")
    print(metrics.classification_report(y_train_pca, train_predict_pca))test_score_pca = classifier_pca.score(x_test_pca, y_test_pca)
    print("测试集数据测试的accuracy值为:{}".format(test_score_pca))
    # 测试集数据评估指标报告
    test_predict_pca = classifier_pca.predict(x_test_pca)
    print("测试集数据评估指标报告")
    print(metrics.classification_report(y_test_pca, test_predict_pca))print("**************************************************************")# 切分原始数据集
    x_train, x_test, y_train, y_test = \train_test_split(x, y, test_size=0.2, random_state=0)classifier = LogisticRegression()
    classifier.fit(x_train, y_train)# accuracy 值
    train_score = classifier.score(x_train, y_train)
    print("训练集数据测试的accuracy值为:{}".format(train_score))
    # 训练集数据评估指标报告
    train_predict = classifier.predict(x_train)
    print("训练集数据评估指标报告")
    print(metrics.classification_report(y_train, train_predict))test_score = classifier.score(x_test, y_test)
    print("测试集数据测试的accuracy值为:{}".format(train_score))
    # 测试集数据评估指标报告
    test_predict = classifier.predict(x_test)
    print("测试集数据评估指标报告")
    print(metrics.classification_report(y_test, test_predict))
    
  • 结果如下
    在这里插入图片描述
    在这里插入图片描述

  • 由于此数据集的数据量太少,降维前后的模型训练结果基本差不多,在大的数据集中对比最终的结果可能会更加明显

四、PCA降维的优缺点

  • 优点:
    • 1.计算方法简单,容易实现。
    • 2.可以减少指标筛选的工作量。
    • 3.消除变量间的多重共线性。
    • 4.在一定程度上能减少噪声数据。
  • 缺点:
    • 1.特征必须是连续型变量(可以在一定范围内连续取值的变量)。
    • 2.无法解释降维后的数据是什么。
    • 3.有时候贡献率小的成分有可能更重要,但是会被降维的时候舍弃掉。

相关文章:

《机器学习》—— PCA降维

文章目录 一、PCA降维简单介绍二、python中实现PCA降维函数的介绍三、代码实现四、PCA降维的优缺点 一、PCA降维简单介绍 PCA(主成分分析,Principal Component Analysis)是一种常用的数据降维技术。它通过线性变换将原始数据转换到新的坐标系…...

植物三萜皂苷生物合成途径及调控机制研究进展-文献精读48

摘要 三萜皂苷(triterpenoids saponins)是由三萜皂苷元和一个或多个糖基和/或其他化学基团缩合而成的一系列结构多样的天然化合物[1], 主要分布在五加科、蝶形花科、石竹科、桔梗科、毛茛科、玄参科、葫芦科等植物中[2]. 植物中三萜皂苷常分布在特定的器官和组织, 如人参(Pana…...

server 2016搭建FTP服务

目录 一、实验环境 二、在server 2016上面安装FTP服务 三、在server 2016上面配置FTP服务 四、创建用户(也可创建用户组,给用户组赋予权限) 一、实验环境 windows server 2016用于安装ftp服务 windows 10作为客户端进行测试。 二、在s…...

物理学基础精解【4】

文章目录 运动和力质点运动机械运动的参考系运动的相对性运动学中坐标系 参考文献 运动和力 质点运动 一个物体相对于另一个物体的位置或一个物体的某些部分相对于其他部分的位置 ,随着时间而变化的过程,叫机械运动 。质点是一个物理学中的理想化模型&…...

【区块链 + 人才服务】Blockchain Workshop- 区块链编程实践平台 | FISCO BCOS应用案例

Blockchain Workshop v2.0(以下简称 BCW v2.0)是点宽网络科技有限公司升级的全新区块链实践教育平台产品。 BCW v2.0 区块链实践教育平台面向高校区块链专业人才培养,用于区块链专业技术学习和智能合约编程学习,平台基于 FISCO BC…...

Java面试篇基础部分-Java中常用的I/O模型

阻塞I/O模型 阻塞式的I/O模型是一种非常常见的I/O模型机制,在进行数据读写操作的时候,客户端会发生阻塞等待。 工作流程如图所示,该用户线程一直阻塞,等待内存中的数据就绪;内存中的数据就绪之后,内核态的数据将拷贝到用户线程中,并且返回I/O的执行结果到用户线程。这个…...

如何使用python运行Flask开发框架并实现无公网IP远程访问

文章目录 1. 安装部署Flask2. 安装Cpolar内网穿透3. 配置Flask的web界面公网访问地址4. 公网远程访问Flask的web界面 本篇文章主要讲解如何在本地安装Flask,以及如何将其web界面发布到公网进行远程访问。 Flask是目前十分流行的web框架,采用Python编程语…...

第三届828 B2B企业节开幕,大腾智能携手华为云共谱数字化新篇章

8月27日,由华为携手上万家伙伴共同发起的第三届828 B2B企业节在贵州正式开幕。 本届企业节推出上万款数智产品,600多个精选解决方案,旨在融通数智供需,加速企业智改数转,助推中国数智产业实力再升级。中共贵州省委副书…...

Linux网络编程IO管理

网络 IO 涉及到两个系统对象,一个是用户空间调用 IO 的进程或者线程,一个是内核空间的内核系统,比如发生 IO 操作 read 时,它会经历两个阶段: 等待内核协议栈的数据准备就绪;将内核中的数据拷贝到用户态的…...

SpringCloud集成ELK

1、添加依赖 <dependency><groupId>net.logstash.logback</groupId><artifactId>logstash-logback-encoder</artifactId><version>6.1</version> </dependency>2、在logback-spring.xml中添加配置信息&#xff08;logback-sp…...

【卷起来】VUE3.0教程-06-组件详解

各位看官&#xff0c;点波关注和赞吧 组件允许我们将 UI 划分为独立的、可重用的部分&#xff0c;并且可以对每个部分进行单独的思考。在实际应用中&#xff0c;组件常常被组织成层层嵌套的树状结构&#xff1a; 这和我们嵌套 HTML 元素的方式类似&#xff0c;Vue 实现了自己的…...

JS Web

Web API 元素通用属性 元素自身属性 事件处理...

【Linux】传输层协议——UDP

零、传输层的作用是负责数据能够从发送端传输到接收端 一、再来认识一下端口号 端口号&#xff08;Port&#xff09;标识了一个主机进行通信的不同的应用程序。在TCP/IP协议中&#xff0c;用“源IP”&#xff0c;“源端口号”&#xff0c;“目的IP”&#xff0c;“目的端口号”…...

算法学习攻略总结 : 入门至进阶,通关之路指南

❃博主首页 &#xff1a; <码到三十五> ☠博主专栏 &#xff1a; <mysql高手> <elasticsearch高手> <源码解读> <java核心> <面试攻关> ♝博主的话 &#xff1a; <搬的每块砖&#xff0c;皆为峰峦之基&#xff1b;公众号搜索(码到…...

《卷积神经网络 CNN 原理探秘》

CNN基本原理详解 卷积神经网络&#xff08;Convolutional Neural Network&#xff0c;简称CNN&#xff09;&#xff0c;是一种前馈神经网络&#xff0c;人工神经元可以响应周围单元&#xff0c;可以进行大型图像处理。卷积神经网络包括卷积层和池化层。 卷积神经网络是受…...

C#获取计算机信息

目录 效果 项目 代码 下载 效果 项目 代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Management; n…...

派遣函数 - 通过设备链接打开设备

利用文件IO相关的Wn32API对设备进行“打开”和“关闭”操作。要打开设备&#xff0c;必须通过设备的名字才能得到该设备的柄。前面介绍过&#xff0c;每个设备都有设备名称&#xff0c;如HelloDDK驱动程序的设备名为“Device\\MyDDKDevice”&#xff0c;但是设备名无法被用户模…...

Vue 2 中的 `$set` 方法详解

在 Vue 2 中&#xff0c;响应式数据的更新非常重要&#xff0c;因为它确保了当数据改变时&#xff0c;视图能够自动更新。Vue 使用一套高效的机制来追踪依赖并在数据变化时更新视图。然而&#xff0c;在某些情况下&#xff0c;直接修改对象的属性可能不会触发视图更新。这时&am…...

掌握Hive函数[2]:从基础到高级应用

目录 高级聚合函数 多进一出 1. 普通聚合 count/sum... 2. collect_list 收集并形成list集合&#xff0c;结果不去重 3. collect_set 收集并形成set集合&#xff0c;结果去重 案例演示 1. 每个月的入职人数以及姓名 炸裂函数 概述 案例演示 1. 数据准备 1&#xff09;表…...

水壶问题记录

https://leetcode.cn/problems/water-and-jug-problem/description/?envTypestudy-plan-v2&envId2024-spring-sprint-100...

PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建

制造业采购供应链管理是企业运营的核心环节&#xff0c;供应链协同管理在供应链上下游企业之间建立紧密的合作关系&#xff0c;通过信息共享、资源整合、业务协同等方式&#xff0c;实现供应链的全面管理和优化&#xff0c;提高供应链的效率和透明度&#xff0c;降低供应链的成…...

CMake基础:构建流程详解

目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...

高频面试之3Zookeeper

高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个&#xff1f;3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制&#xff08;过半机制&#xff0…...

在Ubuntu中设置开机自动运行(sudo)指令的指南

在Ubuntu系统中&#xff0c;有时需要在系统启动时自动执行某些命令&#xff0c;特别是需要 sudo权限的指令。为了实现这一功能&#xff0c;可以使用多种方法&#xff0c;包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法&#xff0c;并提供…...

大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计

随着大语言模型&#xff08;LLM&#xff09;参数规模的增长&#xff0c;推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长&#xff0c;而KV缓存的内存消耗可能高达数十GB&#xff08;例如Llama2-7B处理100K token时需50GB内存&a…...

Python Ovito统计金刚石结构数量

大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...

手机平板能效生态设计指令EU 2023/1670标准解读

手机平板能效生态设计指令EU 2023/1670标准解读 以下是针对欧盟《手机和平板电脑生态设计法规》(EU) 2023/1670 的核心解读&#xff0c;综合法规核心要求、最新修正及企业合规要点&#xff1a; 一、法规背景与目标 生效与强制时间 发布于2023年8月31日&#xff08;OJ公报&…...

LCTF液晶可调谐滤波器在多光谱相机捕捉无人机目标检测中的作用

中达瑞和自2005年成立以来&#xff0c;一直在光谱成像领域深度钻研和发展&#xff0c;始终致力于研发高性能、高可靠性的光谱成像相机&#xff0c;为科研院校提供更优的产品和服务。在《低空背景下无人机目标的光谱特征研究及目标检测应用》这篇论文中提到中达瑞和 LCTF 作为多…...

消息队列系统设计与实践全解析

文章目录 &#x1f680; 消息队列系统设计与实践全解析&#x1f50d; 一、消息队列选型1.1 业务场景匹配矩阵1.2 吞吐量/延迟/可靠性权衡&#x1f4a1; 权衡决策框架 1.3 运维复杂度评估&#x1f527; 运维成本降低策略 &#x1f3d7;️ 二、典型架构设计2.1 分布式事务最终一致…...

ubuntu22.04 安装docker 和docker-compose

首先你要确保没有docker环境或者使用命令删掉docker sudo apt-get remove docker docker-engine docker.io containerd runc安装docker 更新软件环境 sudo apt update sudo apt upgrade下载docker依赖和GPG 密钥 # 依赖 apt-get install ca-certificates curl gnupg lsb-rel…...