机器学习作业7——PCA

目录

一、原理

1.数据中心化

2.白数据与目标

3.协方差与协方差矩阵

4.特征值与特征向量

5.最终结果构造

二、代码

代码解释:

三、结果

结果解释:

pca优缺点分析:

参考视频:


一、原理

目的:

pca是为了将原始的数据集的特征维度减少。

如上图,横纵坐标代表两个特征,可以看到这两个特征正相关程度很大,都快可以用一条直线连起来了。

假如能把它变成像下图这样的,能很大程度的保留样本点的信息,又能够减少特征维度,那就实现了pca的降维(将两个特征用一个主成分表示)。

一些概念:

1.数据中心化

假设原来的数据是二维的,并且将样本点放在坐标系中是这样

中心化后,结果如下图。

实现:

对每个特征,先求出他的均值:

\bar{x} = \frac{1}{N} \sum_{i=1}^N x_i

再将每个样本的该特征,都减去这个均值

\tilde{x}_i = x_i - \bar{x}

对每个特征都执行了这样的操作就结束了。

2.白数据与目标

先假设假设数据中心化后如左图,为了引出目标,假设右图就是他的白数据。

变成

设白数据样本集为

样本的特征x和特征y是独立的,并且服从标准正态分布。

其中D是样本集,列数是样本数量,行数为特征数量。

拉伸:

现将一个矩阵乘上数据集,得到:

结果如下图

就可以实现将这个样本集在X轴上“拉长”

旋转:

假设SD左乘一个矩阵,就变为下图:

现在我们手上的数据便是这个“RSD”,其中这个R是最重要的,PCA需要求出这个矩阵R,也就是旋转坐标轴的角度。

一些补充:

3.协方差与协方差矩阵

协方差定义:

\text{Cov}(X, Y) = \frac{1}{n-1} \sum_{i=1}^{n} (X_i - \bar{X})(Y_i - \bar{Y})

其中:n 是样本数量,Xi 和 Yi 分别表示第 i 个样本的 X 和 Y 值,\bar{X},\bar{Y}分别是 X 和 Y 的均值。

在PCA中,X和Y即为特征。

协方差的意义是:表示X与Y的相关程度,若正相关,协方差大于0,负相关则小于0,若几乎为0,则不相关。

显然的,当Y=X时,协方差分子即为方差。

由于已经去中心化了,所以均值都为0。

协方差矩阵:

将协方差带入:

其中D是上面的白数据。

将D替换为RSD,则已经中心化后的数据的协方差矩阵为:

第4行中,因为,其中白数据的X与Y是不相关的,所以协方差为0,而对角线上为方差,并且X与Y是标准正态分布,所以为1。

第5行中,RT = R-1在上面有补充,第6行中,L定义为S*ST。

算完这个玩意之后,自然有用处,和接下来的式子形式上相同。

4.特征值与特征向量

假如以下式子成立

\mathbf{A} \mathbf{v} = \lambda \mathbf{v},其中A为矩阵,v为列数为1,行数与A相等的矩阵,\lambda为标量。

那么v就为矩阵A的特征向量,\lambda就为特征值。

现在先给出以下两个式子(因为现在假设原数据集特征维度为2)

由线性代数基础知识,可由上两式得到:

可以看作:

两边同右乘R-1,又因为R-1=RT,所以得到:

便可以将R中第一列看作特征向量1,第二列看作特征向量2。

这样,求解这个R,就是求出了特征向量了。

而L则是特征值。

5.最终结果构造

求出了这个R后,根据特征值大小对特征向量进行排序,选择前几个特征向量对应的主成分,这些主成分能够解释数据中最多的方差。

然后构造特征向量矩阵:将选择的主要特征向量排列成一个矩阵。假设选择了 k 个主成分,那么这个矩阵的大小将是 d*k,d是原始数据的维度

将中心化后的数据矩阵 X 乘以特征向量矩阵 W,得到的数据矩阵 Z = XW 的大小为 n * k,即为最终结果。

二、代码

import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaleriris = datasets.load_iris()
X = iris.data
y = iris.targetscaler = StandardScaler()
X_scaled = scaler.fit_transform(X)pca = PCA(n_components=2)
X_pca = pca.fit_transform(X_scaled)#创建一个图形并设置子图
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(16, 6))#降维前的数据前两个特征
ax1.set_title("origin")
for i, target_name in zip([0, 1, 2], iris.target_names):ax1.scatter(X[y == i, 0], X[y == i, 1], label=target_name)
ax1.set_xlabel('X1')
ax1.set_ylabel('X2')
ax1.legend()#降维后的数据
ax2.set_title("after")
for i, target_name in zip([0, 1, 2], iris.target_names):ax2.scatter(X_pca[y == i, 0], X_pca[y == i, 1], label=target_name)
ax2.set_xlabel('X1')
ax2.set_ylabel('X2')
ax2.legend()plt.show()

代码解释:

由于这次老师说可以用库函数,所以比较简单。

