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

机器学习 | 降维问题

目录

一、主成分分析

二、奇异值分解

2.1 奇异值分解原理

2.2 奇异值分解实践

三、特征值与特征向量


一、主成分分析

主成分有如下特征:

  • 每个主成分是原变量的线性组合;
  • 各个主成分之间互不相关;
  • 主成分按照方差贡献率从大到小依次排列;
  • 所有主成分的方差贡献率求和为1;
  • 提取后的主成分通常小于原始数据变量的数量;
  • 提取后的主成分尽可能地保留了原始变量中的大部分信息。

我们仍以经典的鸢尾花数据集对主成分分析进行介绍。

通过导入PCA进行主成分分析。

#导入库
import numpy as np
import pandas as pd
from sklearn.decomposition import PCA
from sklearn.datasets import load_iris#导入数据
data=load_iris()#主成分分析
model=PCA()
model.fit(data.data)#显示主成分信息
pd.DataFrame(model.transform(data.data),columns=["PC{}".format(x+1) for x in range(data.data.shape[1])])

 

上述结果给出了鸢尾花数据集的4个(全部)主成分,然而选择几个主成分需要进一步判断。这里可以通过计算主成分的累计贡献率进行判断,代码如下:

import matplotlib.ticker as ticker
import matplotlib.pyplot as plt
plt.gca().get_xaxis().set_major_locator(ticker.MaxNLocator(integer=True))
plt.plot([0]+list(np.cumsum(model.explained_variance_ratio_)),"-")
plt.xlabel("Number of principal componets")
plt.ylabel("Cumulative contribution rate")
plt.show()

 从上图可以看出,主成分从0~1时非常陡峭,而从1往后区域平缓,因此,针对4维鸢尾花数据,我们只需要保留1个主成分,即将原4维数据降维到现在的1维。

利用下面的代码,我们可以用更加量化的方式查看主成分累积贡献率。

model.explained_variance_ratio_

 结果显示,1个主成分就已经达到了92.46%,保留了原数据中绝大部分信息。

综上,主成分分析的全部代码如下:

#导入库
import numpy as np
import pandas as pd
from sklearn.decomposition import PCA
from sklearn.datasets import load_iris#导入数据
data=load_iris()#主成分分析
model=PCA()
model.fit(data.data)#显示主成分信息
pd.DataFrame(model.transform(data.data),columns=["PC{}".format(x+1) for x in range(data.data.shape[1])])#绘制主成分的累积贡献率的折线图
import matplotlib.ticker as ticker
import matplotlib.pyplot as plt
plt.gca().get_xaxis().set_major_locator(ticker.MaxNLocator(integer=True))
plt.plot([0]+list(np.cumsum(model.explained_variance_ratio_)),"-")
plt.xlabel("Number of principal componets")
plt.ylabel("Cumulative contribution rate")
plt.show()#量化主成分的累计贡献率
model.explained_variance_ratio_

二、奇异值分解

2.1 奇异值分解原理

奇异值分解(SVD)将一个任意矩阵进行分解,无须考虑特征值分解时需要矩阵是方阵的前提。

假设矩阵M是一个m\times n阶矩阵,则可以将其分解为下面的三个矩阵相乘:M=U\varepsilon V^{T}

其中:

  • U是m\times n阶正交矩阵,UU^{T}=II为单位矩阵;
  • V^{T}n\times n阶正交矩阵,VV^{T}=I
  • \varepsilonm \times m阶非负实数对角矩阵,\varepsilon =diag(\sigma _{1},\sigma _{2},...,\sigma _{n}),\sigma _{1}\geq \sigma _{2}\geq ...\geq \sigma _{n}

这种将矩阵M分解的方法就被称为奇异值分解,\varepsilon矩阵上对角线上的元素即为M的奇异值。

考虑一个m> n的任意矩阵,此时\varepsilon的秩为n,矩阵中不同深度的灰色表示奇异值大小不同,对角线上的奇异值(假设存在n个非零的奇异值)依次从大到小进行排列。在这种情况下,矩阵U的最后m-n列失去了意义。

因此可以做进一步的变化,此时m \times m阶的矩阵U变为m \times n阶的矩阵U_{1}m \times n阶的矩阵\varepsilon变为n \times n阶的矩阵\varepsilon_{1}

