主成分分析Python代码

news2024/12/26 17:47:59

对于主成分分析详细的介绍:主成分分析(PCA)原理详解icon-default.png?t=N6B9https://blog.csdn.net/zhongkelee/article/details/44064401

import numpy as np
import pandas as pd

'''标准PCA算法'''
def standeredPCA(data,N):                                   #data:数据集DataFrame  N:降维后需要的维数
    n=data.shape[1]                                         #数据集data的列数,即维度
    m=data.shape[0]                                         #数据集data的行数
    colname=list(data.columns)                              #提取列名
    AVG=[]                                                  #原始各个维度的平均值

    for i in range(n):
        avg=0
        s=list(data[colname[i]])
        num=len(s)
        for j in s:
            avg+=j
        avg=avg/num
        AVG.append(avg)

    '''将每一列数据都转换成列表型'''
    df=[]                                                   #存储每一列的数据
    for i in range(n):
        ls=list(data[colname[i]])
        df.append(ls)

    '''数据中心化'''
    for i in range(n):
        t=df[i]
        for j in range(len(t)):
            t[j]=t[j]-AVG[i]

    '''求特征协方差矩阵'''
    A=np.zeros((n,n))
    for i in range(n):
        for j in range(n):
            p=df[i]
            q=df[j]
            for k in range(m):
                A[i][j]+=p[k]*q[k]
            A[i][j]=A[i][j]/(m-1)

    '''求协方差的特征值和特征向量'''
    B=np.linalg.eig(A)
    P=B.eigenvalues                                         #特征值
    Q=B.eigenvectors                                        #特征向量
    U=[index for index, value in sorted(list(enumerate(P)), key=lambda x:x[1])]     #对特征值排序输出索引值序列
    U=sorted(U,reverse=True)                                #特征值从大到小排序的索引值
    u=[]                                                    #输出排在前N个的索引值
    for i in range(N):
        u.append(U[i])
    r=[]                                                     #需要的特征值
    t=[]                                                     #需要的特征向量
    for i in u:
        r.append(P[i])
        T=[]
        for j in Q:
            T.append(j[i])
        t.append(T)

    '''得到通过PCA后获得的N个特征的数据'''
    W=[]                            #存储通过PCA后得到的每一个特征的数据【列表】
    for i in range(N):
        a=[]                        #存储通过PCA的特征数据
        b=t[i]
        for j in range(m):          #遍历数据的行
            f=0
            for k in range(n):      #遍历数据的列
                f=f+df[k][j]*b[k]
            a.append(f)
        W.append(a)

    '''输出经过PCA降维处理后得到的N个特征数据'''
    fdata=pd.DataFrame(W)
    fdata=fdata.T
    print("经过PCA降维后得到的结果如下:")
    print(fdata)
          
    '''计算特征信息提取率'''
    sum=0
    for i in P:
        sum+=i
    fsum=0
    for i in u:
        fsum+=P[i]
    PCAprecent=fsum/sum
    print("PCA数据特征的信息提取率是:{}".format(PCAprecent))


if __name__=="__main__":
    df = {'x': [2.5, 0.5, 2.2, 1.9, 3.1, 2.3, 2, 1, 1.5, 1.1], 'y': [2.4, 0.7, 2.9, 2.2, 3.0, 2.7, 1.6, 1.1, 1.6, 0.9]}
    data = pd.DataFrame(df)
    standeredPCA(data, 1)

 

 

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

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

相关文章

Visualizing and Understanding Convolutional Networks阅读笔记

Visualizing and Understanding Convolutional Networks阅读笔记 摘要1. 前言 [ 1 ] ^{[1]} [1]2. 使用反卷积网络可视化3. 卷积网络可视化 [ 2 ] ^{[2]} [2]3.1 特征可视化3.2 训练过程中特征的演化3.3 特征不变性3.4 架构选择3.5 遮挡敏感性 参考文章 摘要 CNN模型已经取得了…

Linux 5种IO模型

Linux IO模型 网络IO的本质是socket的读取,socket在linux系统被抽象为流,IO可以理解为对流的操作。刚才说了,对于一次IO访问(以read举例),数据会先被拷贝到操作系统内核的缓冲区中,然后才会从操…

【测试开发】基于 MeterSphere 的接口测试流程

基于 MeterSphere 的接口测试流程 MeterSphere 接口测试模块提供了 接口定义、接口自动化 等接口测试相关功能。 用户可以使用树状多级模块来分级分组管理项目下的接口列表,创建执行接口用例测试接口,组合编排多个接口用例进行场景自动化测试。 1 接口定…

caffe专题五——回归中——检测框架

一:Bounding-box regression回归 1.问题理解(为什么要做 Bounding-box regression? )如图 1 所示, 绿色的框为飞机的 Ground Truth, 红色的框是 Selective Search 提取的 Region Proposal。 那么即便红色的框被分类器识别为飞机,但…

Win10系统pytorch安装教程

前提:安装后Anaconda和NVIDIA显卡驱动 1. 确定支持的最高CUDA版本 确定支持的最高CUDA版本 记住这个CUDA版本,后面要用。 2. 新建conda虚拟环境 2.1 为conda配置清华镜像源 conda常用命令 打开Anaconda prompt窗口,使用如下命令&#xf…

学习心得01:STM32开发板

嵌入式开发也不难,相关知识需要学习。对于某个具体内容,需要反复测试、修改。 这是我买的一个开发板,各个范例都跑了一遍,有问题的还问过客服(更新代码后解决)。

