机器学习4-PCA降维

1 降维

在数据处理过程中,会碰到维度爆炸,维度灾难的情况,为了得到更精简更有价值的信息,我们需要进一步处理,用的方法就是降维。

降维有两种方式:特征抽取、特征选择

  • 特征抽取:就是特征映射,它的思想是把高纬空间的数据映射到低维空间,比如PCA降维、基于神经网络的降维
  • 特征选择:
    • 过滤式(打分机制):过滤,指的是通过某个阈值进行过滤,比如经常会看到但可能并不会去用的,根据方差、信息增益、互信息、相关系数、卡方检验、F检验来选择特征。

      (什么是互信息?在某个特定类别出现频率高,但其他类别出现频率比较低的词条与该类的互信息比较大。通常互信息作为特征词和类别之间的测度,如果特征词属于该类的话,他们的互信息就大)

      image.png

    • 包裹式:每次迭代产生一个特征子集,评分

    • 嵌入式:先通过机器学习模型训练来对每个特征得到一个权重值,接下来和过滤式相似,通过设定某个阈值来筛选特征。区别在于,嵌入式采用机器学习训练,过滤式采用统计特征

    • 过滤式方法运用统计指标来为每个特征打分并筛选特征,其聚焦于数据本身的特点。其优点是计算快,不依赖与具体的模型,缺点是选择的统计指标不是为特定模型定制的,因而最后的准确率可能不高,而且因为进行的是单变量统计检验,没有考虑特征间的相互关系

    • 包裹式方法使用模型来筛选特征,通过不断地增加或删除特征,在验证集上测试模型准确率,寻找最优的特征子集。包裹式方法因为有模型的直接参与,因而通常准确性较高,但是因为每变动一个特征都要重新训练模型,因而计算开销大,其另一个缺点是容易过拟合

    • 嵌入式方法利用了模型本身的特性,将特征选择嵌入到模型的构建过程中。典型的如Lasso和决策树模型等。准确率较高,计算复杂度介于过滤式和包裹式方法之间,但缺点是只有部分模型有这个功能

Principal Components Analysis 主成分分析在压缩消除冗余和数据噪音消除等有广泛应用

2 特征值和特征向量

A ξ = λ ξ A\xi=\lambda\xi Aξ=λξ

首先要理解矩阵线性变换,即矩阵乘法:矩阵乘法对应了一个变换,是把任意一个向量变成另一个方向或长度都大多不同的新向量。在变换过程中,原向量主要发生旋转、伸缩变化。如果矩阵对某一向量或某些向量只发生伸缩变换,不对这些向量产生旋转效果,那么这些向量就称为这个矩阵的特征向量,伸缩的比例就是特征值

在数据挖掘中,就会直接用特征值来描述对应特征向量方向上包含的信息量,而某一特征值除以所有特征值的和得到的值:该特征向量的方差贡献率。(在该维度下蕴含的信息的比例)

经过特征向量变换下的数据称为变量的主成分,当前m各主成分累计的方差贡献率达到85%以上就保留这m个的主成分数据,实现对数据进行降维的目的。

3 PCA的目标

PCA的目标是实现最小投影距离,最大投影方差。降维后不同维度的相关性为0。(也就是向量之间正交)

image.png

显然数据离散性最大,代表数据在所投影的维度有越高的区分度,这个区分度就是信息量。

应该考虑新的坐标轴,将坐标轴进行旋转就能正确降维,这个旋转的操作就要用到线性变换—奇异值分解

image.png

通过矩阵A对坐标系X进行旋转,经过一些数学推导,其实就可以得知,特征值对应的特征向量就是理想中想取得的正确坐标轴,而特征值就等于数据在旋转后的坐标上对应维度的方差(沿对应的特征向量的数据的方差)。而A其实即为我们想求得的那个降维特征空间,Y则使我们想要的降维后的数据。

4 PCA过程

4.1 中心化

采用了中心化,均值为0,如果不进行中心化,可能第一主成分的方向有误

image.png

这里可以看出主成分分析的目的是最小化投影距离,最大化投影方差。如果不中心化就达不到上述目的。

image.png

4.2 标准化数据

为什么要标准化,因为等下要算特征值和特征向量,特征值对应的特征向量就是理想中想取得的正确坐标轴,而特征值就等于数据在变换后的坐标上对应维度的方差(沿对应的特征向量的数据的方差)。

考虑这样一个例子,一个特征表示对象的长度(米为单位),而第二个特征表示对象的宽度(厘米为单位)。如果数据没有被标准化,那么最大方差及最大特征向量将隐式地由第一个特征定义。

4.3 算协方差矩阵

