PCA的数学原理(经典)

Sklearn 机器学习 数据降维PCA 自己实现PCA降维算法 PCA(主成分分析)的原理与实现方法。 阅读详情

PCA(Principal Component Analysis)是一种常用的数据分析方法。PCA通过线性变换将原始数据变换为一组各维度线性无关的表示,可用于提取数据的主要特征分量,常用于高维数据的降维。网上关于PCA的文章有很多,但是大多数只描述了PCA的分析过程,而没有讲述其中的原理。这篇文章的目的是介绍PCA的基本数学原理,帮助读者了解PCA的工作机制是什么。

当然我并不打算把文章写成纯数学文章,而是希望用直观和易懂的方式叙述PCA的数学原理,所以整个文章不会引入严格的数学推导。希望读者在看完这篇文章后能更好的明白PCA的工作原理。

数据的向量表示及降维问题

一般情况下,在数据挖掘和机器学习中,数据被表示为向量。例如某个淘宝店2012年全年的流量及交易情况可以看成一组记录的集合,其中每一天的数据是一条记录,格式如下:

(日期, 浏览量, 访客数, 下单数, 成交数, 成交金额)

其中“日期”是一个记录标志而非度量值,而数据挖掘关心的大多是度量值,因此如果我们忽略日期这个字段后,我们得到一组记录,每条记录可以被表示为一个五维向量,其中一条看起来大约是这个样子:

(500,240,25,13,2312.15)?(500,240,25,13,2312.15)T
。则在二维平面上A和B可以用两条发自原点的有向线段表示,见下图:

好,现在我们从A点向B所在直线引一条垂线。我们知道垂线与B的交点叫做A在B上的投影,再设A与B的夹角是a,则投影的矢量长度为|A|cos(a)|A|cos(a)

也就是说,设向量B的模为1,则A与B的内积值等于A向B所在直线投影的矢量长度!这就是内积的一种几何解释,也是我们得到的第一个重要结论。在后面的推导中,将反复使用这个结论。

基

下面我们继续在二维空间内讨论向量。上文说过,一个二维向量可以对应二维笛卡尔直角坐标系中从原点出发的一个有向线段。例如下面这个向量:

在代数表示方面,我们经常用线段终点的点坐标表示向量,例如上面的向量可以表示为(3,2),这是我们再熟悉不过的向量表示。

不过我们常常忽略,只有一个(3,2)本身是不能够精确表示一个向量的。我们仔细看一下,这里的3实际表示的是向量在x轴上的投影值是3,在y轴上的投影值是2。也就是说我们其实隐式引入了一个定义:以x轴和y轴上正方向长度为1的向量为标准。那么一个向量(3,2)实际是说在x轴投影为3而y轴的投影为2。注意投影是一个矢量,所以可以为负。

更正式的说,向量(x,y)实际上表示线性组合:

x(1,0)?+y(0,1)?x(1,0)T+y(0,1)T

不难证明所有二维向量都可以表示为这样的线性组合。此处(1,0)和(0,1)叫做二维空间中的一组基。

所以,要准确描述向量,首先要确定一组基,然后给出在基所在的各个直线上的投影值,就可以了。只不过我们经常省略第一步,而默认以(1,0)和(0,1)为基。

我们之所以默认选择(1,0)和(0,1)为基,当然是比较方便,因为它们分别是x和y轴正方向上的单位向量,因此就使得二维平面上点坐标和向量一一对应,非常方便。但实际上任何两个线性无关的二维向量都可以成为一组基,所谓线性无关在二维平面内可以直观认为是两个不在一条直线上的向量。

例如,(1,1)和(-1,1)也可以成为一组基。一般来说,我们希望基的模是1,因为从内积的意义可以看到,如果基的模是1,那么就可以方便的用向量点乘基而直接获得其在新基上的坐标了!实际上,对应任何一个向量我们总可以找到其同方向上模为1的向量,只要让两个分量分别除以模就好了。例如,上面的基可以变为(12√,12√)(12,12)。下图给出了新的基以及(3,2)在新基上坐标值的示意图:

另外这里要注意的是,我们列举的例子中基是正交的(即内积为0,或直观说相互垂直),但可以成为一组基的唯一要求就是线性无关,非正交的基也是可以的。不过因为正交基有较好的性质,所以一般使用的基都是正交的。

基变换的矩阵表示

