[Machine Learning]PCA 算法 python 实现

PCA降维 阅读详情

PCA , principal component analysis, 即主成分分析算法, 是机器学习中一种常用的对训练样本进行降维的算法。具体推导过程这里不再赘述。简而言之,它是根据训练样本的特征(feature)分布特性,找到特征方差最大的特征向量组k,来替代原有的特征数n作为训练样本的表征(基),来重新描述训练样本,从而达到减少特征(即降低维度)目的。
这里写图片描述

如上图所示,一组二维训练样本,其边界范围近似一个椭圆,该数据在椭圆长轴方向分布离散程度较大,即有较大的方差,而在短轴方向上分布离散程度较小,方差较小,可以理解为该组数据在长轴方向变化明显二短轴方向变化不明显,影响数据分布的主要因素是长轴方向分量,因此可以选择长轴方向的特征向量作为其新的基,将该数据投影到上面,即将原有的二维数据降低为一维数据。

PCA算法过程:
(1) Training set: x1,x2,...xm,其中xi∈Rn,即xi有n个特征,维度为n , 训练样本可以由一个m*n的矩阵X表示。
(2) 数据预处理,(feature scaling and mean normalization)
feature scaling :其中特征规模归一化不是必须项,如果训练样本不同特征之间差异较大,则有归一化的必要。如波士顿房价数据,特征”房间数目”和特征”房屋价格”差异较大,不利于后续的数据处理。因此可以用对应特征max-min value做为该特征归一化条件。若数据不同特征之间在数值意义上来说差异较小,则可以略过次步骤。
mean normalization: 这一操作必不可少,因为在后面的求协方差矩阵中均利用到了输入数据是零均值的这一特性。
(3)计算协方差矩阵 Sigma
Sigma=XT∗X
其中 XT∈Rn∗m,X∈Rm∗n , 因此协方差矩阵 Sigma∈Rn∗n
(4)奇异值分解
[U,S,V] = SVD(sigma)
其中,U即是我们所需要的特征向量组
U=[u1,u2,u3,...un],U∈Rn∗n,ui∈Rn∗1 , 根据我们所需降维数K,选取前K列特征向量,
Ureduce=U[:,:k],Ureduce∈Rn∗k
(5)原始数据投影在 Ureduce 上,得到降维后的数据,
Xreduce=UTreduce∗XT,UTreduce∈Rk∗n , 此时
Xreduce∈Rk∗m , 将结果转置一下,即可得到 Xreduce∈Rm∗k 。
提示,由于这里的算法都是用矩阵运算,而且过程较多, 因此在程序的调试过程中很容易混乱,因此建议调试的时候遇到问题可以利用矩阵的角标分析,例如协方差矩阵是n*m 维的矩阵与m*n维的矩阵相乘,结果应为n*n维, UTreduce 是k*n维, X是m*n维, Xreduce , 结果是k*m维, 而我们所需的结果是 Xreduce∈Rm∗k ,因此要将结果再转置一次。

(二) 数据恢复
由以上算法我们可以得到,
Xreduce=UTreduce∗X ,
根据线性代数知识,
Xapprox=Ureduce∗Xreduce , 当然由于这里的X并不完全等同于原始的数据X,因为在降维过程中数据有损失。因此用 Xapprox替代X ,并且可以用 1m∗∑i=1m||x(i)−x(i)approx||2 均方误差来作为一个衡量指标。

