数据挖掘之PCA-主成分分析

news2024/11/16 19:57:40

PCA的用处:找出反应数据中最大变差的投影(就是拉的最开)。

在减少需要分析的指标同时,尽量减少原指标包含信息的损失,以达到对所收集数据进行全面分析的目的

但是什么时候信息保留的最多呢?具体一点?

首先:去中心化(把坐标原点放到数据中心,如上图所示)

然后,找坐标系(找到方差最大的方向)

问题是:怎么找到方差最大的方向呢????????

一.引子

1.使用矩阵可以进行数据的线性变换(数据的拉伸)

2.使用矩阵可以进行数据的线性变换(数据的旋转)

3.结合起来两种操作

拉伸决定了方差最大的方向是横或者纵

旋转决定了方差最大的方向的角度

怎么求R?

协方差矩阵的特征向量就是R

二.数学原理:

三.PCA流程图:

PCA与SVD的联系:

四.例子:

五.代码:

# -*- coding: utf-8 -*-
"""
Created on Tue Oct 13 11:12:24 2020

@author: pc

 ① 对原数据集零均值化。代码是:meanRemoved = dataMat - mean(dataMat,axis=0)

 ② 求出均值化X的协方差矩阵:公式是:Cov(X)=\frac{1}{m-1}X^{T}X,代码是:covMat = cov(meanRemoved,rowvar=0)

 ③ 求这个协方差矩阵的特征值,特征向量,代码是:eigVals, eigVects = linalg.eig(mat(covMat))

 ④ 把这些特征值按从大到小排列,返回特征值的下标,代码是:eigValInd = argsort(-eigVals)

 ⑤ 选出前topNfeat个特征值,返回这些选中的特征值的下标,并根据下标从特征向量矩阵eigVects中取出这些选中的特征向量组成矩阵P,这就是我们要找的变换矩阵P,代码是:redEigVects = eigVects[:,eigValInd[:topNfeat] ]

 ⑥ 返回降维后的数据,公式是:Y=X•P,代码是:lowDDataMat = meanRemoved * redEigVects

 ⑦ 原数据映射到新的空间中。公式是:X^{'}=Y\cdot P^{T}+mean,代码是:reconMat = (lowDDataMat * redEigVects.T) + meanValues
"""

import numpy as np
import matplotlib.pyplot as plt

def pca(dataMat, topNfeat = 999999):
    meanValues = np.mean(dataMat,axis=0) # 竖着求平均值,数据格式是m×n
    meanRemoved = dataMat - meanValues  # 0均值化  m×n维
    covMat = np.cov(meanRemoved,rowvar=0)  # 每一列作为一个独立变量求协方差  n×n维
    eigVals, eigVects = np.linalg.eig(np.mat(covMat)) # 求特征值和特征向量  eigVects是n×n维
    eigValInd = np.argsort(-eigVals)  # 特征值由大到小排序,eigValInd十个arrary数组 1×n维
    eigValInd = eigValInd[:topNfeat]  # 选取前topNfeat个特征值的序号  1×r维
    print(eigValInd)
    redEigVects = eigVects[:,eigValInd] # 把符合条件的几列特征筛选出来组成P  n×r维
    lowDDataMat = meanRemoved * redEigVects  # 矩阵点乘筛选的特征向量矩阵  m×r维 公式Y=X*P
    reconMat = (lowDDataMat * redEigVects.T) + meanValues  # 转换新空间的数据  m×n维
    return lowDDataMat, reconMat

def drawPoints(dataset1,dataset2):  # 画图,dataset1是没降维的数据,dataset2是数据映射到新空间的数据
    fig = plt.figure()
    ax1 = fig.add_subplot(211)
    ax2 = fig.add_subplot(212)
    ax1.scatter(dataset1[:,0],dataset1[:,1],marker='s',s=5,color='red')
    dataset2 = np.array(dataset2)
    ax2.scatter(dataset2[:,0],dataset2[:,1],s=5,color='blue')
 
    plt.show()
    