下面我们找一种简便的方式来表示基变换。还是拿上面的例子,想一下,将(3,2)变换为新基上的坐标,就是用(3,2)与第一个基做内积运算,作为第一个新的坐标分量,然后用(3,2)与第二个基做内积运算,作为第二个新坐标的分量。实际上,我们可以用矩阵相乘的形式简洁的表示这个变换:

(1/2‾√−1/2‾√1/2‾√1/2‾√)(32)=(5/2‾√−1/2‾√)(1/21/2−1/21/2)(32)=(5/2−1/2)

我们可以看下五条数据在平面直角坐标系内的样子:

现在问题来了:如果我们必须使用一维来表示这些数据,又希望尽量保留原始的信息,你要如何选择?

通过上一节对基变换的讨论我们知道,这个问题实际上是要在二维平面中选择一个方向,将所有数据都投影到这个方向所在直线上,用投影值表示原始记录。这是一个实际的二维降到一维的问题。

那么如何选择这个方向(或者说基)才能尽量保留最多的原始信息呢?一种直观的看法是:希望投影后的投影值尽可能分散。

以上图为例,可以看出如果向x轴投影,那么最左边的两个点会重叠在一起,中间的两个点也会重叠在一起,于是本身四个各不相同的二维点投影后只剩下两个不同的值了,这是一种严重的信息丢失,同理,如果向y轴投影最上面的两个点和分布在x轴上的两个点也会重叠。所以看来x和y轴都不是最好的投影选择。我们直观目测,如果向通过第一象限和第三象限的斜线投影,则五个点在投影后还是可以区分的。

下面,我们用数学方法表述这个问题。

方差

上文说到,我们希望投影后投影值尽可能分散,而这种分散程度,可以用数学上的方差来表述。此处,一个字段的方差可以看做是每个元素与字段均值的差的平方和的均值,即:

Var(a)=1m∑i=1m(ai−μ)2Var(a)=1m∑i=1m(ai−μ)2
,则C是一个对称矩阵,其对角线分别个各个字段的方差,而第i行j列和j行i列元素相同,表示i和j两个字段的协方差。

协方差矩阵对角化

根据上述推导,我们发现要达到优化目前,等价于将协方差矩阵对角化:即除对角线外的其它元素化为0,并且在对角线上将元素按大小从上到下排列,这样我们就达到了优化目的。这样说可能还不是很明晰,我们进一步看下原矩阵与基变换后矩阵协方差矩阵的关系:

设原始数据矩阵X对应的协方差矩阵为C,而P是一组基按行组成的矩阵,设Y=PX,则Y为X对P做基变换后的数据。设Y的协方差矩阵为D,我们推导一下D与C的关系:

D=====1mYY?1m(PX)(PX)?1mPXX?P?P(1mXX?)

GEE遥感利器:主成分分析(PCA)原理与实战,一键实现降维处理! 主成分分析(PCA)是遥感影像处理的经典方法,通过降维去除冗余信息,提取关键特征。今天我们将深入探讨PCA的数学原理,并在GEE中实现这一强大工具。 阅读详情

相关推荐

【Python机器学习】主成分分析(PCA):高维数据的“瘦身术“

主成分分析(PCA)的历史可以追溯到1901年,当时Karl Pearson首次提出了这个概念。在计算机还不存在的年代,PCA是一个纯粹的数学构想,用来简化多变量数据的分析。几十年后,当计算机出现时,PCA成为了数据分析中最早实现的算法之一。从那时起,超过一个世纪的发展中,PCA一直保持着其核心的理论框架和实用价值,这本身就是对这个方法深刻科学性的证明。在现代深度学习时代,许多人可能会认为PCA已经过时了。但事实恰好相反。

nmdbbzcl的博客 981

机器学习——PCA

主成分分析(Principal Component Analysis,简称PCA)是一种用于数据降维的技术,旨在通过线性变换将原始数据映射到一个新的坐标系中。在这个新的坐标系中,数据的方差被最大化,这意味着我们将保留尽可能多的原始数据信息。PCA的关键思想是通过找到数据中的主成分,将数据在这些主成分上进行投影,从而实现数据的降维。首先,对原始数据进行标准化处理,确保每个特征的均值为零,标准差为一。这一步骤是为了消除不同特征之间的量纲差异,使得每个特征对PCA的贡献相对均等。

m0_63038557的博客 2943

终于明白PCA降维的数学原理了

