python实现PCA降维

2023-11-06

概述

本文主要介绍一种降维方法,PCA(Principal Component Analysis,主成分分析)。降维致力于解决三类问题。
1. 降维可以缓解维度灾难问题;
2. 降维可以在压缩数据的同时让信息损失最小化;
3. 理解几百个维度的数据结构很困难,两三个维度的数据通过可视化更容易理解。

PCA简介

在理解特征提取与处理时,涉及高维特征向量的问题往往容易陷入维度灾难。随着数据集维度的增加,算法学习需要的样本数量呈指数级增加。有些应用中,遇到这样的大数据是非常不利的,而且从大数据集中学习需要更多的内存和处理能力。另外,随着维度的增加,数据的稀疏性会越来越高。在高维向量空间中探索同样的数据集比在同样稀疏的数据集中探索更加困难。
主成分分析也称为卡尔胡宁-勒夫变换(Karhunen-Loeve Transform),是一种用于探索高维数据结构的技术。PCA通常用于高维数据集的探索与可视化。还可以用于数据压缩,数据预处理等。PCA可以把可能具有相关性的高维变量合成线性无关的低维变量,称为主成分( principal components)。新的低维数据集会尽可能的保留原始数据的变量。
PCA将数据投射到一个低维子空间实现降维。例如,二维数据集降维就是把点投射成一条线,数据集的每个样本都可以用一个值表示,不需要两个值。三维数据集可以降成二维,就是把变量映射成一个平面。一般情况下,nn维数据集可以通过映射降成kk维子空间,其中k≤nk≤n。
假如你是一本养花工具宣传册的摄影师,你正在拍摄一个水壶。水壶是三维的,但是照片是二维的,为了更全面的把水壶展示给客户,你需要从不同角度拍几张图片。下图是你从四个方向拍的照片:
wateringcan.png
第一张图里水壶的背面可以看到,但是看不到前面。第二张图是拍前面,可以看到壶嘴,这张图可以提供了第一张图缺失的信息,但是壶把看不到了。从第三张俯视图里无法看出壶的高度。第四张图是你真正想要的,水壶的高度,顶部,壶嘴和壶把都清晰可见。
PCA的设计理念与此类似,它可以将高维数据集映射到低维空间的同时,尽可能的保留更多变量。PCA旋转数据集与其主成分对齐,将最多的变量保留到第一主成分中。假设我们有下图所示的数据集:
dataset.png
数据集看起来像一个从原点到右上角延伸的细长扁平的椭圆。要降低整个数据集的维度,我们必须把点映射成一条线。下图中的两条线都是数据集可以映射的,映射到哪条线样本变化最大?
datasetline.png
显然,样本映射到黑色虚线的变化比映射到红色点线的变化要大的多。实际上,这条黑色虚线就是第一主成分。第二主成分必须与第一主成分正交,也就是说第二主成分必须是在统计学上独立的,会出现在与第一主成分垂直的方向,如下图所示:
orthogonal.png
后面的每个主成分也会尽量多的保留剩下的变量,唯一的要求就是每一个主成分需要和前面的主成分正交。
现在假设数据集是三维的,散点图看起来像是沿着一个轴旋转的圆盘。
threedimensional.png
这些点可以通过旋转和变换使圆盘完全变成二维的。现在这些点看着像一个椭圆,第三维上基本没有变量,可以被忽略。
当数据集不同维度上的方差分布不均匀的时候,PCA最有用。(如果是一个球壳形数据集,PCA不能有效的发挥作用,因为各个方向上的方差都相等;没有丢失大量的信息维度一个都不能忽略)。

python实现PCA降维代码

# coding=utf-8
from sklearn.decomposition import PCA  
from pandas.core.frame import DataFrame
import pandas as pd  
import numpy as np  
l=[]
with open('test.csv','r') as fd:
  
    line= fd.readline()
    while line:
        if line =="":
            continue
  
        line = line.strip()
        word = line.split(",")
        l.append(word)
        line= fd.readline()

data_l=DataFrame(l)
print (data_l)
dataMat = np.array(data_l)  


pca_sk = PCA(n_components=2)  
newMat = pca_sk.fit_transform(dataMat)  
 

data1 = DataFrame(newMat)
data1.to_csv('test_PCA.csv',index=False,header=False)


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python实现PCA降维 的相关文章

