机器学习PCA和LDA
主成分分析(PCA, Principal Component Analysis)和线性判别分析(LDA, Linear Discriminant Analysis)是两种常用的降维方法,它们虽然都用于数据降维,但核心思想和应用场景不同。
PCA(主成分分析)
PCA 是一种无监督学习方法,主要用于特征降维,以最大化数据的方差,同时减少信息损失。其核心思想是找到数据的主成分(方差最大的方向),然后对数据进行投影,从而降低维度。
PCA的步骤
- 将数据中心化(去均值)并标准化,以消除量纲影响。
- 衡量不同特征之间的相关性。
- 找到协方差矩阵的特征值和特征向量,特征向量代表数据的主方向,特征值表示该方向上的方差信息量。
- 根据特征值大小选择前 K K K个特征向量构成新的特征空间。
- 用选择的特征向量将原始数据投影到新的低维空间。
它不考虑类别标签,仅关注数据的整体分布,通过选择方差最大的方向来保留最多的信息。其主要作用是特征降维,去除冗余特征,并用于数据可视化,尤其适用于高维数据的降维处理,以便于后续分析和建模。
def pca(X:np.array, n_components:int) -> np.array:"""PCA 降维。"""# 1. 数据标准化(去均值)X_mean = np.mean(X, axis=0)X_centered = X - X_mean # (m, n)# print(f'X_centered.shape: {X_centered.shape}')# 2. 计算协方差矩阵covariance_matrix = np.cov(X_centered, rowvar=False)# 3. 计算特征值和特征向量eigenvalues, eigenvectors = np.linalg.eig(covariance_matrix)# 4. 按特征值降序排序sorted_indices = np.argsort(eigenvalues)[::-1]top_eigenvectors = eigenvectors[:, sorted_indices[:n_components]] # (n, n_components)# print(f'top_eigenvectors.shape: {top_eigenvectors.shape}')# 5. 投影到新空间X_pca = np.dot(X_centered, top_eigenvectors) # (m, n_components)# print(f'X_pca.shape: {X_pca.shape}')return X_pca
LDA (线性判别分析)
LDA 是一种有监督的降维方法,目标是在降维的同时最大化类别之间的可分性。与 PCA 不同,LDA 利用类别标签来优化数据投影,使得不同类别的样本尽可能分开。
LDA的步骤
- 计算类内散度矩阵 S W S_W SW
- 计算类间散度矩阵 S B S_B SB
- 求解投影方向
- 选择前 k k k个特征向量组成投影矩阵 W W W
它利用类别信息来优化数据投影,使得不同类别的样本在低维空间中尽可能分开。通过最大化类间距离并最小化类内方差,LDA能够增强类别可分性,因此广泛应用于分类任务,如人脸识别、文本分类等,有助于提高模型的分类性能。
def lda(X:np.array, y:np.array, n_components:int) -> np.array:"""LDA 降维"""# 获取类别列表classes = np.unique(y)n_features = X.shape[1]# 计算总均值mean_total = np.mean(X, axis=0)# 计算类内散度矩阵 Sw 和 类间散度矩阵 SbS_W = np.zeros((n_features, n_features))S_B = np.zeros((n_features, n_features))for c in classes:X_c = X[y == c] # 取出类别 c 的所有样本mean_c = np.mean(X_c, axis=0) # 计算类别 c 的均值S_W += np.cov(X_c, rowvar=False) * (X_c.shape[0] - 1) # 类内散度矩阵mean_diff = (mean_c - mean_total).reshape(-1, 1)S_B += X_c.shape[0] * (mean_diff @ mean_diff.T) # 类间散度矩阵# 计算 Sw^-1 * Sb 的特征值和特征向量eigvals, eigvecs = np.linalg.eig(np.linalg.inv(S_W) @ S_B)# 选取前 n_components 个特征向量(按特征值降序排序)sorted_indices = np.argsort(eigvals)[::-1]W = eigvecs[:, sorted_indices[:n_components]]# 投影数据到 LDA 低维空间X_lda = X @ Wreturn X_lda, W
PCA vs. LDA
| PCA | LDA | |
|---|---|---|
| 类别信息 | 无监督,不考虑类别 | 有监督,利用类别信息 |
| 目标 | 最大化数据方差,保留最多信息 | 最大化类间距离,增强类别可分性 |
| 计算 | 计算协方差矩阵的特征值 | 计算类间/类内散度矩阵的特征值 |
| 应用场景 | 适用于降维、特征提取、数据压缩 | 适用于分类任务,提高模型性能 |
相关文章:
机器学习PCA和LDA
主成分分析(PCA, Principal Component Analysis)和线性判别分析(LDA, Linear Discriminant Analysis)是两种常用的降维方法,它们虽然都用于数据降维,但核心思想和应用场景不同。 PCA(主成分分析…...
RocketMQ - 常见问题
RocketMQ常见问题 文章目录 RocketMQ常见问题一:消息幂等问题1:什么是消费幂等2:消息重复的场景分析2.1:发送时消息重复2.2:消费时消息重复2.3:Rebalance时消息重复 3:通用解决方案3.1ÿ…...
kafka消费能力压测:使用官方工具
背景 在之前的业务场景中,我们发现Kafka的实际消费能力远低于预期。尽管我们使用了kafka-go组件并进行了相关测试,测试情况见《kafka-go:性能测试》这篇文章。但并未能准确找出消费能力低下的原因。 我们曾怀疑这可能是由我的电脑网络带宽问题或Kafka部…...
基于Spring Boot的社区居民健康管理平台的设计与实现
目录 1 绪论 1.1 研究现状 1.2 研究意义 1.3 组织结构 2 技术介绍 2.1 平台开发工具和环境 2.2 Vue介绍 2.3 Spring Boot 2.4 MyBatis 2.5 环境搭建 3 系统需求分析 3.1 可行性分析 3.2 功能需求分析 3.3 系统用例图 3.4 系统功能图 4 系统设计 4.1 系统总体描…...
网络安全架构战略 网络安全体系结构
本节书摘来自异步社区《网络安全体系结构》一书中的第1章,第1.4节,作者【美】Sean Convery 1.4 一切皆为目标 网络安全体系结构 当前的大型网络存在着惊人的相互依赖性,作为一名网络安全设计师,对这一点必须心知肚明。Internet就…...
【Spring+MyBatis】_图书管理系统(中篇)
【SpringMyBatis】_图书管理系统(上篇)-CSDN博客文章浏览阅读654次,点赞4次,收藏7次。(1)当前页的内容records(类型为List);参数:userNameadmin&&pas…...
Python - 爬虫利器 - BeautifulSoup4常用 API
文章目录 前言BeautifulSoup4 简介主要特点:安装方式: 常用 API1. 创建 BeautifulSoup 对象2. 查找标签find(): 返回匹配的第一个元素find_all(): 返回所有匹配的元素列表select_one() & select(): CSS 选择器 3. 访问标签内容text 属性: 获取标签内纯文本get_t…...
宝塔面板开始ssl后,使用域名访问不了后台管理
宝塔面板后台开启ssl访问后,用的证书是其他第三方颁发的证书 再使用 域名/xxx 的形式:https://域名:xxx/xxx 访问后台,结果出现如下,不管使用 http 还是 https 的路径访问都进不后台管理 这个时候可以使用 https://ip/xxx 的方式来…...
大一计算机的自学总结:前缀树(字典树、Trie树)
前言 前缀树,又称字典树,Trie树,是一种方便查找前缀信息的数据结构。 一、字典树的实现 1.类描述实现 #include <bits/stdc.h> using namespace std;class TrieNode { public:int pass0;int end0;TrieNode* nexts[26]{NULL}; };Tri…...
docker 安装的open-webui链接ollama出现网络错误
# 故事背景 部署完ollama以后,使用谷歌浏览器的插件Page Assist - 本地 AI 模型的 Web UI 可以比较流畅的使用DeepSeek,但是只局限于个人使用,想分享给更多的小伙伴使用,于是打算使用open-webui 来管理用户,经官网推荐…...
未来游戏:当人工智能重构虚拟世界的底层逻辑
未来游戏:当人工智能重构虚拟世界的底层逻辑 在《赛博朋克2077》夜之城的霓虹灯下,玩家或许已经注意到酒吧里NPC开始出现微表情变化;在《艾尔登法环》的开放世界中,敌人的战术包抄逐渐显露出类人智慧。这些细节预示着游戏产业正站…...
Redis集群主从切换源码解读
一切的开始 打开Redis5.0.5的源码中server.c,找到如下代码,这里运行了一个定时任务,每隔100毫秒执行一次。 /* Run the Redis Cluster cron. *//** 每隔100毫秒执行一次* 要求开启集群模式*/run_with_period(100) {if (server.cluster_enabl…...
javacv将mp4视频切分为m3u8视频并播放
学习链接 ffmpeg-demo 当前对应的 gitee代码 Spring boot视频播放(解决MP4大文件无法播放),整合ffmpeg,用m3u8切片播放。 springboot 通过javaCV 实现mp4转m3u8 上传oss 如何保护会员或付费视频?优酷是怎么做的? - HLS 流媒体加密 ffmpe…...
Golang学习笔记_33——桥接模式
Golang学习笔记_30——建造者模式 Golang学习笔记_31——原型模式 Golang学习笔记_32——适配器模式 文章目录 桥接模式详解一、桥接模式核心概念1. 定义2. 解决的问题3. 核心角色4. 类图 二、桥接模式的特点三、适用场景1. 多维度变化2. 跨平台开发3. 动态切换实现 四、与其他…...
蜂鸟视图发布AI智能导购产品:用生成式AI重构空间服务新范式
在人工智能技术飞速发展的今天,北京蜂鸟视图正式宣布推出基于深度求索(DeepSeek)等大模型的《AI智能导购产品》,通过生成式AI与室内三维地图的深度融合,重新定义空间场景的智能服务体验。 这一创新产品将率先应用于购物…...
AI服务器散热黑科技:让芯片“冷静”提速
AI 服务器为何需要散热黑科技 在人工智能飞速发展的当下,AI 服务器作为核心支撑,作用重大。从互联网智能推荐,到医疗疾病诊断辅助,从金融风险预测,到教育个性化学习,AI 服务器广泛应用,为各类复…...
数据结构-栈、队列、哈希表
1栈 1.栈的概念 1.1栈:在表尾插入和删除操作受限的线性表 1.2栈逻辑结构: 线性结构(一对一) 1.3栈的存储结构:顺序存储(顺序栈)、链表存储(链栈) 1.4栈的特点: 先进后出(fisrt in last out FILO表),后进先出 //创建栈 Stacklist create_stack() {Stacklist lis…...
安装海康威视相机SDK后,catkin_make其他项目时,出现“libusb_set_option”错误的解决方法
硬件:雷神MIX G139H047LD 工控机 系统:ubuntu20.04 之前运行某项目时,处于正常状态。后来由于要使用海康威视工业相机(型号:MV-CA013-21UC),便下载了并安装了该相机的SDK,之后运行…...
【鸿蒙】ArkUI-X跨平台问题集锦
系列文章目录 【鸿蒙】ArkUI-X跨平台问题集锦 文章目录 系列文章目录前言问题集锦1、HSP,HAR模块中 无法引入import bridge from arkui-x.bridge;2、CustomDialog 自定义弹窗中的点击事件在Android 中无任何响应;3、调用 buildRouterMode() 路由跳转页面前…...
大模型驱动的业务自动化
大模型输出token的速度太低且为统计输出,所以目前大模型主要应用在toP(人)的相关领域;但其智能方面的优势又是如此的强大,自然就需要尝试如何将其应用到更加广泛的toM(物理系统、生产系统)领域中…...
MFC内存泄露
1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...
python/java环境配置
环境变量放一起 python: 1.首先下载Python Python下载地址:Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个,然后自定义,全选 可以把前4个选上 3.环境配置 1)搜高级系统设置 2…...
YSYX学习记录(八)
C语言,练习0: 先创建一个文件夹,我用的是物理机: 安装build-essential 练习1: 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件,随机修改或删除一部分,之后…...
在四层代理中还原真实客户端ngx_stream_realip_module
一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡(如 HAProxy、AWS NLB、阿里 SLB)发起上游连接时,将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后,ngx_stream_realip_module 从中提取原始信息…...
基础测试工具使用经验
背景 vtune,perf, nsight system等基础测试工具,都是用过的,但是没有记录,都逐渐忘了。所以写这篇博客总结记录一下,只要以后发现新的用法,就记得来编辑补充一下 perf 比较基础的用法: 先改这…...
MySQL 8.0 OCP 英文题库解析(十三)
Oracle 为庆祝 MySQL 30 周年,截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始,将英文题库免费公布出来,并进行解析,帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...
【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统
目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索(基于物理空间 广播范围)2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...
如何在网页里填写 PDF 表格?
有时候,你可能希望用户能在你的网站上填写 PDF 表单。然而,这件事并不简单,因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件,但原生并不支持编辑或填写它们。更糟的是,如果你想收集表单数据ÿ…...
【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习
禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...
安卓基础(aar)
重新设置java21的环境,临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的: MyApp/ ├── app/ …...