PCA(Principal Component Analysis)作为降维中最经典的方法,至今已有100多年的历史,它属于一种线性、非监督、全局的降维算法,是在面试中经常被问到的问题。机器学习中经常要处理成千上万甚至几十万维的数据在这种情况下,机器学习的资源消耗是不可接受的,因此我们必须对数据进行降维。但是降维必然意味着信息的丢失,不过鉴于实际数据本身常常存在的相关性,我们可以想办法在降维的同时将信息的损失尽量降低。

捡起一束光的博客 4263

数学建模笔记—— 主成分分析(PCA)

主成分分析是对于原先提出的所有变量,将重复的变量(关系紧密的变量)删去多余,建立尽可能少的新变量,使得这些新变量是两两不相关的,且这些新变量在反映课题的信息方面尽可能保持原有的信息。因此,人们会很自然地想到,能否在相关分析的基础上,用较少的新变量代替原来较多的旧变量,而且使这些较少的新变量尽可能多地保留原来变量所反映的信息?我们可以把多种指标中综合成几个少数的综合指标,做为分类的型号,将十几项指标综合成3项指标,一项是反映长度的指标,一项是反映胖瘦的指标,一项是反映特殊体型的指标。怎么找到新的维度呢?

lbm666666的博客 6015

基于Agent与大模型的性能测试脚本自动化生成实践

性能测试是软件质量保障的关键环节,其核心在于模拟真实用户负载以评估系统在高并发下的表现。传统脚本编写依赖人工,效率低下且易出错。通过引入智能体(Agent)与大语言模型(LLM)技术,可实现从自然语言描述或接口文档到可执行脚本的自动化转换。Agent负责任务规划与工具调用,LLM则提供强大的意图理解与代码生成能力,二者结合能精准解析测试场景、自动处理参数化与接口关联等复杂逻辑。该技术方案显著提升了脚本生成效率与准确性,尤其适用于持续集成、海量接口回归等需要快速构建测试场景的工程实践。本文以JMeter和Lo

weixin_28718769的博客 260

ubuntu24.04+RTX5090D 显卡驱动安装

本文详细介绍了在Ubuntu系统中更新内核、安装NVIDIA驱动的步骤。首先,通过mainline工具安装新版内核,并确保GCC版本兼容。接着,在无桌面环境下配置TTY模式,解决中文显示问题。然后,禁用默认的nouveau驱动,安装NVIDIA驱动,并选择开源驱动以避免黑屏问题。最后,重新启用图形界面,并通过测试软件验证显卡功能。整个过程涵盖了内核更新、驱动安装、TTY配置及图形界面恢复等多个关键步骤,适合需要手动配置NVIDIA驱动的用户参考。

妖米的博客 4677

PCA 异常检测

PCA 异常检测

Mark_Australia的博客 4126

避开这5个坑!STC8H DMA串口通信的实战避坑指南(115200波特率实测)

本文深入解析了STC8H单片机利用DMA实现稳定全双工串口通信的实战要点。针对115200高波特率场景,详细拆解了DMA-UART架构、关键寄存器配置、时钟精度计算、缓冲区管理及中断协同等核心环节,并提供了具体的避坑指南和调试方法,帮助开发者构建高效可靠的通信链路。

melon的博客 675

PCA(主成分分析)的数学原理(之前一门课程写的报告,现在发上来...)

1.背景介绍 一般情况下,在数据挖掘和机器学习等数据分析领域中,数据都被表示为向量。众所周知,很多机器学习算法的复杂度和数据的维数有着密切关系,甚至与数据维数呈指数级别关联。然而实际机器学习中处理的数据可达成千上万甚至几十万维,在这种情况下,算法的资源消耗是不可接受的,因此我们必须对数据进行降维。PCA(Principal Component Analysis),即所谓的主成分分析,...

lovemylife1234的博客 2430

ArcGIS中的Python入门知识点整理

关于Arcpy大家应该都比较熟悉,Python用的好,数据处理快又好!在ArcGIS中ArcPy是一个以成功的arcgisscripting模块为基础并继承了arcgisscripting功能进而构建而成的站点包。目的是为以实用高效的方式通过Python执行地理数据分析、数据转换、数据管理和地图自动化创建基础。ArcPy提供了丰富纯正的Python体验,具有代码自动完成功能。今天我们就看看关于Arcpy相关处理的使用,通过一些简单代码与大家一起认识Arcpy。

xjt921122的博客 1772

Linux 音频驱动(六) ALSA音频驱动之PCM Write数据传递过程