随机推荐

  • 字符串7:重复的子字符串

    主要是我自己刷题的一些记录过程 如果有错可以指出哦 大家一起进步 转载代码随想录 原文链接 代码随想录 leetcode链接 459 重复的子字符串 题目 给定一个非空的字符串 s 检查是否可以通过由它的一个子串重复多次构成 示例 示例 1
  • ug12.0安装教程以及UG12许可证安装

    ug12 0安装教程以及UG12许可证安装 附中文版百度云下载地址 知乎 zhihu com 参考该文章 切记 如果忘了修改 安装完成后 计算机右键 属性 高级 环境变量 系统变量中找到SPLM LICENSE 编辑 将值改为27800
  • MMEditing 介绍——注册器

    目录 什么是注册器 注册器工作原理 为什么要用注册器 MMEditing 中的注册器 注册器带来的不便如何解决 什么是注册器 python 的 register 可以理解为一个字典 字典中存储了 class function 的名称和内容
  • UE4之接口

    参考 https docs unrealengine com zh CN Programming UnrealArchitecture Reference Interfaces index html 接口的模式比较固定 下面就上我定义的接口
  • Tomcat中常见线程说明

    本文讲述了Tomcat的常见线程的功能 名称 线程池和配置等信息 其中源码来自于Tomcat 6 0 18 Work线程 功能 HTTP请求的处理线程 非NIO 当有新的http请求进来后 则会从线程池中获得一个线程Work对象 调用Wor
  • 什么是webhook?

    1 什么是webhook webhooks是一个api概念 是微服务api的使用范式之一 也被成为反向api 即 前端不主动发送请求 完全由后端推送 举个常用例子 比如你的好友发了一条朋友圈 后端将这条消息推送给所有其他好友的客户端 就是
  • 国内VS Code下载速度慢

    在知乎上面看到一个非常有效的方法 原链接 国内下载vscode速度慢问题解决 知乎 具体方法如下 1 直接百度搜索VS CODE 点击下载后获取下载链接 2 取出链接 并替换原链接中域名为vscode cdn azure cn 将新链接粘贴
  • 学习Spring

    1 如何学习Spring 你可以通过下列途径学习spring 1 spring下载包中doc目录下的MVC step by step和sample目录下的例子都是比较好的spring开发的例子 2 AppFuse集成了目前最流行的几个开源轻
  • STM32命名规则

    STM32型号命名规则如下 STM32型号的说明 以STM32F103ZET6这个型号的芯片为例 该型号的组成为7个部分 其命名规则如下 1 STM32 STM32代表ARM Cortex M3内核的32位微控制器 2 F F代表芯片子系列
  • Java 基础语法

    使用ide来进行编程 对于java来说 最好的idle 是intellijidea IDEA 通过一个例子练习 idea 一 超市管理系统功能 使用ide来进行编程 java最好的ide 是idea 1 import java util A
  • python--字典概念以及基本使用 -- 小黑学习驿站

    字典应用案例 697条消息 python 商店购物案例 字典篇 小黑学习驿站 小黑日志的博客 CSDN博客 697条消息 python学习 计算学生成绩排名案例 字典篇2 小黑学习驿站 小黑日志的博客 CSDN博客 字典基本概念 映射关系
  • 关于渠道包

    渠道包指的是在各大应用市场 发布的apk包的清单文件中 某个meta data标签下 配置的value不一样 这个标签的作用就是用来区分是哪个市场的 比如你发布到360 这个值就是你就可以配置成360 豌豆荚就可以配置成wandoujia
  • 微信小程序云开发之——网页跳转小程序

    一 微信小程序开通云开发 微信小程序公众平台拿到如下参数 你的小程序信息 小程序 AppID 填入你的小程序 AppID 云开发环境 ID 填入你的开通了静态网站托管的云开发环境 ID 想要拉取的小程序信息 小程序原始账号 ID 填入要跳转
  • 微信小程序授权登录详解

    文章目录 流程 wx login auth code2Session 实战 前端代码 后端代码 流程 说明 调用 wx login 获取 临时登录凭证code 并回传到开发者服务器 调用 auth code2Session 接口 换取 用户
  • 撮合前端平台在低代码平台的落地实践

    在京东技术的发展当下 不同的业务线 不同的区域 甚至于很多触达消费者的端 正在被中台架构能力所支撑 大家都很清楚 中台建设能够带来技术的规模化效应 具有提高业务协同 加速创新和交付速度 提高系统稳定性和可靠性 降低成本和支持业务快速发展等优
  • torch.device函数

    torch device 是 PyTorch 中用于表示计算设备 如CPU或GPU 的类 它允许你在代码中指定你希望在哪个设备上执行张量和模型操作 本文主要介绍了 torch device 函数的用法和功能 本文主要包含以下内容 1 创建设
  • 怎么把一个json文件读取到java中

    要把一个 JSON 文件读取到 Java 中 可以按照以下步骤进行 导入 JSON 库 Java 中常用的 JSON 库有 Jackson Gson Fastjson 等 可以根据个人喜好和项目需求选择相应的库 并导入到项目中 读取 JSO
  • # SSM框架-->Spring

    SSM框架 gt Spring 文章目录 SSM框架 gt Spring 1 1 Spring是什么 简介 1 2 Spring 的发展 1 2 1Spring Framework的特点 1 2 2 Spring的体系结构 1 2 2 1
  • Java深究1

    此篇文章仅代表作者个人所学所悟 并不构成指导指引作用 在这篇博客之前 已经读过相当数量的Java书籍 但一直都没有去总结 如今将自己所学所悟分享出来 Java特种兵 上册 这本书的毕竟是作者的处女座 书中有太多地方感觉很肤浅 也很冗余 内容
  • python实现PCA降维

    概述 本文主要介绍一种降维方法 PCA Principal Component Analysis 主成分分析 降维致力于解决三类问题 1 降维可以缓解维度灾难问题 2 降维可以在压缩数据的同时让信息损失最小化 3 理解几百个维度的数据结构很