为什么要算协方差矩阵?我们之前的目的是在降维后的每一维度上,方差最大。而方差最大,则容易想到的就是协方差矩阵,去中心化后,协方差矩阵的对角线上的值正好就是各个数据维度的方差。原始数据的协方差矩阵X【n * n】,对应的就是降维后的数据的方差。而我们的目的,这是使方差最大,这就又想到另一个概念,迹(trace),因为迹是对角线上所有元素之和,则协方差矩阵的迹,就是方差之和,这样我们就可以构建损失函数,即argmax(协方差矩阵X的迹)

4.4 过程

  1. 首先设新的坐标系为W【n×n】

[ w 1 , w 2 , w 3 , . . . , w n ] [w_1,w_2,w_3, ...,w_n] [w1,w2,w3,...,wn]

	显然w为标准正交基

∣ ∣ w ∣ ∣ 2 = 1 , w i T w j = 0 ||w||_2 =1, w_i^Tw_j=0 ∣∣w2=1,wiTwj=0

  1. 在新的坐标系的投影为

    Z = W T X Z=W^TX Z=WTX

    其中Z为{z1,z2,z3,…,zn}

  2. 向量Xi在w上的投影坐标可以表示为

    ( x i , w ) = x i T w (x_i,w)=x_i^Tw (xi,w)=xiTw

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/982126.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

辛格迪客户案例 | 深圳善康医药科技GMP培训管理(TMS)项目

01 善康医药:创新药领域的探索者 深圳善康医药科技股份有限公司自2017年创立以来,便扎根于创新药研发领域,专注于成瘾治疗药物的研究、生产与销售。公司坐落于深圳,凭借自身独特的技术优势与研发实力,在行业内逐渐崭露…

前端基础之组件

组件&#xff1a;实现应用中局部功能代码和资源的集合 非单文件组件 <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name"viewport" content"widthdevice-width, initial-scale1.0"…

vue 安装依赖npm install过程中报错npm ERR! cb() never called!

解决办法&#xff1a; 步骤 1&#xff1a;清理 npm 缓存 npm cache clean --force rm -rf node_modules package-lock.json 步骤 2&#xff1a;一个第三方 npm 工具包&#xff0c;功能是 自动重试失败的 npm install 操作&#xff0c;适用于网络不稳定或依赖源不可靠的场景 …

【Oracle学习笔记】1.数据库组成对象

在Oracle数据库中&#xff0c;数据库对象是用于存储、管理和操作数据的基本构建块。以下是Oracle数据库中常见的对象类型及其简要说明&#xff1a; 1. 表&#xff08;Table&#xff09; ● 定义&#xff1a;表是存储数据的基本结构&#xff0c;由行&#xff08;记录&#xff0…

【Python · Pytorch】Conda介绍 DGL-cuda安装

本文仅涉及DGL库介绍与cuda配置&#xff0c;不包含神经网络及其训练测试。 起因&#xff1a;博主电脑安装了 CUDA 12.4 版本&#xff0c;但DGL疑似没有版本支持该CUDA版本。随即想到可利用Conda创建CUDA12.1版本的虚拟环境。 1. Conda环境 1.1 Conda环境简介 Conda&#xff1…

OpenMCU(一):STM32F407 FreeRTOS移植

概述 本文主要描述了STM32F407移植FreeRTOS的简要步骤。移植描述过程中&#xff0c;忽略了Keil软件的部分使用技巧。默认读者熟练使用Keil软件。本文的描述是基于OpenMCU_FreeRTOS这个工程&#xff0c;该工程已经下载放好了移植stm32f407 FreeRTOS的所有文件 OpenMCU_FreeRTOS工…

服务流程设计和服务或端口重定向及其websocket等应用示例

服务流程设计和服务或端口重定向及其websocket等应用示例 目录 服务或端口重定向的服务设计和websocket等应用示例 一、通用请求控制流程 1.1、入口 1.2、所有GET请求首先预检控制单元 1.3、http请求会分别自动307重定向 1.4、所有请求首先执行跨源控制单元 1.5、然后…

初次使用 IDE 搭配 Lombok 注解的配置

前言 在 Java 开发的漫漫征程中&#xff0c;我们总会遇到各种提升效率的工具。Lombok 便是其中一款能让代码编写变得更加简洁高效的神奇库。它通过注解的方式&#xff0c;巧妙地在编译阶段为我们生成那些繁琐的样板代码&#xff0c;比如 getter、setter、构造函数等。然而&…

基于javaweb的SSM+Maven高考志愿智能资讯系统设计和实现(源码+文档+部署讲解)

技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论…