当我们取k<n,比如k=2时,即认为前两个奇异值占总奇异值之和的比例非常大,因此可以如下图进行运算,尽管此时M_{2}\neq M,但是由于删除的奇异值占比很小,我们可以认为M_{2}\approx M

2.2 奇异值分解实践

利用python可以很方便实现对矩阵的奇异值分解,例如对4 \times 5阶的矩阵M进行奇异值分解:

M=\begin{bmatrix} 1 & 0 & 0 & 0 & 2\\ 0& 0 & 3 &0 &0 \\ 0& 0 & 0 &0 &0 \\ 0&4 &0 &0 &0 \end{bmatrix}

 代码如下:

import numpy as np
M=np.array([[1,0,0,0,2],[0,0,3,0,0],[0,0,0,0,0],[0,4,0,0,0]])
U,Sigma,VT=np.linalg.svd(M)
print("U:",U)
print("Sigma:",Sigma)
print("VT:",VT)

 导入一张图片,下面的代码给出了地秩近似序列使用奇异值分解逼近的图片。

import numpy as np
import matplotlib.pyplot as plt
from PIL import Imager_max=300  #设置最大的秩
Pic="C:\\Users\\LEGION\\Pictures\\Saved Pictures\\暨大logo.png"image=Image.open(Pic).convert("L")
img_mat=np.asarray(image)U,s,V=np.linalg.svd(img_mat,full_matrices=True)
s=np.diag(s)for k in range(r_max+1):approx=U[:,:k] @ s[0:k,:k] @ V[:k,:]img=plt.imshow(approx,cmap='gray')plt.title("SVD approximation with degree of %d"%(k))plt.plot()plt.pause(0.001)plt.clf()

三、特征值与特征向量

利用python与Numpy库,很容易得到一个矩阵的特征值和特征向量。

import numpy as np
A=np.array([[1,2],[3,4]])
a,b=np.linalg.eig(A)
print("A的特征值为:\n",a)
print('A的特征向量为:\n',b)

 

通过np.lianlg.eig()函数得到的特征向量是已经标准化的向量, 即长度为1.改函数给出的特征值未按大小顺序排序。

除了特征值和特征向量外,协方差矩阵与相关系数矩阵也是降维分析中的重要概念。以鸢尾花的4个特征向量为例,协方差矩阵的每个元素是各个向量元素之间的协方差,相关系数矩阵的各元素是由各特征间的相关系数构成的。

import numpy as np
from sklearn.datasets import load_iris#导入数
data=load_iris()
X=data.dataCov_X=np.cov(X.T)  #求解协方差矩阵
Cor_X=np.corrcoef(X.T)  #求解相关系数矩阵print("协方差矩阵:\n",Cov_X)
print("相关系数矩阵:\n",Cor_X)

利用协方差矩阵和相关系数矩阵可以求解主成分。这里以利用协方差矩阵为例进行说明。

沿用上面的协方差矩阵数据,可以求得其特征值和特征向量:

import numpy as np
from sklearn.datasets import load_iris#导入数
data=load_iris()
X=data.dataCov_X=np.cov(X.T)  #求解协方差矩阵a,b=np.linalg.eig(Cov_X)
print("协方差矩阵的特征值为:\n",a)
print('协方差矩阵的特征向量为:\n',b)

协方差矩阵的特征值即为主成分的方差贡献率:

4.2282/(4.2282+0.2427+0.0782+0.0238)=0.9246

0.2427/(4.2282+0.2427+0.0782+0.0238)=0.05310.0782/(4.2282+0.2427+0.0782+0.0238)=0.01710.0238/(4.2282+0.2427+0.0782+0.0238)=0.0052

第一个主成分(解释方差)所占比例已经高达92.46%,说明已经可以在这个比例上解释原始数据信息,因此可以将鸢尾花数据从四维降至一维。第一主成分如下:

Y_{1}=0.3614\times(x_{1}-\bar{x}_{1})-0.0845\times(x_{2}-\bar{x}_{2})+0.8567\times(x_{3}-\bar{x}_{3})+0.3583\times(x_{4}-\bar{x}_{4})

其中,\bar{x}_{i}(i=1,2,3,4)表示该列特征的均值,等式右边的系数为协方差矩阵的特征向量的第一列(与第一个特征值相对应的数值)。 

