当前位置: 首页 > 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…...

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇&#xff0c;在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下&#xff1a; 【Note】&#xff1a;如果你已经完成安装等操作&#xff0c;可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作&#xff0c;重…...

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...

【Oracle APEX开发小技巧12】

有如下需求&#xff1a; 有一个问题反馈页面&#xff0c;要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据&#xff0c;方便管理员及时处理反馈。 我的方法&#xff1a;直接将逻辑写在SQL中&#xff0c;这样可以直接在页面展示 完整代码&#xff1a; SELECTSF.FE…...

微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】

微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来&#xff0c;Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...

React第五十七节 Router中RouterProvider使用详解及注意事项

前言 在 React Router v6.4 中&#xff0c;RouterProvider 是一个核心组件&#xff0c;用于提供基于数据路由&#xff08;data routers&#xff09;的新型路由方案。 它替代了传统的 <BrowserRouter>&#xff0c;支持更强大的数据加载和操作功能&#xff08;如 loader 和…...

练习(含atoi的模拟实现,自定义类型等练习)

一、结构体大小的计算及位段 &#xff08;结构体大小计算及位段 详解请看&#xff1a;自定义类型&#xff1a;结构体进阶-CSDN博客&#xff09; 1.在32位系统环境&#xff0c;编译选项为4字节对齐&#xff0c;那么sizeof(A)和sizeof(B)是多少&#xff1f; #pragma pack(4)st…...

Debian系统简介

目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版&#xff…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...

MySQL 8.0 OCP 英文题库解析(十三)

Oracle 为庆祝 MySQL 30 周年&#xff0c;截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始&#xff0c;将英文题库免费公布出来&#xff0c;并进行解析&#xff0c;帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战

“&#x1f916;手搓TuyaAI语音指令 &#x1f60d;秒变表情包大师&#xff0c;让萌系Otto机器人&#x1f525;玩出智能新花样&#xff01;开整&#xff01;” &#x1f916; Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制&#xff08;TuyaAI…...