从vue源码解析Vue.set()和this.$set()

前言 最近死磕了一段时间vue源码&#xff0c;想想觉得还是要输出点东西&#xff0c;我们先来从Vue提供的Vue.set()和this.$set()这两个api看看它内部是怎么实现的。 Vue.set()和this.$set()应用的场景 平时做项目的时候难免不会对 数组或者对象 进行这样的骚操作操作&#xff…

06 HarmonyOS Next性能优化之LazyForEach 列表渲染基础与实现详解 (一)

温馨提示&#xff1a;本篇博客的详细代码已发布到 git : https://gitcode.com/nutpi/HarmonyosNext 可以下载运行哦&#xff01; 目录 一、代码结构概览二、详细代码解析1. 数据源管理实现2. 数据结构定义3. 优化的列表项组件4. 主列表组件实现 一、代码结构概览 本文将详细解…

计算机网络:Socket网络编程 Udp与Tcp协议 第一弹

目录 1.IP地址和端口号 1.1 如何通信 1.2 端口号详解 1.3 理解套接字socket 2. 网络字节序 3. socket接口 3.1 socket类型设计 3.2 socket函数 3.3 bind函数 4. UDP通信协议 4.1 UDP服务端类 4.2 Udp服务类InitServer函数 4.3 Udp服务类Start函数 4.4 Udp服务主函…

C语言_图书管理系统_借阅系统管理

✨✨ 欢迎大家来到小伞的大讲堂✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;数据结构与算法 小伞的主页&#xff1a;xiaosan_blog 本文所需对顺序表的理解&#xff1a; 注&#xff1a;由于顺序表实现图书…

玩转大语言模型——Ubuntu系统环境下使用llama.cpp进行CPU与GPU混合推理deepseek

系列文章目录 玩转大语言模型——使用langchain和Ollama本地部署大语言模型 玩转大语言模型——三分钟教你用langchain提示词工程获得猫娘女友 玩转大语言模型——ollama导入huggingface下载的模型 玩转大语言模型——langchain调用ollama视觉多模态语言模型 玩转大语言模型—…

Redis——快速入门

目录 Redis简介 安装配置(Windows) GUI工具RedisInsight的使用 十大数据类型&#xff08;5基本5高级&#xff09; 字符串String 列表List 集合Set(S) 有序集合SortedSet(Z) 哈希Hash(H) 发布订阅模式 消息队列Stream(X) 地理空间Geospatial(GEO) HyperLogLog(PF) …

学习笔记:IC存储总结(ROM,RAM, EEPROM, Flash, SRAM, DRAM, DDL)

一&#xff0c;概述 半导体存储器是一种可以存储大量二值信息的半导体器件。在电子计算机及一些其他的数字系统的工作过程中&#xff0c;需要对大量的数据进行储存。由于数据处理的数据量和运算速度的要求&#xff0c;因此把存储量和存取速度作为衡量存储器的重要指标。 在电子…

【Python · PyTorch】循环神经网络 RNN(基础应用)

【Python PyTorch】循环神经网络 RNN&#xff08;简单应用&#xff09; 1. 简介2. 模拟客流预测&#xff08;数据集转化Tensor&#xff09;3.1 数据集介绍3.2 训练过程 3. 模拟股票预测&#xff08;DataLoader加载数据集&#xff09;3.1 IBM 数据集3.1.2 数据集介绍3.1.3 训练…

实现浏览器交互Ai Web Ui-本地化部署的deepseek + Ollama + Page Assist

一、deepseek本地化部署 上篇写了deepseek本地化部署的小白教程。 deepseek 本地化部署&#xff08;小白也可部署&#xff09; 但有个问题&#xff0c;Ollama只能在命令行进行交互&#xff0c;体验相当差。 二、Page Assist安装 本篇给大家介绍个好用的chrome浏览器AI Web …

我们来学nginx -- 优化下游响应速度

优化下游响应速度 题记启用 Gzip 压缩优化缓冲区设置设置超时时间 题记 专家给出的配置文件真是…&#xff0c;信息量有点大啊&#xff01; nginx&#xff1a;我只想作为一个简单的代理专家爸爸&#xff1a;都是为了你好&#xff01; 这样&#xff0c;先从有关响应速度的角度&…

Cargo, the Rust package manager, is not installed or is not on PATH.

今天在Windows操作系统上通过pip 安装jupyter的时候遇到这个报错&#xff0c;Cargo, the Rust package manager, is not installed or is not on PATH.。 解决办法 官网&#xff1a;https://rustup.rs/# 下载&#xff1a;https://win.rustup.rs/x86_64 安装完成之后&#xff0c…