主成分分析和线性判别分析

主成分分析 (PCA)

PCA 是一种线性降维方法,通过投影到主成分空间,尽可能保留数据的方差。

原理

PCA 通过寻找数据投影后方差最大的方向,主成分是这些方向上的正交向量。

公式推理
  1. 对数据中心化

其中,μ 是数据的均值向量。

  1. 计算协方差矩阵

其中,n 是样本数量。

  1. 对协方差矩阵求特征值和特征向量

其中,v 是特征向量,λ是特征值。

  1. 选择前 k 个最大特征值对应的特征向量,构建投影矩阵

  1. 将原始数据投影到新的低维空间

经典案例

案例:PCA在手写数字识别数据集上的应用

我们将使用经典的MNIST数据集,它包含了大量的手写数字图片,每张图片是28x28像素的灰度图像,共有10个类别(0到9)。通过PCA将MNIST数据集从784维降到2维,并可视化不同数字在降维空间的分布。

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import fetch_openml
from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaler# 加载MNIST数据集
mnist = fetch_openml('mnist_784', version=1,as_frame=False,parser='liac-arff')
X = mnist.data.astype('float64')
y = mnist.target.astype('int64')# 标准化数据
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)# 使用PCA进行降维到2维
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X_scaled)# 可视化
plt.figure(figsize=(10, 8))
scatter = plt.scatter(X_pca[:, 0], X_pca[:, 1], c=y, cmap='tab10', edgecolor='k', s=20)
plt.colorbar(scatter, label='Digit', ticks=range(10))
plt.title('PCA of MNIST Dataset')
plt.xlabel('Principal Component 1')
plt.ylabel('Principal Component 2')
plt.grid(True)
plt.show()
代码解析
  1. 加载MNIST数据集:使用 fetch_openml 函数加载MNIST数据集,包括特征矩阵 X 和目标向量 y
  2. 标准化数据:使用 StandardScaler 对数据进行标准化处理,使得每个特征具有零均值和单位方差。
  3. 使用PCA进行降维:创建 PCA 对象并将数据降到 2 维。
  4. 可视化:绘制降维后的数据分布,不同颜色表示不同数字类别。

代码中展示了如何利用PCA对高维数据进行降维,并通过可视化直观地展示了降维后数据的分布情况,有助于理解数据集的结构与特征之间的关系。

线性判别分析 (LDA)

LDA 是一种监督降维方法,通过最大化类间方差与类内方差的比率,找到可以最好地区分类别的投影方向。

原理

LDA 寻找投影方向,使得同类样本的投影尽可能接近,而不同类样本的投影尽可能远离。通过类间散度矩阵和类内散度矩阵的特征值分解,确定最优投影方向。

公式推理
  1. 计算类内散度矩阵 SWS_WSW 和类间散度矩阵 SBS_BSB
    • 类内散度矩阵:

    • 类间散度矩阵:

其中,μi 是第 i 类的均值向量,μ 是所有样本的总体均值向量,Ni 是第 i 类的样本数,c是类别数。

  1. 求解广义特征值问题

其中,w 是特征向量,λ 是特征值。

  1. 选择前 k 个最大特征值对应的特征向量,构建投影矩阵

  1. 将原始数据投影到新的低维空间

经典案例

案例:LDA 在葡萄酒分类数据集上的应用

葡萄酒数据集包含三类葡萄酒的 13 个化学特征。通过 LDA 将 13 维特征降到 2 维,并可视化不同类别葡萄酒在降维空间的分布。

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_wine
from sklearn.preprocessing import StandardScaler
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis as LDA# 加载葡萄酒数据集
wine = load_wine()
X = wine.data
y = wine.target# 标准化数据
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)# 使用LDA进行降维到2维
lda = LDA(n_components=2)
X_lda = lda.fit_transform(X_scaled, y)# 可视化
plt.figure(figsize=(10, 8))
for class_value in np.unique(y):plt.scatter(X_lda[y == class_value, 0], X_lda[y == class_value, 1], label=wine.target_names[class_value], edgecolor='k', s=100)
plt.xlabel('Linear Discriminant 1')
plt.ylabel('Linear Discriminant 2')
plt.title('LDA of Wine Dataset')
plt.legend()
plt.grid(True)
plt.show()
代码解析
  1. 加载葡萄酒数据集:使用 load_wine 函数加载数据集,包括特征矩阵 X 和目标向量 y
  2. 标准化数据:使用 StandardScaler 对数据进行标准化处理,使得每个特征具有零均值和单位方差。
  3. 使用LDA进行降维:创建 LDA 对象并将数据降到 2 维。
  4. 可视化:绘制降维后的数据分布,不同颜色表示不同类别。