除了协方差矩阵,相关系数矩阵也可以求解主成分。但是两种不同的求解方法结果通常会有一定的差别。此外,值得注意的是,如果对已经标准化的数据求协方差矩阵,实际上就是对原变量求相关系数矩阵。

在求解主成分时,如果变量间的单位不同,应该先将变量标准化后进行计算。否则由于单位不同导致的取值范围悬殊太大会影响最终的结果。

相关文章:

机器学习 | 降维问题

目录 一、主成分分析 二、奇异值分解 2.1 奇异值分解原理 2.2 奇异值分解实践 三、特征值与特征向量 一、主成分分析 主成分有如下特征&#xff1a; 每个主成分是原变量的线性组合&#xff1b;各个主成分之间互不相关&#xff1b;主成分按照方差贡献率从大到小依次排列&…...

Ubuntu20.04平台下使用二进制包部署MongoDB-6.0.4单实例

文章目录 1.1 准备服务器的基本信息1.2 操作系统上创建其用户1.3 部署MongoDB服务端1.4 部署MongoDB客户端1.5 部署MongoDB 27017实例1.5.1 创建相关目录1.5.2 准备配置文件1.5.3 准备启停脚本1.5.4 进行启停测试1.5.5 加入开机自启动 1.6 创建超级管理员用户1.6.1 创建本地的超…...

Snipaste工具推荐

Snipaste Snipaste 不只是截图&#xff0c;善用贴图功能将帮助你提升工作效率&#xff01; 新用户&#xff1f; 截图默认为 F1&#xff0c;贴图为 F3&#xff0c;然后请对照着 快捷键列表 按一遍&#xff0c;体会它们的用法&#xff0c;就入门啦&#xff01; 遇到了麻烦&…...

MinIO快速入门——在Linux系统上安装和启动

1、简介 MinIO 是一款基于Go语言发开的高性能、分布式的对象存储系统。客户端支持Java,Net,Python,Javacript, Golang语言。MinIO系统&#xff0c;非常适合于存储大容量非结构化的数据&#xff0c;例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等。 2、环境搭建&#…...

07.JavaWeb-Vue+elementUI

1.Vue 功能替代JavaScript和jQuery&#xff0c;基于JavaScript实现的前端框架 1.1配置Vue 1.1.1引入vue库 方法一&#xff1a;通过cdn链接引入最新版本的vue&#xff08;可能会慢些&#xff09; <head><script src"https://cdn.jsdelivr.net/npm/vue">…...

经典面试题---【第一档】

1.如果你想new一个Quene&#xff0c;你有几种方式&#xff1f;他们之间的区别是什么&#xff1f; 2.Redis 是如何判断数据是否过期的呢&#xff1f; Redis 通过一个叫做过期字典&#xff08;可以看作是 hash 表&#xff09;来保存数据过期的时间。过期字典的键指向 Redis 数据…...

欧美同学会第三届“双创”大赛——空天装备产业赛区(浙江诸暨)正式启动,开启报名通道

6月8日&#xff0c;欧美同学会第三届“双创”大赛——空天装备产业赛区&#xff08;浙江诸暨&#xff09;启动仪式暨北京推介会圆满举行。活动由欧美同学会&#xff08;中国留学人员联谊会&#xff09;主办&#xff0c;中共浙江省委统战部支持&#xff0c;浙江省欧美同学会、中…...

python3 爬虫相关学习8:python 的常见报错内容 汇总收集

目录 1 拼写错误 AttributeError: NameError: 等等 2 类型错误 TypeError: 如字符串连接错误 TypeError: can only concatenate str (not “int“) to str 3 意外缩进 IndentationError: unexpected indent 4 找不到对应模块 ModuleNotFoundError: 5 语法错误 Syntax…...

活跃主机发现技术指南

活跃主机发现技术指南 1.活跃主机发现技术简介2.基于ARP协议的活跃主机发现技术3.基于ICMP协议的活跃主机发现技术4.基于TCP协议的活跃主机发现技术5.基于UDP协议的活跃主机发现技术6.基于SCTP协议的活跃主机发现技术7.主机发现技术的分析 1.活跃主机发现技术简介 在生活中有这…...

手机抓包fiddler配置及使用教程

