主成分分析Python代码

2023-11-01

对于主成分分析详细的介绍:主成分分析(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)

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

主成分分析Python代码 的相关文章

随机推荐

  • java中的数组 上

    目录 数组的概述 一维数组的使用 声明 初始化 数组元素的引用 数组元素的默认初始化值 一维数组的内存解析 多维数组 多维数组的使用 二维数组的内存解析 数组的概述 数组 Array 是多个 相同类型数据 按 一定顺序排列 的集合 并使用
  • 常用正则表达式例子

    原文 http blog sina com cn s blog 4c646b600100evq3 html 1 d 匹配非负整数 正整数 0 2 0 9 1 9 0 9 匹配正整数 3 d 0 匹配非正整数 负整数 0 4 0 9 1 9
  • 【蓝桥杯】第十四届蓝桥杯模拟赛(第三期)C++ (弱go的记录,有问题的话求指点)

    博主是菜鸡啦 代码仅供参考 只确定能过样例 嘻嘻 第一题 填空题 问题描述 请找到一个大于 2022 的最小数 这个数转换成十六进制之后 所有的数位 不含前导 0 都为字母 A 到 F 请将这个数的十进制形式作为答案提交 答案提交 这是一道
  • css的list,CSS List 入门教程

    CSS List 入门教程 list指得是在css中的li等标签的控制了 面list也有四个属性 其实有五个我们只讲常用的4个了 他们分别为 list style list style image list style position l
  • 【thinkphp5学习笔记之一 】安装

    一 安装composer 1 点此下载composer 然后运行 2 打开cmd 按行分别输入以下代码 要求php安装并且路径配置完毕 php r copy https install phpcomposer com installer c
  • 51单片机实战教程之C语言基础(二 C语言运算符)

    Keil C51基础之运算符详解 一 算术运算符 包括加 减 乘 除 取模 自加 自减 示例 5 3 结果 2 char a 5 a 结果 5 1 a为6 a 结果 6 1 a为 5 二 关系运算符 包括小于 lt 小于等于 lt 大于 g
  • Chrome 截图页面全图

    打开谷歌浏览器 按F12 弹出开发者工作 开发者工具中 按下快捷键组合Ctrl Shift P Windows 在命令行中输入 Screen 可以看到三个选项 根据不同需求进行选择 具体如下图所示 整个网页 Capture full siz
  • 圆周率 π 是否隐藏了本个宇宙的设计者留给这个宇宙的智慧文明的某种信息?...

    还是太naive了 我要是宇宙设计者 我就把信息藏在蔡廷常数里 这才是对人类最大的嘲讽 蔡廷常数 其含义是找随机生成一段程序 这段程序不会陷入死循环的概率 可以证明这是一个确定存在的无理数 但是同样可以证明它是不可以被计算出来的 实际上 能
  • LeetCode:58. 最后一个单词的长度

    给你一个字符串 s 由若干单词组成 单词前后用一些空格字符隔开 返回字符串中 最后一个 单词的长度 单词 是指仅由字母组成 不包含任何空格字符的最大子字符串 示例 1 输入 s Hello World 输出 5 解释 最后一个单词是 Wor
  • 'umi' 不是内部或外部命令

    1 首先 需要安装Node js 一路下一步安装 并确保 node 版本是 8 10 或以上 mac 下推荐使用 nvm 来管理 node 版本 安装完成后 通过node v 命令查看其版本号 2 推荐使用 yarn 管理 npm 依赖 并
  • Unity批量预设体替换材质球

    using System Collections using System Collections Generic using UnityEditor using UnityEngine using UnityEngine UI using
  • linux查看端口的使用情况

    lsof 查看端口占用语法格式 lsof i 端口号 lsof i 8080 查看8080端口占用 lsof abc txt 显示开启文件abc txt的进程 lsof c abc 显示abc进程现在打开的文件 lsof c p 1234
  • docker配置文件挂载(容器数据管理)

    目录 数据卷 容器数据管理 什么是数据卷 数据集操作命令 创建和查看数据卷 挂载数据卷 案例 案例 给nginx挂载数据卷 案例 给MySQL挂载本地目录 总结 数据卷 容器数据管理 在之前的nginx案例中 修改nginx的html页面时
  • 大数据平台测试-后端代码覆盖率工具

    一 后端覆盖率工具 在后端开发中 常用的覆盖率工具包括 JaCoCo Java Code Coverage JaCoCo 是一个流行的 Java 代码覆盖率工具 它可以在编译期间插入字节码 收集覆盖率信息 并生成报告 JaCoCo 支持行覆
  • VScode react @ import引入路径智能提示

    1 安装Path Intellisense插件 2 在settings json中配置 path intellisense mappings workspaceRoot src 3 在项目package json所在同级目录下创建文件jsc
  • Object Detection

    目标检测神文 非常全而且持续在更新 转发自 https handong1587 github io deep learning 2015 10 09 object detection html 如有侵权联系删除 我会跟进原作者博客持续更新
  • TransactionTemplate 事务编程式写法

    建议使用声明式事务 Transactional rollbackFor Exception class 粒度不够 拆分方法 import org springframework transaction support Transaction
  • 题目68 求随机整书数组中两个数和绝对值最小值(ok)

    给定一个随机的整数数组 可能存在正整数和负整数 nums 请你在该数组中找出两个数 其和的绝对值 nums x nums y 为最小值 并返回这两个数 按从小到大返回 以及绝对值 每种输入只会对应一个答案 但是 数组中同一个元素不能使用两遍
  • Python(8):循环语句

    Python循环语句 今天重点学习关于循环的关键字 for while else ranage break continue pass while 一般形式 while 判断条件 condition 执行语句块statements 直接上代
  • 主成分分析Python代码

    对于主成分分析详细的介绍 主成分分析 PCA 原理详解https blog csdn net zhongkelee article details 44064401 import numpy as np import pandas as p