代码展示了如何利用LDA对高维数据进行降维,并通过可视化直观地展示了降维后数据的分布情况,有助于理解数据集的结构与特征之间的关系。

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

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

相关文章

“微软蓝屏”事件敲响网络安全的警钟

文章目录 前言一、对网络安全的警醒二、我们如何应对?总结 前言 “微软蓝屏”事件是一次由微软合作伙伴CrowdStrike的终端安全产品更新与操作系统内核冲突导致的全球性技术故障。这一事件不仅影响了多个国家的航空、银行、金融、零售、餐饮等多个行业,还…

吴恩达老师机器学习-ex8

data1 导入库,读取数据并进行可视化 因为这次的数据是mat文件,需要使用scipy库中的loadmat进行读取数据。 通过对数据类型的分析,发现是字典类型,查看该字典的键,可以发现又X等关键字。 import numpy as np import…

十七、Intellij IDEA2022.1.1下载、安装、激活

目录 🌻🌻 一、下载二、 安装三、激活 一、下载 官网下载地址 本地直接下载 目前Intellij IDEA的最新版本已经更新到了 2024.1.4,由于最新版本可能存在不稳定的问题,此处选择其他版本进行下载,此处以2022.1.1为例进行下…

【Spring】Bean详细解析

1.Spring Bean的生命周期 整体上可以简单分为四步:实例化 —> 属性赋值 —> 初始化 —> 销毁。初始化这一步涉及到的步骤比较多,包含 Aware 接口的依赖注入、BeanPostProcessor 在初始化前后的处理以及 InitializingBean 和 init-method 的初始…

基于STM32的智能家居安防系统教程

目录 引言环境准备智能家居安防系统基础代码实现:实现智能家居安防系统 门窗传感器模块视频监控模块报警与通知模块用户界面与远程控制应用场景:家庭安防与监控常见问题与解决方案收尾与总结 引言 随着智能家居的普及,家庭安防系统成为保护…

艾瑞白皮书解读(一)丨为什么说数据工程是中国企业数据治理的最佳实践?