pca = PCA(n_components=2)
X_pca = pca.fit_transform(X_scaled)

这里是主要部分,第一行就是创建个pca对象,指定主成分数量为2(也就是接下来往这个对象中传入数据,返回出来的是二维特征的数据),然后第二行就是将数据集扔进去,也就是X_scaled,

返回的X_pca即是处理完的数据集。

三、结果

结果解释:

使用鸢尾花数据集来作为本次实验的数据集。

左图是原数据使用前两个特征展现出的图,右图是pca的结果。

可以看到左图的黄绿点比较混杂,而右图的黄绿点左右分的比较开,两张图的蓝点都比黄绿点分的开。而把黄绿点分的比左图开的右图,就是pca的功劳与结果。

pca优缺点分析:

优点:

  1. 降低数据维度:PCA通过投影数据到较低维度的主成分空间,实现了数据的降维。这有助于减少数据存储和计算成本,并简化后续分析过程。

  2. 消除特征间相关性:PCA通过转换数据,使得新的特征向量(主成分)之间彼此正交,从而消除原始特征之间的相关性。这有助于减少多重共线性问题,并提高后续模型的准确性和稳定性。

  3. 保留最大方差信息:PCA将数据投影到方差最大的主成分上,这意味着它保留了数据中最重要的信息。这使得我们能够更好地理解数据集的结构和变异性,以及更好地解释数据。

  4. 可视化数据:降维后的数据可以更容易地可视化,因为它们通常只涉及两个或三个主成分。这有助于发现数据中的模式、聚类和异常值。

缺点:

  1. 信息损失:降维过程中,为了将数据映射到较低维度,必然会丢失一部分信息。降维后的数据无法完全还原原始数据,因此可能会损失一些细节和特征。

  2. 主成分的可解释性:虽然PCA可以帮助我们找到方差最大的主成分,但这些主成分通常很难直接解释。它们是原始特征的线性组合,因此不容易与现实世界中的具体含义对应。

  3. 对离群值敏感:PCA对离群值比较敏感,因为它是基于数据的协方差矩阵或相关矩阵计算的。离群值可能会对协方差或相关性的计算产生较大的影响,从而导致降维结果不准确。

  4. 计算复杂性:PCA的计算复杂度较高,特别是在处理大规模数据集时。计算协方差矩阵或相关矩阵需要较大的计算和存储开销。

参考视频:

参考视频1

参考视频2

参考视频3

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

辽宁普通测径仪升级智能测径仪后都有哪些改进?

关键字: 普通测径仪, 智能测径仪, 测径仪升级, 测径仪特点, 智能测径仪优势, 目前多数厂家测径仪的数据处理方式是单片机计算出最终结果,然后传输到工控机后期处理。这样的电路系统对轧钢现场的高温、高粉尘和强电磁干扰的环境适应性很差,使得同一厂家、…

JUC并发编程-第一天

