PCA的数学原理和python实现

news2024/12/17 19:43:27

最近学习了一下PCA,具体原理网址如下:

CodingLabs - PCA的数学原理

主要原理是通过线性变换将原始数据变换为一组各维度线性无关的表示,其中将方差最大的方向作为主要特征。提取数据的主要特征分量,可用于高维数据的降维

主要算法步骤是

PCA算法

设有m条n维数据。

1)将原始数据按列组成n行m列矩阵X

2)将X的每一行(代表一个属性字段)进行零均值化,即减去这一行的均值

3)求出协方差矩阵

4)求出协方差矩阵的特征值及对应的特征向量

5)将特征向量按对应特征值大小从上到下按行排列成矩阵,取前k行组成矩阵P

6)Y=PX即为降维到k维后的数据

参考了网上的代码,用python实现了一遍,对图像进行处理,用列作为特征,行作为样本。

如下图451*300的图像,300个样本,每个样本451个特征。

按照pca算法,提取前k个主要特征合并出的图像如下

k=5

 

 k=15

k=25

 

k=35

 

 python代码如下

import numpy as np
from skimage import io,data

img=data.chelsea()
print(img.shape)
io.imsave("cat.bmp",img)
img=img/255
io.imshow(img)
io.show()

def pca_m(data,k):
    n_samples, n_features = data.shape  # 每列是一个特征,每一行是一个样本
    # 求解一个特征的均值,即每一列的平均值,shape(n_samples,1)
    mean = (data.sum(axis=1) / n_samples).reshape(-1, 1)
    # 去中心化,shape(n_samples,1)
    normal_data = data - mean
    # 得到协方差矩阵
    matrix_ = np.dot(np.transpose(normal_data), normal_data)
    eig_val, eig_vec = np.linalg.eig(matrix_)
    # 得到最主要的k个特征
    eigIndex = np.argsort(eig_val)
    eigVecIndex = eigIndex[:-(k + 1):-1]
    feature = eig_vec[:, eigVecIndex]

    new_data = np.dot(normal_data, feature)
    # 将降维后的数据映射回原空间
    rec_data = np.dot(new_data, np.transpose(feature)) + mean
    return rec_data


R,G,B=img[:,:,0],img[:,:,1],img[:,:,2]

for k in range(5,80,10):
    R_new,G_new,B_new=pca_m(R,k),pca_m(G,k),pca_m(B,k)
    img_new = np.zeros(img.shape)
    img_new[:, :, 0] = R_new
    img_new[:, :, 1] = G_new
    img_new[:, :, 2] = B_new

    io.imshow(img_new)
    io.show()
    imgimg = np.maximum(img_new,0)
    imgsave=np.uint8(imgimg*255)
    io.imsave("cat_k"+str(k)+".bmp",imgsave)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

工作3年裸辞,从18K到38K,面试也····

现在的面试好像也不是那么的难 工作3年,换了好几份工作(行业流行性大),每次工作都是裸辞。朋友都觉得不可思议。因为我一直对自己很有信心,而且特别不喜欢请假面试,对自己负责也对公司负责。 但是这次没想…

Axure 教程:动态分组条形图(中继器)

本文将教大家如何用AXURE中的中继器动态分组条形图 一、效果介绍 如图: 预览地址:https://v7cmdp.axshare.com 下载地址:https://download.csdn.net/download/weixin_43516258/87807121?spm1001.2014.3001.5503 二、功能介绍 简单填写中继…

Lucene(4):Field域类型

1 Field属性 Field是文档中的域,包括Field名和Field值两部分,一个文档可以包括多个Field,Document只是Field的一个承载体,Field值即为要索引的内容,也是要搜索的内容。 是否分词(tokenized) 是:作分词处理…

requests爬虫

目录 一、爬虫概念及分类 二、requests模块 1、网页地址内容获取 2、图片爬取 3、UA伪装 三、动态加载数据 一、爬虫概念及分类 爬虫: 通过编写代码,让其模拟浏览器上网,然后在互联网中抓取数据的过程 分类:1、通用爬虫:要…

Linux: ARM32各CPU模式下栈配置

文章目录 1. 前言2. 背景3. ARM32 中断向量表 和 中断处理流程3.1 ARM32 中断向量表3.2 ARM32 中断处理流程 4. ARM32 各CPU模式下的栈配置4.1 SVC模式下各CPU栈配置(内核栈配置)4.1.1 BOOT CPU SVC模式栈配置(内核栈配置)4.1.2 非 BOOT CPU SVC模式栈配置(内核栈配置) 4.2 中断…

实现快速多点触控,让App自动化测试操作更方便

目录 前言: PyAutoGUI简介: 代码示例: 总结: 前言: 随着智能设备的普及,触摸点的数量和触摸操作的复杂度也在不断增加。要想在触控界面上获得更高效率和更好的体验,多点触控操作是必不可少的…

历经70+场面试,我发现了大厂面试的套路都是···

