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

别再只懂PCA了!用Python手写LDA,从鸢尾花分类实战看监督降维的威力

别再只懂PCA了用Python手写LDA从鸢尾花分类实战看监督降维的威力鸢尾花数据集在机器学习领域就像Hello World之于编程——经典、简洁却蕴含丰富可能性。当大多数人用PCA处理这类数据时我们往往忽略了数据本身携带的宝贵标签信息。LDA线性判别分析正是那个被低估的监督学习神器它能将类别标签转化为降维动力在投影后空间中让不同类别的数据点尽可能分开。今天我们不依赖scikit-learn的LinearDiscriminantAnalysis黑箱而是从零开始用Python实现LDA算法核心逻辑。通过可视化对比PCA与LDA在鸢尾花数据上的表现差异你会直观理解为什么在分类任务中有监督的LDA往往比无监督的PCA更具优势。本文代码将全程使用NumPy进行矩阵运算并配合Matplotlib动态展示降维过程适合已经掌握PCA基础想进一步提升的算法实践者。1. 环境准备与数据洞察工欲善其事必先利其器。我们使用Jupyter Notebook作为实验环境确保可以交互式地观察每一步的数据变化。首先导入必要的库import numpy as np import matplotlib.pyplot as plt from sklearn.datasets import load_iris from sklearn.decomposition import PCA %matplotlib inline加载鸢尾花数据集并初步观察数据结构iris load_iris() X iris.data # 150个样本4个特征萼片长宽、花瓣长宽 y iris.target # 3个类别山鸢尾、变色鸢尾、维吉尼亚鸢尾 feature_names iris.feature_names target_names iris.target_names print(f特征矩阵形状{X.shape}) print(f类别分布{dict(zip(*np.unique(y, return_countsTrue)))})注意鸢尾花数据集的特征量纲基本一致厘米单位实践中若特征量纲差异大需先进行标准化处理。通过pairplot观察原始特征空间中的分布import seaborn as sns iris_df sns.load_dataset(iris) sns.pairplot(iris_df, huespecies, palettehusl) plt.show()从散点矩阵可以清晰看到花瓣长度和宽度对类别区分度最高山鸢尾setosa与其他两类线性可分变色鸢尾versicolor和维吉尼亚鸢尾virginica存在部分重叠2. LDA算法核心实现LDA的核心思想是找到投影方向使得类间散布最大化同时类内散布最小化。我们需要依次计算以下关键矩阵2.1 计算类内散布矩阵Within-class scatter对于每个类别计算其协方差矩阵并加权求和def compute_within_scatter(X, y): n_features X.shape[1] S_W np.zeros((n_features, n_features)) for c in np.unique(y): X_c X[y c] mean_c X_c.mean(axis0) # 对每个特征中心化后计算协方差 cov_c (X_c - mean_c).T (X_c - mean_c) S_W cov_c return S_W S_W compute_within_scatter(X, y)2.2 计算类间散布矩阵Between-class scatter衡量各类均值与全局均值的差异def compute_between_scatter(X, y): overall_mean X.mean(axis0) n_features X.shape[1] S_B np.zeros((n_features, n_features)) for c in np.unique(y): X_c X[y c] mean_c X_c.mean(axis0) n_c X_c.shape[0] # 计算均值差异的外积 diff (mean_c - overall_mean).reshape(-1, 1) S_B n_c * (diff diff.T) return S_B S_B compute_between_scatter(X, y)2.3 求解广义特征值问题LDA的最优投影方向对应矩阵$S_W^{-1}S_B$的前k大特征值对应的特征向量def lda(X, y, n_components2): S_W compute_within_scatter(X, y) S_B compute_between_scatter(X, y) # 计算广义特征分解 eig_vals, eig_vecs np.linalg.eig(np.linalg.inv(S_W) S_B) # 取实部并按特征值降序排序 sorted_idx np.argsort(eig_vals.real)[::-1] eig_vals eig_vals[sorted_idx].real eig_vecs eig_vecs[:, sorted_idx].real # 选择前n_components个特征向量 W eig_vecs[:, :n_components] return X W X_lda lda(X, y)提示实际应用中应添加正则化项防止$S_W$奇异如S_W 1e-6 * np.eye(S_W.shape[0])3. 可视化对比PCA与LDA为了直观理解两种降维方法的差异我们并排展示它们的二维投影结果# PCA降维 pca PCA(n_components2) X_pca pca.fit_transform(X) # 绘制结果对比 plt.figure(figsize(12, 5)) plt.subplot(121) plt.scatter(X_pca[:, 0], X_pca[:, 1], cy, cmapviridis) plt.title(PCA Projection) plt.xlabel(PC1 (解释方差: %.2f%%) % (pca.explained_variance_ratio_[0]*100)) plt.ylabel(PC2 (解释方差: %.2f%%) % (pca.explained_variance_ratio_[1]*100)) plt.subplot(122) plt.scatter(X_lda[:, 0], X_lda[:, 1], cy, cmapviridis) plt.title(LDA Projection) plt.xlabel(LD1) plt.ylabel(LD2) plt.tight_layout() plt.show()关键观察点PCA方向沿最大方差方向完全忽略类别标签LDA方向最大化类间距离/类内距离比值类别分离更明显在PCA结果中versicolor和virginica仍有较多重叠在LDA结果中三个类别几乎线性可分4. 数学原理与工程实践的结合理解LDA背后的数学原理能帮助我们在实际应用中做出更好决策。以下是几个关键问题的工程思考4.1 为什么LDA在分类任务中表现更好LDA的优化目标直接服务于分类——最大化类别可分性。其目标函数可以表示为$$ J(w) \frac{w^T S_B w}{w^T S_W w} $$这个比值被称为Fisher准则通过求解该优化问题我们得到的投影方向天然适合后续分类。4.2 何时选择LDA而非PCA决策依据可参考以下对比表格特性PCALDA监督/无监督无监督有监督优化目标最大方差方向最大类别分离方向适用阶段探索性分析、特征提取分类任务前的降维类别重叠处理不考虑类别信息显式优化类别分离度计算复杂度$O(p^2n p^3)$$O(p^2n p^3)$特征相关性处理通过协方差矩阵自动处理同样有效处理4.3 实际应用中的注意事项小样本问题当样本数远小于特征数时$S_W$可能奇异。解决方案包括添加正则化项如L2正则化先使用PCA降维再应用LDA多分类问题LDA天然支持多分类最多可降至类别数-1维非线性扩展对于非线性可分数据可考虑核LDAKernel LDA等变体# 正则化LDA示例 def regularized_lda(X, y, alpha0.01, n_components2): S_W compute_within_scatter(X, y) S_B compute_between_scatter(X, y) # 添加正则化项 S_W_reg S_W alpha * np.eye(S_W.shape[0]) eig_vals, eig_vecs np.linalg.eig(np.linalg.inv(S_W_reg) S_B) sorted_idx np.argsort(eig_vals.real)[::-1] W eig_vecs[:, sorted_idx].real[:, :n_components] return X W5. 进阶应用与性能优化将我们的LDA实现应用于实际分类任务对比原始特征与降维后特征的分类性能from sklearn.model_selection import train_test_split from sklearn.linear_model import LogisticRegression from sklearn.metrics import accuracy_score # 原始特征分类 X_train, X_test, y_train, y_test train_test_split(X, y, test_size0.2) lr_raw LogisticRegression(max_iter200) lr_raw.fit(X_train, y_train) raw_acc accuracy_score(y_test, lr_raw.predict(X_test)) # LDA降维后分类 X_lda lda(X, y) # 使用全部数据计算投影矩阵 X_train_lda lda(X_train, y_train) X_test_lda X_test np.linalg.pinv(X_train.T) X_train_lda # 近似投影 lr_lda LogisticRegression(max_iter200) lr_lda.fit(X_train_lda, y_train) lda_acc accuracy_score(y_test, lr_lda.predict(X_test_lda)) print(f原始特征准确率{raw_acc:.2%}) print(fLDA降维后准确率{lda_acc:.2%})典型结果可能显示原始特征准确率~97%LDA降维后准确率~100%这验证了适当降维有时能提升模型性能因为消除了冗余和噪声在低维空间中数据更具可分性减少了过拟合风险6. 从鸢尾花到现实场景的迁移虽然我们以鸢尾花数据集为例但LDA的应用远不止于此。以下是一些典型应用场景人脸识别将人脸图像投影到判别空间Fisherfaces生物信息学基因表达数据分类文档分类文本数据降维后分类金融风控客户信用评分模型的特征处理在实现这些应用时有几个工程细节值得注意数据预处理流程缺失值处理 → 特征缩放 → 异常值处理 → LDA降维分类变量需要先进行适当编码计算效率优化对于大规模数据使用随机SVD近似计算利用GPU加速矩阵运算如CuPy库模型监控定期检查$S_W$的条件数防止数值不稳定监控降维后的类别可分性指标变化# 计算类别可分性指标 def separability_index(X_lda, y): overall_mean X_lda.mean(axis0) S_T (X_lda - overall_mean).T (X_lda - overall_mean) S_W compute_within_scatter(X_lda, y) return np.trace(S_T) / np.trace(S_W) print(LDA空间可分性指数, separability_index(X_lda, y))这个指数越大表示类别可分性越好。在实际项目中我们可以用它作为特征工程有效性的监控指标。