(三)多说一点
有时候面对某一数据集,我们在调参时并不知道主成分k值的选取多少合适,吴恩达教授给出了一个方法,通常来说,我们选取K的原则是应该满足 1m∗∑i=1m||x(i)−x(i)approx||21m∗∑i=1m||x(i)||2≤a ,根据不同模型的需要,例如a=0.01, 即 1m∗∑i=1m||x(i)−x(i)approx||21m∗∑i=1m||x(i)||2≤0.01 (1%), 即该PCA方法保留了数据99%的差异。a=0.05, 则该PCA方法保留了数据95%的差异。调参时选取不同的k值,根据模型的需要,以及评估指标,来选择所合适的k值。由于计算 1m∗∑i=1m||x(i)−x(i)approx||21m∗∑i=1m||x(i)||2≤0.01 比较复杂,而我们在前面计算协方差矩阵过程中,
[U,S,V] = SVD(sigma)
其中S是一个对角矩阵,主对角元素 [S11,S22,S33,Sii,...Snn] 可以证明
1m∗∑i=1m||x(i)−x(i)approx||21m∗∑i=1m||x(i)||2≤0.01 => 1 - ∑i=1kSii∑i=1nSii≤0.01 .
利用得到的S计算这一指标。

源代码如下
测试用例有两个,其中一个是人脸图像数据,每张人脸大小32*32。数据地址https://pan.baidu.com/s/1kVpGkWv#list/path=%2F另外一个测试用例是python sklearn库自带的鸢尾花数据集。在程序末尾我注释掉了,如果想要调试的话拿掉即可。
需要注意的一点是,如果用自己的数据集特别是图像数据,在求SVD的时候,有的计算机由于内存问题计算出的特征向量U 结果均为0, sklearn库中也有人脸数据集,大小是64*64,我使用的电脑在面对计算4096*4096矩阵奇异值分解时,得到的特征向量U均为0,费了半天的功夫才发现是内存问题。因此在求特征向量时,面对维度较大的协方差矩阵可以使用用特征值分解函数。这里不再赘述。

import numpy as np
import matplotlib.pyplot as plt
from numpy import linalg as la
import scipy.io as sio
from sklearn.datasets import load_iris

class PCA:
    def __init__(self,data,dim):
        mean_data = np.mean(data, axis=0)
        max_data = data.max(0)
        min_data = data.min(0)
        self.data = (data -mean_data)/(max_data -min_data)
        self.row,self.col = [i for i in self.data.shape]
        self.dim = dim
    def dimReducation(self):
        X = self.data
        covMatrix = np.dot(X.transpose(),X)/self.row
        U,S,V = la.svd(covMatrix)
        U_reduce = U[:,:self.dim]
        return U_reduce
    def reConstruct(self,U_reduce,Z):
        data_approx = np.dot(U_reduce,Z)
        return data_approx.T

if __name__=='__main__':
    #人脸数据测试用例
    face = sio.loadmat('ex7faces.mat')
    data = face['X']
    plt.figure(1)
    for i in range(6):
        plt.subplot(2, 3, i + 1)
        plt.imshow(data[i, :].reshape(32, 32).T, cmap="gray")
    test = PCA(data,100)
    featureVector= test.dimReducation()
    plt.figure(2)
    for i in range(36):
        plt.subplot(6, 6, i + 1)
        plt.imshow(featureVector[:,i].reshape(32, 32).T, cmap="gray")
    data_reduce = np.dot(featureVector.T,data.T).T
    z =  np.dot(featureVector.T,data.T)
    rebuildFace = test.reConstruct(featureVector,z)
    plt.figure(3)
    for i in range(6):
        plt.subplot(2, 3, i + 1)
        plt.imshow(rebuildFace[i, :].reshape(32, 32).T, cmap="gray")
    plt.show()
    #鸢尾花测试用例
    '''data = load_iris()
    yLabel = data.target
    X = data.data
    test = PCA(X, 2)
    U_reduce = test.dimReducation()
    X_reduce = np.dot(U_reduce.T,X.T).T
    red_x, red_y = [], []
    blue_x, blue_y = [], []
    green_x, green_y = [], []

    for i in range(len(X_reduce)):
        if yLabel[i] == 0:
            red_x.append(X_reduce[i][0])
            red_y.append(X_reduce[i][1])
        elif yLabel[i] == 1:
            blue_x.append(X_reduce[i][0])
            blue_y.append(X_reduce[i][1])
        else:
            green_x.append(X_reduce[i][0])
            green_y.append(X_reduce[i][1])
    plt.scatter(red_x, red_y, c='r', marker='x')
    plt.scatter(blue_x, blue_y, c='b', marker='D')
    plt.scatter(green_x, green_y, c='g', marker='.')
    plt.show()'''