if __name__ == '__main__':
    dataSetList = []
    fr = open('pca_data_set1.txt')
    for row in fr.readlines():
        cur_line = row.strip().split('\t')
        proce_line = list(map(float,cur_line))
        dataSetList.append(proce_line)
    dataSetList = np.array(dataSetList)
    data = dataSetList
    proccess_data, reconMat = pca(data,topNfeat = 1)
    drawPoints(data,reconMat)

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

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

相关文章

Linux:Ubuntu系统安装软件

本次以安装vim为例 sudo apt-get remove vim //卸载vim sudo apt-get install vim //安装vim sudo apt-cache show vim //获取vim软件信息安装时间较长。 安装完成后,执行下第三条指令,测试下是否安装成功即可。

【element优化经验】el-dialog修改title样式

目录 前言 解决之路 1.把默认的这个图标隐藏,官方的api有这个属性:showClose值设置false. 2.title插槽定制:左边定制标题,右边定制按钮区域。 3.背景颜色修改:默认title是有padding的需要把它重写调,然…

Ubuntu 安装 JMeter:轻松上手

Apache JMeter 是一个开源的负载测试工具,可以用于测试静态和动态资源,确定服务器的性能和稳定性。在本文中,我们将讨论如何下载和安装 JMeter。 安装 Java(已安装 Java 的此步骤可跳过) 要下载 Java,请遵…

Redis中文结果查看方式

背景 当使用redis时我们存储到缓存中可能会包含一些中文,例如下面命令 set test 中国 当执行查看时,发现客户端显示的并不是中文而是乱码,例如下面结果 get test \xe4\xb8\xad\xe5\x9b\xbd 现对【\xe4\xb8\xad\xe5\x9b\xbd】的查看有如下几个方式 方式一:通过客户端直…

井盖位移传感器厂家批发,守护井盖安全

窨井盖广泛分布于城市街道,其管理效果直接反映了城市治理的现代化程度。根据住房和城乡建设部发布的《关于进一步加强城市窨井盖安全管理的通知》,全国各地需加强窨井盖的安全管理。作为市政基础设施的一个重要的组成部分,井盖的管理工作不仅…

FindMy技术用于旅行箱

旅行箱,那是出门在外的我们不可或缺的伙伴。无论是商务出差,还是短途旅行,亦或是长途度假,旅行箱都以其便捷的方式,陪伴着我们的整个行程。 然而,在旅途中,丢失旅行箱是一件非常棘手的问题&…

Spring Cloud LoadBalancer 简单介绍与实战

前言 本文为SpringCloud的学习笔记,如有错误,希望各位高手能指出,主要介绍SpringCloudLoadBalancer的基本概念和实战 文章目录 前言什么是LoadBalancer负载均衡分类服务端负载均衡客户端负载均衡服务端负载均衡和客户端负载均衡的优缺点 常见…

主播产品转场(款)话术

直播转场话术要点 在直播过程中,转场话术是非常重要的一部分。它可以帮助主播J顺利地将一个主题或场景过渡到另一个主题或场景,同时吸引观众的注意力。提高直播的观赏性和互动性。以下是一些直播转场话术的要点: 一、过渡性话语 过渡性话语是连接两个…

交叉导轨在光学工作台起什么重要作用?

光学工作台常常需要承载和移动各种光学元件和仪器,如望远镜、显微镜、光谱仪等,这些设备需要在空间中进行精确的定位和稳定支撑,而交叉导轨作为一种高精度、高刚度的直线传动元件,为光学工作台提供了重要的支撑和导向。 1>交叉…

Springboot将多个图片导出成zip压缩包