本文基于Fiddler4讲解基本使用 fiddler抓包原理 注意&#xff1a;Fiddler 是以代理web服务器的形式工作的&#xff0c;它使用代理地址:127.0.0.1&#xff0c;端口:8888。当Fiddler退出的时候它会自动注销&#xff0c;这样就不会影响别的 程序。不过如果Fiddler非正常退出&…...

STM32单片机(四)第一节:OLED调试工具

❤️ 专栏简介&#xff1a;本专栏记录了从零学习单片机的过程&#xff0c;其中包括51单片机和STM32单片机两部分&#xff1b;建议先学习51单片机&#xff0c;其是STM32等高级单片机的基础&#xff1b;这样再学习STM32时才能融会贯通。 ☀️ 专栏适用人群 &#xff1a;适用于想要…...

自用的一些网址,码住!

京东羚珑智能抠图网站https://ling.jd.com/live/fm#all&#xff1a;主要用于商品抠图&#xff0c;而且还有多种直播背景设计&#xff0c;非常方便。国外的免费抠图网站https://www.remove.bg/zh/upload&#xff1a;有一个魔法棒的设计&#xff0c;可以自己选择抠图的范围和形状…...

银行vr元宇宙全景虚拟展馆提供更加真实、立体、高效的数字资产交易场景

为了贯彻国家普惠金融政策&#xff0c;使金融如无惠及广大群体,宇宙技术在金融行业中的应用将进一步提升金融消费体验感觉和金融管理水平。打造元宇宙金融服务平台&#xff0c;构建虚实结构的金融服务世界&#xff0c;培育和管理好数字机器人员工队伍&#xff0c;提升金融业务各…...

C++ 泛型编程 类型萃取器的运用

C 泛型编程 类型萃取器的运用 一、C类型萃取器的基本概念与应用&#xff08;Type Traits in C&#xff09;1.1 类型萃取器的定义与作用&#xff08;Definition and Role of Type Traits&#xff09;1.2 类型萃取器的分类与特性&#xff08;Classification and Characteristics …...

C++ String类(上篇)

绪论 放弃时间的人&#xff0c;时间也会放弃他。——莎士比亚 &#xff1b; 本篇章是关于string类内一些函数的介绍以及使用方法&#xff0c;都是我们编程必须掌握的基础&#xff01; ​ 全文共7000字左右. 话不多说安全带系好&#xff0c;发车啦&#xff08;建议电脑观看&…...

nested exception is java.lang.NoClassDefFoundError

出现这种问题&#xff0c;一般都是jar有问题&#xff0c;排查是哪个jar包&#xff0c;重新导入maven仓库一下就行了&#xff0c;有的时候需要把原来仓库里的包删掉&#xff0c;重新打包&#xff0c;有的时候要切换分支&#xff0c;到其他分支打包。 打包时候没有打进去&#xf…...

科普:python怎么使用Pyinstaller模块打包成可执行文件

目录 1. 使用conda创建虚拟环境2. 列出所有虚拟环境查看是否创建成功3. 激活虚拟环境4. 安装Pyinstaller模块5. Pyinstaller模块常用参数6. 例子&#xff1a;Windows打包成单个文件并可使用命令行窗口并自定义文件logo 1. 使用conda创建虚拟环境 创建个虚拟环境来打包&#xf…...

企业级应用高性能可扩展架构设计

前言 马上又要618了&#xff0c;每年到了这个时候&#xff0c;商家就开始促销&#xff0c;价格低会吸引来超多用户&#xff0c;对系统来说就是更多的流量&#xff0c;技术上如何确保网站稳定运行&#xff0c;且不被超卖&#xff0c;同时还要让用户有个良好的购物体验。 12306…...

【安全架构】

概念 安全是产品的属性&#xff0c;安全的目标是保障产品里信息资产的保密性&#xff08;Confidentiality&#xff09;、完整性&#xff08;Integrity&#xff09;和可用性&#xff08;Availability&#xff09;&#xff0c;简记为CIA。 保密性&#xff1a; 保障信息资产不被未…...

RabbitMq-高级

参考&#xff1a;https://blog.csdn.net/dingd1234/article/details/125032383 1 TTL TTL QUEUE 声明args TTL MESSAGE postmessage中设置 区别&#xff1a;过期消息会直接删除消息&#xff0c;过期队列若配置死信队列会移到死信队列 ps&#xff1a;同时配置两个已小的为准 2…...