人脸数据调试结果,
1.原始数据
原始数据,前6幅人脸图像

人脸数据集的主成分,程序中选取了前36个主成分进行展示, ,即 Ureduce[:,1:36]
人脸数据集的主成分,程序中选取了前36个主成分进行展示,即U
复原后的图像
这里写图片描述

鸢尾花数据调试结果:将原本4维的数据集,无法展示,利用PCA降至二维空间,以便数据展示。这也是PCA用途之一,即数据可视化。可以看出,降维之后的数据分布以并没有改变
这里写图片描述

python机器学习:PCA数据降维 PCA算法作为一种无监督的学习算法,主要用于数据降维、有损数据压缩、特征抽取、数据可视化。 一、PCA算法流程 • 导入数据集X; • 按列计算数据集X的均值Xmean,然后做差得到X1=X-Xmean; • 对得到的新矩阵X1作协方差,得到conv; • 计算协方差conv对应的特征值和特征向量; • 然后对得到的特征值排... 阅读详情

相关推荐

(4)【Python数据分析进阶】Machine-Learning模型与算法应用-回归、分类模型汇总

欧氏距离(Euclidean Distance):欧氏距离是最容易直观理解的距离度量方法,我们小学、初中和高中接触到的两个点在空间中的距离一般都是指欧氏距离。曼哈顿距离(Manhattan Distance):曼哈顿距离是指在m维空间中两个点之间的绝对轴距总和,也就是两个点在各个坐标轴上差的绝对值之和。切比雪夫距离(Chebyshev Distance):切比雪夫距离是指两个点在m维空间中所在坐标轴上差的最大值。

有朋自远方来,不亦乐乎。 2267

python机器学习之降维算法PCA(高维数据的可视化,鸢尾花案例)

高维数据的可视化 n_components是我们降维后需要的维度,即降维后需要保留的特征数量,降维流程中第二步里需要确认的k值,一般输入[0, min(X.shape)]范围中的整数。 调用库和模块 import matplotlib.pyplot as plt from sklearn.datasets import load_iris from sklearn.decomposition import PCA 提取数据集 iris = load_iris() x = iris.data y = iri

sjjsaaaa的博客 1万+

Machine Learning机器学习之高维数据降维(主成分分析PCA、线性判别分析、自编码器超级无敌详细讲解)

高维数据降维是指将具有大量特征的数据转换为具有更少特征的数据的过程。在现实世界中,许多数据集具有大量的特征,这可能会增加建模的复杂性,并导致维度灾难(Curse of Dimensionality)问题的出现。高维数据降维的目的是减少特征的数量,同时保留数据中最重要的信息,以便更好地理解数据、可视化数据、加快计算速度和提高模型性能。主成分分析PCA,局部线性嵌入LLE算法应用与实现、自编码器算法

a910247的博客 3402

python的PCA

PCA是主成分分析,用来降维,用少量的变量去解释大部分变量,使得原来相关的变成不相关的,独立的变量。sklearn.decomposition.PCA(n_components=None,copy=True,whiten=False)n_components保留下来的特征个数n,缺省是所有都保留。赋值为int就是要保留几个。赋值为‘mle’,自动选取,使得满足要求的方差满分比。 copy,True

xuyaoqiaoyaoge的博客 1381

Feature Engineering for Machine Learning in Python