相关文章:

别再只懂PCA了!用Python手写LDA,从鸢尾花分类实战看监督降维的威力

别再只懂PCA了!用Python手写LDA,从鸢尾花分类实战看监督降维的威力 鸢尾花数据集在机器学习领域就像"Hello World"之于编程——经典、简洁却蕴含丰富可能性。当大多数人用PCA处理这类数据时,我们往往忽略了数据本身携带的宝贵标签信…...

构建本地语音智能体:基于Go与OpenClaw的实时交互系统

1. 项目概述:一个能听懂你说话的本地智能体伙伴如果你和我一样,对传统的、需要打字输入、反应迟缓的AI助手感到厌倦,总幻想着能有一个像电影《Her》里Samantha那样的智能伙伴,能用最自然的语音与你交流,甚至能帮你执行…...

算法题(回溯)

一、题目1、括号生成(LC 22)2、单词搜索(LC 79)二、题解1、括号生成(LC 22)(1)分析采用回溯的思想解决。递归方法包括 left、right、ans、path、n 五个核心参数,其中 lef…...

5分钟搞定Windows风扇控制:FanControl让你的电脑散热更智能更安静

5分钟搞定Windows风扇控制:FanControl让你的电脑散热更智能更安静 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_…...

GitHub 被分号击穿信任防线,AI 逆向工具敲响闭源系统安全警钟