JUC并发编程-第一天 JUC开发基础知识进程、线程、协程 JUC开发基础知识 先有进程,然后进程可以创建线程,线程是依附在进程里面的,线程里面包含多个协程 进程之间不共享全局变量,线程之间共享全局变量(线程通信就是用的这个&#x…

经典的网站系统架构(入门级)

从开发到部署,从用户访问到底层数据库,介绍搭建网站系统的经典架构的10个核心部分。 (图转自bytebytego,翻译整理by dogstar) 1、使用Git管理和协同源代码,通过CI/CD或Git的Webhook方式自动同步更新部署到服…

java原子变量

在Java中,原子变量是一种特殊的变量,它们提供了一种不需要显式加锁的情况下进行线程安全的操作。Java.util.concurrent.atomic包提供了原子变量类,如AtomicInteger,AtomicLong等,它们利用底层硬件的原子操作来保证线程…

MyBatis 动态 SQL 的详细内容讲解

1. MyBatis 动态 SQL 的详细内容讲解 文章目录 1. MyBatis 动态 SQL 的详细内容讲解2. 准备工作3. if 标签4. where 标签5. trim 标签6. set 标签7. choose when otherwise 标签8. foreach 标签8.1 批量删除8.2 批量添加 9. SQL 标签与 include 标签10. 总结:11. 最…

使用pnpm创建vue3项目

https://pnpm.io/zh/ 全局安装: npm install -g pnpm 检查版本: pnpm -v 创建vue3项目: pnpm create vuelatest 项目装包: pnpm install 运行项目: pnpm dev 命令行: https://pnpm.io/zh/pnpm-cli pnpm …

C语言 | Leetcode C语言题解之第150题逆波兰表达式求值

题目&#xff1a; 题解&#xff1a; int evalRPN(char** tokens, int tokensSize) {int n tokensSize;int stk[(n 1) / 2];memset(stk, 0, sizeof(stk));int index -1;for (int i 0; i < n; i) {char* token tokens[i];if (strlen(token) > 1 || isdigit(token[0])…

UNIAPP-ADB无线调试

ADB下载 SDK 平台工具版本说明 | Android Studio | Android Developers (google.cn) 环境变量配置 ADB版本查看 adb version 手机使用数据线连接到电脑 手机需要授权adb调试(开发人员选项里面) CMD输入命令 adb tcpip 5555 到了这一步你手机已经启动了adb服务了&…

vue 生命周期 钩子函数 keep-alive activated deactivated

一、activated deactivated 在被keep-alive包含的组件/路由中&#xff0c;会多出两个生命周期的钩子:activated 与 deactivated。在 2.2.0 及其更高版本中&#xff0c;activated 和 deactivated 将会在树内的所有嵌套组件中触发。activated在组件第一次渲染时会被调用&#x…

kafka 快速上手

下载 Apache Kafka 演示window 安装 编写启动脚本,脚本的路径根据自己实际的来 启动说明 先启动zookeeper后启动kafka,关闭是先关kafka,然后关闭zookeeper 巧记&#xff1a; 铲屎官&#xff08;zookeeper&#xff09;总是第一个到&#xff0c;最后一个走 启动zookeeper call bi…

2024 Idea最新激活码

idea的激活与安装 操作如下&#xff1a; ① 打开网站&#xff1a;https://web.52shizhan.cn 切换到&#xff1a;激活码&#xff0c;点击获取 ② 这个时候就跳转到现成账号页面&#xff0c;点击获取体验号&#xff0c;如图 ③ 来到了获取现成账号的页面了。输入你的邮箱账号即…

Flutter笔记:关于WebView插件的用法(上)

Flutter笔记 关于WebView插件的用法&#xff08;上&#xff09; - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:htt…

官宣!2024影响因子即将公布,或将迎来这些重大变化!

【SciencePub学术】IF是Impact Factor&#xff0c;即我们俗称的“影响因子”&#xff0c;是衡量学术期刊一个重要性的指标。它通过计算期刊上发表的文章在特定时间内被引用的平均次数来评估期刊的影响力。 影响因子计算公式 影响因子&#xff08;IF&#xff09;&#xff08;期…

vue3实战练习之红包雨,抢红包案例

抢红包案例 每当618消费节到来时&#xff0c;某宝、某多&#xff0c;等购物网站都会退出各种活动&#xff0c;其中抢红包&#xff0c;优惠券等红包雨活动很是火热&#xff0c;于是就通过vue的知识来做一个红包雨&#xff0c;抢红包加分活动&#xff01;代码中红包的路径改成自己…

2024年人工智能与云计算国际会议(ICAICC 2024)

2024 International Conference on Artificial Intelligence and Cloud Computing 【1】大会信息 大会时间&#xff1a;2024-07-19 大会地点&#xff1a;中国长沙 截稿时间&#xff1a;2024-07-05(以官网为准&#xff09; 审稿通知&#xff1a;投稿后2-3日内通知 会议官网&am…

看完“土猪拱白菜“的张锡峰,我明白计算机有多难了

计算机有多难&#xff1f; 今天无意中&#xff0c;看到一篇关于「"土猪拱白菜"学霸后悔报考浙大计算机」的文章。 或许会有不少和我刚开始一样懵圈的同学&#xff1a;张锡峰是谁&#xff1f;"土猪拱白菜"又是什么梗&#xff1f; 带着疑惑&#xff0c;我打开…

Tita 360评估:有效 360度反馈流程的 10 大步骤

宣传过程 如果你的公司首次引入多方位反馈或 360 度反馈&#xff0c;那么向所有利益相关者描述这一流程至关重要。由于流程太新&#xff0c;很多人还不了解。确保参与该流程的每个人都了解其目的&#xff0c;以及将如何实施该流程和使用其结果。花时间在一对一会议、小组会议和…

python的a[:2]、a[:] 和a [::] 的区别

一、a[:2] 数据准备 import numpy as np X np.array([[0,1],[2,3],[4,5],[6,7],[8,9],[10,11],[12,13],[14,15],[16,17],[18,19]]) print(X)形成矩阵 print (“X[: 2]:”, X[: 2]) ### :表示索引 0至1行&#xff1b; 二、a[:]和a [::] 在 Python 中&#xff0c;[:] 和 [::…

SQL Server 安装后,服务器再改名,造成名称不一致,查询并修改数据库服务器真实名称

SELECT SERVERNAME -- 1.查询旧服务器名称 SELECT serverproperty(servername) AS new --2.查询新服务器名称 -- 3.更新服务器名称 IF SERVERPROPERTY(servername) <> 新服务器名称替换 BEGIN DECLARE server_name NVARCHAR(128) SET server_name 新服务器…

Linux部署项目

手动部署 1.在IDEA写一个有关springboot项目 在windows客户端可以通过localhost:8080/hello 访问 2.用packge 命令将该springboot项目打包 并在target目录下找到打包的jar包 3.上传到linux上 个人习惯在usr/local/app 下上传该项目 创建切换到app目录下 mkdir /usr/local/ap…