目录1. 前言2. PCM Data Flow3. 总结 1. 前言 本文,我们将以回放(Playback,播放音频)为例,讲解PCM Data是如何从用户空间到内核空间,最后传递到Codec。 在Linux 音频驱动(一) ASoC音频框架简介中,我们给出了回放(Playback)PCM数据流示意图: 对于Linux来说,由于分为 user space 和kernel space,而且两者之间不能随便互相访问。因此用户如果播放音频,则需要调用copy_from_user()将用户数据从user spa

_Modest_的博客 1万+

PCA的数学原理(经典,正常公式版)

PCA(Principal Component Analysis)是一种常用的数据分析方法。PCA通过线性变换将原始数据变换为一组各维度线性无关的表示,可用于提取数据的主要特征分量,常用于高维数据的降维。网上关于PCA的文章有很多,但是大多数只描述了PCA的分析过程,而没有讲述其中的原理。这篇文章的目的是介绍PCA的基本数学原理,帮助读者了解PCA的工作机制是什么。当然我并不打算把文章写成纯数学文...

Tele_Anti_Nomy的博客 3632

如何将TDengine集成到Thingsboard?

1 概述 ThingsBoard是用于数据收集、处理、可视化和设备管理的开源物联网平台。它通过行业标准的物联网协议MQTT、CoAP和HTTP实现设备连接,并支持云和本地部署。 ThingsBoard迄今没有导入专业的时序数据库应用,用户可选择的只有PostgreSQL和Cassandra。虽然针对PostgreSQL引入了TimeScale插件,但由于其不是按照宽表的方式组织数据记录,TimeScale的优势根本发挥不出来。总之,这两种数据库不具备高效的数据吞吐能力。 而且,Thingsboard在

Wearable_device的博客 4767

机器学习经典之PCA的数学原理(很值得读)

PCA(Principal Component Analysis)是一种常用的数据分析方法。PCA通过线性变换将原始数据变换为一组各维度线性无关的表示,可用于提取数据的主要特征分量,常用于高维数据的降维。网上关于PCA的文章有很多,但是大多数只描述了PCA的分析过程,而没有讲述其中的原理。这篇文章的目的是介绍PCA的基本数学原理,帮助读者了解PCA的工作机制是什么。 当然我并不打算把文章写成

野孩子的专栏 3414

看懂特斯拉IMU底层逻辑,才懂农业机器人不可替代的核心技术壁垒

在自动驾驶与具身智能赛道,特斯拉彻底重构了IMU(惯性测量单元)的技术定位,打破行业“IMU仅为辅助补盲配件”的固有认知,将其从底盘附属硬件升级为纯视觉感知体系的物理核心基座。依托500–1000Hz超高刷新率、无外部依赖的惯性感知能力、端到端神经网络融合架构,特斯拉实现了“视觉感知环境、IMU定义运动”的技术闭环,摆脱对激光雷达、高精地图、卫星定位的强依赖。这套技术逻辑落地农业机器人赛道,不再是技术优化,而是规模化落地的生存刚需。城市自动驾驶属于结构化稳定场景,IMU仅作误差修正的锦上添花;

getusushu的博客 50

第七篇:A133 Android 10 触摸提示音过大