[C++]笔记-函数的栈空间(避免栈空间溢出)

错误1 当数组的内存占用较大时,会引发异常 #include <iostream> using namespace std; int main() {char buff[2000000];cout << (int)buff[sizeof(buff) - 1] << endl; 错误 2 当调用次数较小的时候,栈内存还没有满,可以输出,该地址相减除以1024等于100,就…

​《乡村振兴战略下传统村落文化旅游设计 》在2023年畅销榜排名465位

​《乡村振兴战略下传统村落文化旅游设计 》在2023年畅销榜排名465位

T01西门子#将博图触摸屏中使用的外部图片全部导出

方法一&#xff1a;直接在博图软件WINCC中 点击图片右击 缺点&#xff1a;用自带的画图软件打开保存后无法保留透明。 方法二&#xff1a;使用官方软件导出 优点&#xff1a;快速批量全部导出&#xff0c;保留文件原格式。 下载地址&#xff1a; 将图形从 WinCC (TIA Portal) …

理解变分自编码器(VAE)

转载翻译自&#xff1a;https://towardsdatascience.com/understanding-variational-autoencoders-vaes-f70510919f73 介绍 在过去几年中&#xff0c;基于深度学习的生成模型因为在该领域中取得了一些惊人的进展而越来越受到关注。依靠大量的数据、精心设计的网络架构和智能训…

日志系统——实用类设计,日志等级类设计,日志消息类设计

一&#xff0c;实用类设计 该类主要是提前完成一些后面会用到的零碎通用的功能接口&#xff0c;主要有下面几个 1.获取系统时间&#xff1a;这里我们直接用time()函数获取时间返回 2.判断文件是否存在&#xff1a;判断文件我们调用系统接口&#xff0c;stat()&#xff0c;如下所…

Linux命令200例:top是一个基于终端的实时系统监控工具(常用)

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;全栈领域新星创作者✌。CSDN专家博主&#xff0c;阿里云社区专家博主&#xff0c;2023年6月csdn上海赛道top4。 &#x1f3c6;数年电商行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责人。 &…

新款2023奥迪A5新车32.24,这款车怎么样?

奥迪公司近期发布了新款A5车型&#xff0c;全国起售价为32.24万元。这款新车凭借其精致的设计和出色的实用性&#xff0c;吸引了大量消费者的关注。本文将结合个人经验和市场调研&#xff0c;对这款新车的特性进行深入剖析。 首先&#xff0c;奥迪A5的外观设计完美融合了实用性…

16.5 【Linux】SELinux 初探

16.5.1 什么是 SELinux SELinux是“ Security Enhanced Linux ”的缩写&#xff0c;字面上的意义就是安全强化的 Linux。 当初设计的目标&#xff1a;避免资源的误用 SELinux 是由美国国家安全局 &#xff08;NSA&#xff09; 开发的&#xff0c;当初开发这玩意儿的目的是因…

Centos7完全卸载已安装的Nginx

查看服务器上安装的nginx版本号&#xff0c;主要是通过ngix的-v或-V选项 Linux下查看Nginx安装目录、版本号信息? -v 显示 nginx 的版本。 -V 显示 nginx 的版本&#xff0c;编译器版本和配置参数。 [rootwww ~]# /usr/local/nginx/sbin/nginx -v nginx version: nginx/1.…

移动硬盘已识别但无法读取怎么办?

移动硬盘已识别但无法读取问题是一个比较常见的问题&#xff0c;通常会以“硬盘无法访问”的提示弹窗形式出现&#xff0c;也曾让很多人苦闷烦恼不已。那么具体的移动硬盘无法读取原因是什么呢&#xff1f; 移动硬盘无法读取的原因 硬盘驱动器可能是没有分区的新驱动器。如果您…

记一次:线程池源码解析

前言&#xff1a;很多时候我们需要使用线程池来处理逻辑&#xff0c;但实际上线程池是如何添加线程&#xff0c;如何执行的呢&#xff1f; 0&#xff1a;创建线程池--略&#xff08;7个参数&#xff09; 1&#xff1a;提交线程池源码 public void execute(Runnable command)…

基于 spring boot 的毕业生信息招聘管理系统【源码在文末】

向上的路&#xff0c;并不拥挤&#xff0c;拥挤是因为大部分人选择了安逸 大学生嘛&#xff0c;论文写不出&#xff0c;代码搞不懂不要紧&#xff0c;重要的是&#xff0c;从这一刻就开始学习&#xff0c;立刻马上&#xff01; 今天带来的是最新的选题&#xff0c;基于 spring…

Python绘图系统5:自定义一个坐标设置控件

文章目录 封装成类数据输入方案设置数据源代码 Python绘图系统&#xff1a;将matplotlib嵌入到tkinter &#x1f4c8;简单的绘图系统 &#x1f4c8;数据导入&#x1f4c8;三维绘图系统 封装成类 xyz这三行其实从代码的角度来说是完全一样的&#xff0c;而且在写这三行组件的时…

Python学习笔记_基础篇(九)_面向对象编程

本篇内容: 1、反射2、面向对象编程3、面向对象三大特性4、类成员5、类成员修饰符6、类的特殊成员7、单例模式 反射 python中的反射功能是由以下四个内置函数提供&#xff1a;hasattr、getattr、setattr、delattr&#xff0c;改四个函数分别用于对对象内部执行&#xff1a;检…