是人工智能领域的一个分支,其目的是通过训练算法模型对输入数据进行预测或分类,从而实现智能化的行为。目前,机器学习已经成为当今最火热的话题之一。无论是在医疗健康、金融、图像识别、文本处理、推荐系统、安全运维等方面,都可以利用机器学习进行高效自动化。机器学习的应用非常广泛,包括但不限于图像识别、文本处理、生物信息分析、互联网搜索推荐、垃圾邮件过滤、产品销售预测、语音识别、智能助手等。在这些应用中,特征工程(Feature engineering)是一个十分重要的环节。

AI天才研究院 1812

MATLAB版t-SNE降维可视化工具包(含手写数字示例数据与一键运行脚本)

直接运行就能看到高维数据如何被t-SNE压缩成2D/3D散点图的MATLAB工具包。里面包含主程序image1.m,10个子文件夹分别存放0–9类手写数字样本(MNIST风格),数据已按类别整理好,开箱即用。支持加载任意CSV或MAT文件格式的特征矩阵,自动完成距离计算、概率建模、梯度优化和坐标映射全过程,最后输出带颜色标注的聚类分布图。配套生成了tsne_.png预览图,还附有Python版本tsne_visualization.py和依赖清单requirements.txt,方便跨平台对照验证。整个流程

bean的博客 184

使用PCA对特征进行降维

文章目录一、PCA是什么?二、使用方法1.引入库2.数据处理3.运用PCA进行降维总结 一、PCA是什么? 在大量数据中,很多特征之间可能都存在着一定的相关性。再者,特征划分的越细,特征数量越多还可能导致过拟合的情况出现。因此,在特征数量众多的情况下,可以采取一定的手段对特征进行降维。主成分分析(Principal Component Analysis,简称PCA)是最常用的一种降维方法。该方法可以尽可能的保留大量特征中的主要信息,对特征数量进行简化,从而简化模型的计算。 接下来用Kaggle中的Ins.

APTX459770648的博客 4960

基于TI MSPM0的PS2双轴按键摇杆模块ADC+GPIO驱动移植实战

本文详细介绍了在TI MSPM0微控制器上驱动PS2双轴按键摇杆模块的完整实战流程。通过SysConfig图形化工具配置ADC与GPIO引脚,并编写了包含ADC采样、按键检测及数据处理的驱动代码,实现了对摇杆X/Y轴模拟量及按键数字量的稳定读取,为嵌入式控制项目提供了可直接移植的解决方案。

weixin_42465140的博客 83

为什么算法笔记被称为晴神_吴恩达《Machine Learning》精炼笔记 9:PCA 及其 Python 实现...

作者:Peter红色石头的个人网站:红色石头的个人博客-机器学习、深度学习之路​www.redstonewill.com系列文章:吴恩达《Machine Learning》精炼笔记 1:监督学习与非监督学习吴恩达《Machine Learning》精炼笔记 2:梯度下降与正规方程吴恩达《Machine Learning》精炼笔记 3:回归问题和正则化吴恩达《Machine Learning》精炼笔...

weixin_39907220的博客 1682

OptiSystem仿真:波分与时分复用混合光网络的设计与性能优化

本文详细介绍了如何利用OptiSystem软件设计与优化波分复用与时分复用混合光网络。通过构建四路波分乘以四路时分的系统模型,文章阐述了从信源生成、复用合并、光纤传输到信号解复用与性能评估的全流程,并重点探讨了对抗色散、优化器件参数及探索高级调制格式等核心性能优化策略,为应对未来海量数据需求提供了高效、可行的仿真解决方案。

pink的博客 1106

Intel MKL库常用模块的C语言实现

文章目录1. 随机数生成1.1 等概率的01分布 viRngUniform1.2 (复)高斯分布 vsRngGaussian2. 向量-向量运算2.1 向量数乘与加法 cblas_caxpby2.2 向量内积 cblas_cdotu_sub2.3 向量范数 cblas_scnrm23. 矩阵-向量运算3.1 矩阵存储方案3.2 矩阵-向量乘法 cblas_cgemv4. 矩阵-矩阵运算4.1 矩阵...