2024年7月 艾瑞咨询公司对国内数据治理行业进行了研究,访问了国内多位大中型企业数据治理相关负责人,深度剖析中国企业在数字化转型过程中面临到的核心数据问题后,重磅发布《2024中国企业数据治理白皮书》(以下简称“白皮书”&…

算法通关:017_1:二叉树及三种顺序的递归遍历

文章目录 题目思路代码运行结果 题目 二叉树及三种顺序的递归遍历 思路 代码 /*** Author: ggdpzhk* CreateTime: 2024-08-04** 二叉树及三种顺序的递归遍历* LeetCode 144. 二叉树的前序遍历* LeetCode 94. 二叉树的中序遍历* LeetCode 145. 二叉树的后序遍历* LeetCode 10…

龙迅LT8713SX 高性能TYPE-C/DP转三端口DP1.4/HDMI 2.0转换器,带音频

龙迅LT8713SX描述: LT8713SX是一个高性能类型-C/DP1.4到Type-C/DP1.4/HDMI2.0转换器,具有三个可配置的DP1.4/HDMI2.0/DP输出接口和音频输出接口。LT8713SX同时支持显示端口™单流传输(SST)模式和多流传输(MST&#xf…

Adobe Acrobat不支持图片格式转换PDF文件

我在将图片格式(PNG,JPEG)转换为PDF的过程中遇到了如下问题: 单文件的解决办法——在软件外实现转换: 使用照片打开图片 选择打印 打印机选择Adobe PDF,执行打印 选择PDF文件的保存位置,过一会儿可以正…

基本K8s搭建Jekins+gitee项目自动部署

这里写目录标题 1.基本K8s部署安装Jekins2.设置Jenkins国内镜像源2.安装Gitee插件1.安装Gitee Plugin2.验证安装Gitee Plugin 3.新建任务1.输入任务名称2.输入你gitee上的项目链接3.测试构建 4.查看项目在k8s集群master节点的位置1.确认 Jenkins Pod 名称2.使用kubectl exec到 …

视频如何生成二维码(自动生成二维码)完整教程

在企业中,产品视频二维码怎么制作,产品二维码怎么实现微信扫码便捷观看?上图文教程:视频二维码生成器/上传视频自动生成二维码完整教程。 目前市面上有很多工具,可以实现,比如草料二维码、酷播云二维码等等…

【Web开发手礼】探索Web开发的秘密(十四)-Vue2(1)Node.js的安装、Vue入门

主要介绍了Node.js的安装教程、Vue2常用的一些指令、声明周期!!! 文章目录 前言 Node.js安装 选择安装目录 验证NodeJS环境变量 配置npm的全局安装路径 切换npm的淘宝镜像 安装Vue-cli ​编辑 Vue2入门 引入vue.js文件 入门代码 常用指令 生…

前端(vue3)和后端(django)的交互

vue3中&#xff1a; <template><div><h2>注册页面</h2><form submit.prevent"submitForm"><label for"username">用户名&#xff1a;</label><input type"text" id"username" v-model…

AWS S3怎么收费的?一文带你搞懂!

Amazon Simple Storage Service&#xff08;S3&#xff09;是亚马逊网络服务&#xff08;AWS&#xff09;提供的一个高度可扩展的对象存储服务&#xff0c;广泛应用于数据存储、备份、归档和大数据分析等领域。S3的计费模式相对灵活&#xff0c;旨在满足不同用户的需求。本文中…

小试牛刀-walletconnect二维码及交互

目录 1.编写目的 2.实现功能 3.功能详解 依赖组件 3.1 二维码生成 3.1.1 初始化SignClient 3.1.2 创建会话空间获取WC协议uri 3.1.3 生成二维码供用户扫描 3.1.4 等待扫描 3.2 发送交易事务 3.2.1 创建交易事务 3.2.2 向用户发送交易事务 3.3 签名事务 3.3.1 接收…

安装VMware16

安装VMware16的步骤主要包括下载、‌安装和激活。‌ 下载VMware16 首先&#xff0c;‌需要从VMware官网下载VMware Workstation Pro 16的安装包。‌下载链接为https://customerconnect.vmware.com/cn/downloads/info/slug/desktop_end_user_computing/vmware_workstation_pro…

关于LLC知识2

LLC拓扑如下图所示&#xff0c;虚线框住的是LLC的核心部分&#xff0c;前面的部分是把输入交流电压经过整流和滤波使得在进入LLC的时候是直流电压&#xff08;带有纹波&#xff09;&#xff0c;如果忽略纹波&#xff0c;那么给LLC供电的就是稳定的直流电压。 LLC的稳态分析即&a…

浅谈线程组插件之jp@gc - Stepping Thread Group

浅谈线程组插件之jpgc - Stepping Thread Group jpgc - Stepping Thread Group 是一个高级线程组插件&#xff0c;专为Apache JMeter设计。相较于JMeter自带的基本线程组&#xff0c;此插件提供了更灵活、更精细的用户模拟方式&#xff0c;特别适合于模拟真实用户逐步增加的场…

MySQL--数据库备份

前言&#xff1a;本博客仅作记录学习使用&#xff0c;部分图片出自网络&#xff0c;如有侵犯您的权益&#xff0c;请联系删除 一、为什么要备份 备份&#xff1a;能够防止由于机械故障以及人为误操作带来的数据丢失&#xff0c;例如将数据库文件保存在了其它地方。 冗余&#…

密码学基础:搞懂Hash函数SHA1、SHA-2、SHA3(2)

目录 1.引入 2. SHA512-224\256 3.SHA-3 4.MD5 5.SM3 1.引入 上篇密码学基础&#xff1a;搞懂Hash函数SHA1、SHA-2、SHA3(1)-CSDN博客&#xff0c;我们先就将基础的SHA1\2讲解了&#xff0c;接下来我们继续聊SHA-3、SHA2变体SHA512_224\256等 2. SHA512-224\256 SHA512…