描述: 开启触摸提示音功能之后,客户反馈触摸提示音过大,需要改小。 解决方案: 看代码注释,在framework下搜索方法即可。 /** @see AudioManager#playSoundEffect(int) */ public void playSoundEffect(int effectType) { playSoundEffectVolume(effectType, -1.0f); } /** @see AudioManager#playSoundEff

qq_33088619的博客 1697

转载pca的数学原理(看别人转载的格式不太好看,就自己转一下,经典保留)

from:http://blog.codinglabs.org/articles/pca-tutorial.html  PCA(Principal Component Analysis)是一种常用的数据分析方法。PCA通过线性变换将原始数据变换为一组各维度线性无关的表示,可用于提取数据的主要特征分量,常用于高维数据的降维。网上关于PCA的文章有很多,但是大多数只描述了PCA的分析过程,而没有讲述其中

小猪观察家 513

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

机器学习实战(8):降维技术——主成分分析(PCA)

随着特征维度的增加,数据的稀疏性会急剧上升,导致模型训练变得更加困难。这种现象被称为维度灾难(Curse of Dimensionality)。高维数据不仅增加了计算复杂度,还可能导致过拟合。因此,降维技术成为解决这一问题的重要工具。图1:维度灾难示意图(图片描述:三维空间中展示了低维数据点的分布较为密集,而高维空间中数据点变得稀疏,难以捕捉模式。MNIST 数据集包含 70,000 张 28x28 像素的手写数字图像(0-9)。每张图像被展平为 784 维向量。

yweng18的博客 2366

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

降维系列之 PCA 主成分分析

写这个系列主要目的是巩固和总结数学知识,也是希望以后查阅起来方便。降维方法是研究生期间我所在的组研究过很久的一套内容,我虽然没有搞这个方向,但是也受了很多熏陶。研一刚接触的时候老师讲啊讲,其实也没讲很细,我基本只做了笔记,啥都没懂,数学基础欠缺太多。后来慢慢一一补齐,总算是大概能理解下来,但还是有些许地方心中存疑。到现在熟悉了这些东西的基本思路,也看了很多论文和数学,就比较熟练了。一切就从组内的入...

BigYouYou 1116

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

《机器学习》PCA数据降维 推导、参数讲解、代码演示及分析

主成分分析是一种经典的无监督降维方法,用于将高维数据集投影到一个较低维的子空间中。PCA的目标是找到一个新的坐标系,其中新的轴被称为“主成分”,这些主成分是原始数据中方差最大的方向。通过选择较少的主成分,可以保留数据集中的大部分信息,并且可以减少特征的数量,从而降低计算复杂度。

wx_AHao1004Y的博客 2515

主成分分析(PCA)详解

在数据分析、机器学习和图像处理等领域,是一种非常经典又高效的降维技术。虽然它在应用层面只需要几行代码,但它背后的数学思想却非常优雅且值得学习。

boating06的博客 932

机器学习中的PCA降维

主成分分析(Principal Component Analysis, PCA)作为一种经典的降维技术,能够有效地将高维数据投影到低维空间,同时保留数据的主要特征。本文将详细介绍PCA的数学原理、Python实现方法,并分析其优缺点,帮助读者全面理解并正确应用这一强大的降维技术。PCA的核心思想是通过正交变换将一组可能存在相关性的变量转换为一组线性不相关的变量(主成分),这些主成分按照方差从大到小排列。第一个主成分对应于数据方差最大的方向,第二个主成分对应于与第一个主成分正交且方差次大的方向,以此类推。

2301_80216997的博客 1862

机器学习之PCA主成分分析详解

将原始数据按列组成n行m列矩阵X将X的每一行(代表一个属性字段)进行零均值化(去平均值),即减去这一行的均值求出协方差矩阵 C= 1/mXXT求出协方差矩阵的特征值及对应的特征向量将特征向量按对应特征值大小从上到下按行排列成矩阵,取前k行组成矩阵P(保留最大的k各特征向量)Y=PX 即为降维到K维后的数据PCA作为一种经典且强大的降维工具,在机器学习领域有着广泛的应用。理解其数学原理和实现细节,能够帮助我们在实际项目中更好地使用它。

zdx2585503940的博客 2930

主成分分析(Principal Component Analysis, PCA)是一种经典的无监督学习算法,用于降维和特征提取,广泛应用于数据压缩、可视化、噪声过滤等场景

C# 中,Accord.NET 提供高效的 PCA 实现,结合 OxyPlot 可视化结果,适合 MES、WMS、APS 等场景。在制造领域(如MES、WMS、APS、上位机、生产制造、设备制造),PCA可用于降维传感器数据、库存特征或设备性能指标,以简化分析、提高计算效率或可视化高维数据。以下是详细的实现步骤和代码示例,针对 MES 场景(降维传感器数据)。以下是PCA的深入讲解,包括数学原理、实现步骤、C#代码示例(基于Accord.NET框架),以及在制造领域的具体应用、成功案例和开源资料推荐。

专注于前沿技术的探索与实践,热衷于从代码逻辑、架构设计到行业应用等多维度深挖技术本质。期待在技术之路上与你共同成长~ 1363

主成分分析(PCA)

深度解析主成分分析(PCA),从数学原理到代码实践全覆盖,结合人脸识别、金融分析等跨领域案例,揭秘特征脸算法与SVD的数学等价性,提供sklearn实战代码和可视化技巧,助你掌握降维核心技能。

Shockang的博客 1473
上一篇: pytorch小例子mnist
下一篇: pytorch mnist的auto encoder
SoyCoder
博客等级 码龄9年 12粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值