月半 月半的博客 4651

PRML降维实战:用PCA可视化高维数据 - 机器学习新手终极指南 [特殊字符]

你是否曾面对成百上千维的数据感到手足无措?🤔 高维数据的可视化一直是机器学习中的经典难题。今天,我将带你探索PRML项目中的PCA(主成分分析)降维技术,轻松实现高维数据的可视化分析!本文将为你展示如何用Python中的PRML库,将复杂的高维数据降维到2D或3D空间,让数据可视化变得简单直观。 ## 📊 什么是PCA降维? **PCA(Principal Component Analys

gitblog_01045的博客 497

SPSS因子分析实战:从数据清洗到结果解读的完整流程

本文提供了一份详尽的SPSS因子分析实战指南,涵盖从数据清洗、适用性检验(KMO与巴特利特检验)、公因子提取、因子旋转到结果解读与报告撰写的完整流程。通过具体案例,手把手教你如何利用SPSS进行探索性因子分析,实现数据降维并提炼核心公共因子,适用于市场研究、心理学等多变量数据分析场景。

weixin_29055699的博客 329

从零开始掌握机器学习:machine_learning_basics完整指南与实战教程

machine_learning_basics是一个专注于使用纯Python从零实现基础机器学习算法的开源项目,无需依赖复杂的机器学习库,通过简洁明了的代码帮助新手理解算法核心原理。本文将带你探索这个宝藏项目的使用方法、核心算法实现以及数据预处理技巧,让你轻松入门机器学习世界。 ## 🌟 项目核心价值:从零构建机器学习知识体系 该项目最大的特色在于**所有算法均从零开始实现**,不依赖额外的

gitblog_00315的博客 862

智能驾驶小白必看:MEB低速紧急制动系统的工作原理与传感器配置详解

本文深入解析了MEB低速紧急制动系统的工作原理与传感器配置。该系统作为智能驾驶的关键安全冗余,专为应对停车场、拥堵路段等复杂低速场景设计。文章详细拆解了其如何通过超声波雷达、环视摄像头等传感器融合感知环境,并基于碰撞时间(TTC)等模型进行风险评估与分级制动,最终实现主动防碰撞,是智能驾驶技术实用化的重要体现。

c2d3e4f的博客 1131

具身大小脑全栈全网独家复现|LLM链式推理+边缘VLA感知+毫秒级运动小脑、优化人形步态僵硬运动滞后、打通思考-行走-操作全链路适配居家工业多场景落地

高层决策大脑(异步10Hz,GPU算力):轻量化机器人微调LLM+RhinoVLA边缘视觉大模型,负责自然语言链式工序拆解、全局环境语义感知、目标物体筛选、跨机器人动作适配,输出粗粒度运动目标,不介入底层伺服计算;依托View Registry实现异构机器人动作对齐,适配多形态机器人切换;中层调度小脑(硬实时1kHz,CPU算力)

qq_36130719的博客 255

douyin-downloader:抖音主页作品无水印批量下载,一次跑完全量不重下

douyin-downloader 是一个命令行抖音无水印批量下载工具,能把创作者主页的视频、图文、合集与原声拉取到本地,自带进度展示、失败项自动重试和 SQLite 去重。跟着下面的命令操作,10 分钟左右就能在本地硬盘拿到一批完整作品。全程只改 config.yml 和命令行参数,不需要动工具源码。 ## 它解决的问题:主页作品无水印批量下载 单条单条在官方 App 里存作品太慢,存下来的

gitblog_00267的博客 414

10款AI工具赋能虚拟展厅设计:架构师效率提升90%的秘密武器