GitHub 被分号击穿三层信任,AI 填平逆向护城河敲响闭源系统安全警钟 2026 年 3 月 4 日,GitHub 收到 Wiz 通过 Bug Bounty 提交的报告,报告描述的攻击入口极其简单:一条构造过的 git push,带一个 push option&#xff…...

如何免费获取B站8K高清视频:哔哩下载姬完整使用教程

如何免费获取B站8K高清视频:哔哩下载姬完整使用教程 【免费下载链接】downkyi 哔哩下载姬downkyi,哔哩哔哩网站视频下载工具,支持批量下载,支持8K、HDR、杜比视界,提供工具箱(音视频提取、去水印等&#xf…...

告别臃肿!Dell G15笔记本散热控制的轻量级开源替代方案

告别臃肿!Dell G15笔记本散热控制的轻量级开源替代方案 【免费下载链接】tcc-g15 Thermal Control Center for Dell G15 - open source alternative to AWCC 项目地址: https://gitcode.com/gh_mirrors/tc/tcc-g15 你是否厌倦了Dell原厂AWCC软件的缓慢响应和…...

别再只会拖模块了!手把手教你用Simulink封装打造自己的‘智能积木’

从零构建你的Simulink智能积木库:封装技术实战指南 在工程建模领域,Simulink就像数字世界的乐高积木箱,但大多数用户只停留在拖拽现成模块的初级阶段。真正的高手都掌握了一项核心技能——模块封装。这就像把一堆散乱的乐高零件组装成功能完整…...

从“狗的信”看FPGA设计:工程师的幽默隐喻与EDA实践

1. 从一封“狗的信”到工程师的幽默与哲思那天在EE Times上翻到一篇2011年的老文章,标题是《‘Dear God…’ (From the Dog)》,作者是Clive Maxfield。说实话,在一堆充斥着“3nm工艺”、“HBM4 PHY”、“AI Agent”这些硬核技术词汇的行业新闻…...

3分钟快速上手:SillyTavern如何让你成为AI聊天高手

3分钟快速上手:SillyTavern如何让你成为AI聊天高手 【免费下载链接】SillyTavern LLM Frontend for Power Users. 项目地址: https://gitcode.com/GitHub_Trending/si/SillyTavern 你是否厌倦了千篇一律的AI对话界面?想要一个能真正理解你需求、支…...

从愚人节玩笑到工程实践:四个软硬件结合的创意项目技术拆解

1. 从愚人节玩笑到工程师的创意沙盘每年四月一日,总有些介于荒诞与现实之间的“产品”构想冒出来,在工程师社区里引发一阵会心一笑。但如果你仔细琢磨,会发现这些看似玩笑的点子,往往藏着一丝对技术边界、用户体验乃至市场需求的犀…...

从零构建FreeRTOS认知:核心概念与实战框架精讲

1. 认识FreeRTOS:嵌入式系统的"交通指挥官" 第一次接触FreeRTOS时,我盯着文档里那些"任务"、"队列"、"调度器"之类的术语发懵,就像刚拿到驾照就被扔进了早高峰的十字路口。后来才发现,这…...

医疗软件开发框架Framewright:HIPAA合规与FHIR集成实践

1. 项目概述:一个为医疗软件量身定制的开发框架 如果你在医疗软件行业摸爬滚打过几年,一定会对开发过程中的那些“特殊要求”深有体会。这不仅仅是写个增删改查的CRUD应用那么简单,你得时刻绷紧神经,处理HIPAA合规、处理复杂的医学…...

直播人力成本居高不下?2026十大AI数字人直播平台推荐实现长效运营

引文: 2026年,直播电商的竞争早已从“拼人设”转向了“拼夜间值守效率”。据公开数据显示,AI数字人核心市场规模预计在2026年逼近千亿大关,其中“降本”和“长效运营”是众多商家投身高频无人直播的核心诉求。事实上,…...

AI智能体基准测试与差异分析:从评估原理到工程实践

1. 项目概述:当AI智能体学会“自我进化”最近在开源社区里,一个名为agentdiff的项目引起了我的注意。它的名字很有意思,直译过来是“智能体差异”。乍一看,你可能会联想到代码差异对比工具diff,但它的前缀agent又明确指…...

硬件工程师的办公室布局与效率系统:从工具管理到创意激发

1. 我的“极乐之穹”:一个硬件工程师的办公室漫游每次在博客里提到“极乐之穹”,指的都是我的办公室。偶尔,我也会聊起在四处搜罗时遇到并收入囊中的那些令人心动的电子设备或“艺术品”。时间久了,总有人让我拍点照片分享。问题在…...

Switch大气层系统完整教程:从零开始打造稳定自制系统环境

Switch大气层系统完整教程:从零开始打造稳定自制系统环境 【免费下载链接】Atmosphere-stable 大气层整合包系统稳定版 项目地址: https://gitcode.com/gh_mirrors/at/Atmosphere-stable 大气层系统(Atmosphere)是任天堂Switch平台上最…...

AMBA CHI协议Issue F更新解析与SoC设计优化

1. AMBA CHI Issue F协议更新深度解析AMBA CHI(Coherent Hub Interface)作为Arm体系结构中的关键一致性协议,在多核处理器设计中扮演着至关重要的角色。最新发布的Issue F版本对协议规范进行了多项重要修正,这些变更直接影响SoC设…...

航空摇篮长岛:从早期飞行到现代航空工业的技术演进与创新集群

1. 项目概述:从长岛的天空回望航空摇篮如果你对航空史感兴趣,或者像我一样,是个对机械、工程和人类如何突破物理极限着迷的工程师,那么“长岛”这个名字绝对绕不开。它不仅仅是纽约市旁边的一个地理名词,在航空史上&am…...

Instill Core:一站式AI应用构建平台,从数据处理到模型部署全流程实战

1. 项目概述:一站式AI应用构建平台如果你正在为如何将一堆杂乱无章的文档、图片、音频视频数据,转化为可供AI模型直接“食用”的格式而头疼,或者厌倦了在模型部署、API编排和数据处理工具之间反复横跳,那么Instill Core的出现&…...

Gemini深度研究模式权限与数据隔离机制全披露(含GDPR/等保2.0合规对照表)

更多请点击: https://intelliparadigm.com 第一章:Gemini深度研究模式权限与数据隔离机制全景概览 Gemini 深度研究模式(Deep Research Mode)是 Google 提供的高级推理能力,专为复杂多步信息检索与跨源分析设计。该模…...

多核架构下的实时高性能计算优化与实践

1. 多核架构下的实时高性能计算革命五年前还需要超级计算机才能解决的计算密集型问题,如今在嵌入式多核处理器上就能实时完成。这一技术突破正在彻底改变工程计算的格局。作为从业十余年的高性能计算工程师,我见证了从传统集群计算到现代多核实时计算的演…...

测试测量工程师必读:从EMC暗室到传感器选型的实战解析

1. 项目概述:一场关于测试测量知识的“周五挑战”又到了周五下午,手头的项目报告写得差不多了,代码也调试得告一段落,是不是感觉大脑需要换个频道放松一下?作为一名在电子工程和测试测量领域摸爬滚打了十几年的老工程师…...

Flutter 轻量存储方案介绍、区别、对比和使用场景

在 Flutter 项目中,本地存储通常可以分为几类: 第一类是轻量 Key-Value 存储,例如 shared_preferences、get_storage、mmkv,适合保存开关、配置、登录状态等简单数据。 第二类是安全存储,例如 flutter_secure_storage&…...

OpenClaw微信公众号插件wemp v2:双Agent路由与混合知识库实战

1. 项目概述:一个为OpenClaw设计的微信公众号插件如果你正在寻找一个能够将你的AI助手能力无缝接入微信公众号,实现自动化客服、智能问答甚至更复杂交互的解决方案,那么你找对地方了。wemp(WeChat MP Plugin)正是这样一…...

Gemini 辅助做创意写作:故事大纲、角色设定、世界观构建的 AI 协作

很多作者在创作卡壳时,其实不是“没有灵感”,而是缺一套可迭代的设计流程:大纲松散、角色像说明书、世界观看似宏大却前后不一致。2026 年的写作新趋势,是把 Gemini 当作“创作协作伙伴”而不是“代写引擎”,让它参与结…...

从‘幂的末尾’到RSA加密:一个模运算技巧如何贯穿编程竞赛与网络安全?

从竞赛编程到网络安全:模运算的双面人生 第一次在OpenJudge上遇到"幂的末尾"这道题时,我盯着屏幕上的数字发愣——计算a^b的最后三位数,这不就是求a^b模1000的结果吗?当时的我并不知道,这个看似简单的数学技…...

规格驱动营销:用AI代理与工程化思维打造Twitter增长自动化

1. 项目概述:一个为AI SaaS产品设计的Twitter营销自动化工具包如果你正在开发一款AI SaaS产品,并且已经为产品上线后的Twitter营销感到焦虑——不知道如何规划内容、如何与用户互动、如何将推文流量转化为实际用户——那么你很可能需要一套系统化的方法&…...

短视频矩阵系统技术选型:从自研到 SaaS 的成本与收益分析

前言在短视频运营规模化的今天,几乎所有有一定规模的团队都面临着一个关键的技术决策:是自研矩阵管理系统,还是选择成熟的 SaaS 解决方案。很多团队在初期都会选择自研,认为这样可以更好地满足个性化需求,但最终往往陷…...

仅剩72小时可获取的2026终极对比手册(含Prompt工程调优参数表、国产信创环境适配补丁包、等保2.0三级适配验证清单):ChatGPT与Gemini,你选错一个就多花237万年运维成本

更多请点击: https://intelliparadigm.com 第一章:ChatGPT与Gemini 2026年全面对比的基准定义与评估范式 为确保跨模型评估的科学性与可复现性,2026年主流AI基准已统一采用**多维动态评估范式(MDEP)**,该范…...