Claude Code安装保姆级教程!超简单上手就会!

Claude Code驾驶手册 文章目录 Claude Code驾驶手册0 前言1 Claude Code基本安装配置1.1 系统配置及安装1.2 启动Claude Code1.3 配置API 0 前言 AI Agent 称为智能体&#xff08;或人工智能代理&#xff09;&#xff0c;本质是自动执行任务的程序&#xff0c;核心在于让模型不…...

快速部署Super Qwen Voice World:复古像素风语音合成中心体验

快速部署Super Qwen Voice World&#xff1a;复古像素风语音合成中心体验 1. 项目简介与核心价值 Super Qwen Voice World是一个基于Qwen3-TTS技术构建的语音合成平台&#xff0c;它将传统的语音合成过程转化为一场充满趣味的8-bit游戏冒险。这个项目最吸引人的特点是&#x…...

Qwen3-ASR-1.7B在C++项目中的集成与应用

Qwen3-ASR-1.7B在C项目中的集成与应用 1. 环境准备与快速部署 要在C项目中集成Qwen3-ASR-1.7B语音识别功能&#xff0c;首先需要准备好开发环境。这个模型虽然功能强大&#xff0c;但部署起来并不复杂&#xff0c;只需要几个简单的步骤。 系统要求&#xff1a; 操作系统&am…...

Zephyr RTOS 线程实战:从信号量到消息队列,手把手教你搞定多任务通信

Zephyr RTOS线程通信实战&#xff1a;信号量与消息队列的深度应用指南 在嵌入式开发领域&#xff0c;多任务间的有效通信是构建可靠系统的关键所在。想象这样一个场景&#xff1a;你的物联网设备需要同时处理传感器数据采集、实时数据处理、无线通信传输等多个任务&#xff0c;…...

Triton内存管理完全解析:共享内存与缓存策略

Triton内存管理完全解析&#xff1a;共享内存与缓存策略 【免费下载链接】triton Development repository for the Triton language and compiler 项目地址: https://gitcode.com/GitHub_Trending/tri/triton Triton语言和编译器作为深度学习计算的关键基础设施&#xf…...

5分钟搞定COCO数据集下载与配置:从官网到百度云全攻略(附多线程加速技巧)

COCO数据集极速获取指南&#xff1a;从官方源到镜像站的全链路方案 刚接触计算机视觉的新手们&#xff0c;往往在第一步获取数据集时就遭遇"劝退"——动辄几十GB的COCO数据集&#xff0c;官网下载速度堪比蜗牛爬行&#xff0c;百度云限速让人抓狂。本文将分享一套经过…...

Python 3.14 JIT编译器深度调优实战(官方未公开的profile-driven优化链)

第一章&#xff1a;Python 3.14 JIT编译器演进与调优全景概览Python 3.14 引入了实验性但高度可配置的内置 JIT 编译器&#xff08;代号“Torchlight”&#xff09;&#xff0c;标志着 CPython 首次在标准发行版中集成生产就绪的即时编译能力。该 JIT 并非替代解释器&#xff0…...

WinRAR v7.21 Beta1 - 高效文件压缩加密解压缩软件

WinRAR v7.21 Beta1 是适配 Windows 的经典解压缩软件&#xff0c;支持 RAR、ZIP 等多格式压缩解压&#xff0c;具备固实压缩、加密等功能&#xff0c;64 位优化版完成汉化与注册适配&#xff0c;操作便捷&#xff0c;是电脑文件管理的优质选择。WinRAR v7.21 Beta1 软件详情介…...

java毕业设计基于springboot西岭雪山智慧景区管理系统

前言 随着旅游业的快速发展和游客数量的不断增加&#xff0c;西岭雪山景区面临着越来越多的管理挑战。传统的景区管理方式往往存在效率低下、信息不透明、游客体验差等问题。为了解决这些困境&#xff0c;基于Spring Boot的西岭雪山智慧景区管理系统应运而生。该系统旨在通过先…...

iOS自动化安全与idb工具:构建安全可靠的测试环境

iOS自动化安全与idb工具&#xff1a;构建安全可靠的测试环境 【免费下载链接】idb idb is a flexible command line interface for automating iOS simulators and devices 项目地址: https://gitcode.com/gh_mirrors/idb/idb 在iOS自动化测试流程中&#xff0c;开发者常…...