2020年全球疫情成为数字转型的催化剂,虚拟展厅从"可选项"迅速转变为"必需品"。根据Gartner最新报告,到2025年,超过70%的企业将采用虚拟展厅作为客户体验和产品展示的核心渠道。这一转变不仅是应急措施,更是商业模式的永久性革新。虚拟展厅突破了物理空间的限制——一个精心设计的虚拟展厅可以同时接待来自全球各地的访客,无需考虑场地容量;展品可以以数字形式永久保存,避免了物流和损耗问题;数据分析功能可以精确追踪每位访客的行为轨迹,提供前所未有的洞察。数据透视。

AI 领航者的博客 1573

如何在AiPy项目中快速掌握吴恩达机器学习笔记与实践指南

AiPy项目是一个专注于Python机器学习、深度学习算法开发的学习资源宝库,其中包含了吴恩达机器学习课程的完整笔记和实践代码。对于想要系统学习机器学习的新手来说,这个项目提供了从理论到实践的完整学习路径。💡 ## 为什么选择AiPy项目学习吴恩达机器学习? AiPy项目整合了**机器学习入门**的经典资源,特别适合初学者。项目中的吴恩达机器学习笔记和实践代码经过精心整理,帮助你避开学习中的

gitblog_00546的博客 991

实战5:农作物产量预测 蔬菜产量预测 lstm 完整代码数据-可直接运行-计算机毕设

实战5:农作物产量预测 蔬菜产量预测 lstm 完整代码数据-可直接运行-计算机毕设

机器学习深度学习业余选手 1257

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

吴恩达《Machine Learning》精炼笔记 9:PCA 及其 Python 实现

作者 | Peter编辑 |AI有道系列文章:吴恩达《Machine Learning》精炼笔记 1:监督学习与非监督学习吴恩达《Machine Learning》精炼笔记 2:梯度下...

红色石头的专栏 1041

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

2020吴恩达 machine learning 编程作业 python实现 ex7_pca

# -*- coding: utf-8 -*- """ Created on Fri Jul 3 23:50:18 2020 @author: cheetah023 """ import numpy as np import matplotlib.pyplot as plt import scipy.io as sci def featureNormalize(X): mu = np.mean(X,axis=0) sigma = np.std(X,axis=0,ddof=1) .

cheetah023的博客 425

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

探索Python机器学习实践:Machine_Learning_Python项目详解

探索Python机器学习实践:Machine_Learning_Python项目详解 去发现同类优质开源项目:https://gitcode.com/ 在数据科学和人工智能领域,Python语言以其丰富的库支持、易学易用的特点,成为了开发者们的首选工具之一。今天我们要介绍的是一个位于上的开源项目——。该项目致力于提供一套完整的Python机器学习实战教程和代码示例,帮助初学者快速入门并深入理解机器...

gitblog_00037的博客 509

Machine Learning---10--pca

机器学习之PCA降维

qq_38096703的博客 435

Homemade-Machine-Learning内存优化:处理大数据的终极指南

Homemade-Machine-Learning是一个用Python实现的机器学习算法项目,包含交互式Jupyter演示和详细的数学原理解释。当处理大数据集时,有效的内存优化策略能显著提升算法性能,让机器学习模型训练过程更加高效稳定。本文将分享针对该项目的实用内存优化技巧,帮助新手和普通用户轻松应对大数据处理挑战。 ## 机器学习算法与内存需求概览 机器学习领域包含多种算法,不同类型的算法对

gitblog_00907的博客 882

machine learning之PCA、ICA

在高维数据处理中,为了简化计算量以及储存空间,需要对这些高维数据进行一定程度上的降维,并尽量保证数据的不失真。PCA和ICA是两种常用的降维方法。 PCA:principal component analysis ,主成分分析 ICA :Independent component analysis,独立成分分析 PCA,ICA都是统计理论当中的概念,在机器学习当中应用

Together_CZ的博客 4544
上一篇: [Machine Learning]Kmeans 算法 python 实现
下一篇: [Machine Learning]Linear regression 一元线性归回Python实现
街头小默
博客等级 码龄9年 8粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值