今年的金三银四刚刚过去,我又想起了我在去年春招时面试了50余家,加上暑期实习面试了20余家,加起来也面试了70余场的面试场景了。 基本把国内有名的互联网公司都面了一遍,不敢说自己的面试经验很丰富,但也是不差的。 …

【JAVAEE】认识网络及网络通信

目录 1.网络发展史 1.1独立模式 1.2网络互连 1.2.1局域网 1.2.2广域网 2.网络通信基础 2.1IP地址 2.2端口号 2.3协议 2.4五元组 2.5协议分层 2.5.1什么是协议分层 2.5.2协议分层的作用 2.5.3TCP/IP五层(或四层)模型 3.封装和分用 1.网络发…

调用百度API自动生成春联

目录 1、作者介绍2、百度智能春联介绍录2.1 功能介绍2.2 技术特色 3、智能春联API接口介绍3.1 请求参数3.2 返回参数 4. 操作流程5. 代码实现 1、作者介绍 范宇帅,男,西安工程大学电子信息学院,2022级研究生 研究方向:多机器人协…

〖C++11〗线程库详解

「前言」文章是关于C11线程库相关的 「归属专栏」C嘎嘎 「笔者」枫叶先生(fy) 「座右铭」前行路上修真我 「枫叶先生有点文青病」 「每篇一句」 请不要把陌生人的些许善意, 视为珍稀的瑰宝, 却把身边亲近人的全部付出, 当做天经地义的事情&am…

比赛记录:Codeforces Round 874 (Div. 3) A~G

传送门:CF 前题提要:赛时A出了5道题,并且都是一遍过的,F题也已经找到了解决方法,但是没时间完成了.以为应该能上分,但是没想到赛后E题被hack掉了…绝了.然后打完这场 d i v 3 div3 div3后立马阳了,加上一大堆烦心事(包括但不限于各类考试).就导致现在才写出这篇题解. A题:A. …

移动机器人 | 火星探矿机器人

01、需求分析 “火星探矿机器人”旨在要开发若干个自主机器人,将其送到火星上去搜寻和采集火星上的矿产资源。 火星环境对于开发者和自主机器人而言事先不可知,但是可以想象火星表面会有多样化的地形情况,如河流、巨石、凹坑等,机…

公司从字节招来一个28K的测试工程师,让我见识到了什么才是真正的测试天花板

今天上班开早会就是新人见面仪式,听说来了个很厉害的大佬,年纪还不大,是上家公司离职过来的,薪资已经达到中高等水平,很多人都好奇不已,能拿到这个薪资应该人不简单,果然,自我介绍的…

队列——“数据结构与算法”

各位CSDN的uu们你们好呀,又好久不见啦,最近有点摆烂,甚是惭愧!!!!今天,小雅兰的内容是队列,下面,让我们进入队列的世界吧!!&#xff0…

Trigger +Pipeline 完整实战案例

2.4.1 案例环境说明 示例项目:http://code.icloud2native.com/root/spring-boot-helloWorld.git 触发机制: 用户推送代码至项目仓库由Push Hook 自东触发pipeline的流水线的执行 2.4.2 项目实现 1、在k8s上部署一个gitlab,前面上节已经完成。 2、运…

海睿思分享 | 类chatgpt模型在信息抽取领域的应用

大语言模型(LLM,Large Language Model)是指能够处理海量数据、拥有百亿级参数的深度学习模型,它已成为⼈⼯智能领域中的新热点。2022 年 11 ⽉ 30 号 ChatGPT 发布,其卓越的性能表现给整个⾏业带来了巨⼤的冲击。⼈们不…

2023年春季期末网球理论复习资料

(含2023/2022/2021时事题,基于2012年期末网球理论复习资料修改) 目录 网球的起源 网球的主要赛事 三大网球协会 大满贯 网球的场地 1. 球场线 2. 网球的球网 3.场地的类型 网球的规则 1.发球规则 2.计分方法 3.通则 4.赛…

在Octane中提升渲染速度的技巧(第1部分)

Mike Griggs是一位数字内容创建者,在为众多客户创建Mograph,VFX和CGI方面拥有超过二十年的经验。迈克格里格斯(Mike Griggs)在Creative Bloq上写了很多博客,该博客是国际媒体集团和领先的数字出版商Future plc的一部分…

手势识别q

本文介绍使用光电传感器的手势识别。 光电传感器手势识别区别于视觉手势识别,没有复杂的算法。LED发射光,当光线接触到手发生反射,反射光被传感器检测到,传感器检测到不同的手势反射的光不同,再根据芯片的内置算法判别…

【笔试强训编程题】Day5.( 统计回文 45842 ) 和( 连续最大和 58539)

作者简介:大家好,我是未央; 博客首页:未央.303 系列专栏:笔试强训编程题 每日一句:人的一生,可以有所作为的时机只有一次,那就是现在!!!! 文章目录…