Springboot将多个图片导出成zip压缩包 将多个图片导出成zip压缩包 /*** 判断时间差是否超过6小时* param startTime 开始时间* param endTime 结束时间* return*/public static boolean isWithin6Hours(String startTime, String endTime) {// 定义日期时间格式DateTimeFormatt…

140. 单词拆分 II

140. 单词拆分 II Java错误代码&#xff1a;不该回溯数组的&#xff0c;回溯数组是以固定顺序来的&#xff0c;应该回溯字符串&#xff01; class Solution {StringBuilder sb;List<String> list;List<String> tmp;private String getString() {StringBuilder str…

Chrome网页前端组件调试模式,获取核心业务逻辑

进入网页&#xff0c;点击F12&#xff0c;弹出开发者工具对话框&#xff0c;如下图 定位目标组件&#xff0c;如按钮&#xff0c;修改html&#xff0c;插入οnclick"debugger"代码 在网页点击该按钮&#xff0c;触发调试模式 不停按F11&#xff0c;逐个检索文件…

Flink Flink中的分流

一、什么是分流 所谓“分流”&#xff0c;就是将一条数据流拆分成完全独立的两条、甚至多条流。也就是基于一个DataStream&#xff0c;定义一些筛选条件&#xff0c;将符合条件的数据拣选出来放到对应的流里。 二、基于filter算子的简单实现分流 其实根据条件筛选数据的需求…

Windows核心编程 进程

目录 一、进程概述 二、创建进程相关API Winexec ShellExecute CreateProcess 三、进程退出相关API ExitProcess TerminateProcess GetCurrentProcess GetExitCodeProcess 四、如何理解虚拟内存空间 五、关于UAC 一、进程概述 进程&#xff1a;正在运行的程序 程…

虾皮插件:优化Shopee商家店铺运营的利器

在如今竞争激烈的电商市场中&#xff0c;如何提升Shopee商家店铺的运营效率和销售业绩成为了摆在每个商家面前的一道难题。然而&#xff0c;幸运的是&#xff0c;虾皮插件-知虾的出现为商家们带来了一种全新的解决方案。本文将介绍虾皮插件的用途和优势&#xff0c;并详细介绍其…

Unity Android FireBase bugly报错查询

报错如下图&#xff0c;注意&#xff0c;标红的三处 使用的il2cpp和架构是arm64-v8a 那我们就可以根据这些去找对应的符号表&#xff0c;在unity安装目录下 Unity2020.3.33f1\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\il2cpp\Release\Symbols\arm64-v8a 找到l…

NVMe-oF E-JBOF设计解析:WD RapidFlex网卡、OpenFlex Data24

OpenFlex Data24 NVMe-oF Storage Platform WD的SN840 NVMeSSD新品并没有太吸引我注意&#xff0c;因为它还是PCIe 3.0接口的&#xff0c;要知道Intel的PCIe 4.0 SSD都已经推出了。 但上面这个NVMe-oF&#xff08;NVMe over Fabric&#xff09;EBOF&#xff08;区别于普通JBO…

评测|PolarDB MySQL 版 Serverless

评测&#xff5c;PolarDB MySQL 版 Serverless 目录 一、测试背景 1.1、云原生数据库 PolarDB Serverless新架构概念 1.2、Serverless资源弹性扩缩触发条件 二、PolarDB的Serverless能力与同类型产品进行对比 三、动态弹性升降资源的能力测试 3.1、测试资源 3.2、测试一…

Linux时间命令—— 显示时间,日历等

目录 1.date显示时间 1.1 常用的标记列表&#xff1a; 1.2 设定时间&#xff1a; 2.cal显示日历 3.时间戳 1.date显示时间 date 用法&#xff1a;date [OPTION] ... [FORMAT] 1.1 常用的标记列表&#xff1a; %H : 小时 (00..23) %M : 分钟 (00..59) %S : 秒 (00..61…

Java【XML 配置文件解析】

前言 最近考试周忙得要死&#xff0c;但我却不紧不慢&#xff0c;还有三天复习时间&#xff0c;考试科目几乎都还没学呢。今天更新一个算是工具类-XML文件的解析&#xff0c;感觉还是挺有用的&#xff0c;之后可以融进自己的项目里。 XML 配置文件解析 0、导入依赖 有点像我…