主成分分析(Principal Component Analysis,PCA)

文章目录

    • 1. 总体主成分分析
    • 2. 样本主成分分析
    • 3. 主成分分析方法
      • 3.1 相关矩阵的特征值分解算法
      • 3.2 矩阵奇异值分解算法
    • 4. sklearn.decomposition.PCA

  • 主成分分析(Principal Component Analysis,PCA)是一种常用的无监督学习方法
  • 利用正交变换把由线性相关变量表示的观测数据 转换为 少数几个由线性无关变量表示的数据,线性无关的变量 称为 主成分
  • 主成分的个数通常小于原始变量的个数,所以PCA属于降维方法
  • 主要用于发现数据中的基本结构,即数据中变量之间的关系,是数据分析的有力工具,也用于其他机器学习方法的前处理
  • PCA属于多元统计分析的经典方法

1. 总体主成分分析

第一轴选取方差最大的轴 y1
在这里插入图片描述
主成分分析 的主要目的是降维,所以一般选择 k( k≪mk\ll mkm)个主成分(线性无关变量)来代替m个原有变量(线性相关变量),使问题得以简化,并能保留原有变量的大部分信息(原有变量的方差)。

在实际问题中,不同变量可能有不同的量纲,直接求主成分有时会产生不合理的结果。
为了消除这个影响,常常对各个随机变量实施规范化,使其均值为0,方差为1

主成分分析的结果可以用于其他机器学习方法的输入

  • 将样本点投影到以主成分为坐标轴的空间中,然后应用聚类算法,就可以对样本点进行聚类

定义:

假设 x\pmb xxxxmmm 维随机变量,均值为 μ\muμ,协方差矩阵为 Σ\SigmaΣ
随机变量 x\pmb xxxxmmm 维随机变量 y\pmb yyyy 的线性变换
yi=αiTx=∑k=1mαkixk,i=1,2,...,my_i = \alpha_i^T \pmb x = \sum\limits_{k=1}^m \alpha_{ki}x_k, \quad i=1,2,...,myi=αiTxxx=k=1mαkixk,i=1,2,...,m
其中 αiT=(α1i,α2i,...,αmi)\alpha_i^T = (\alpha_{1i},\alpha_{2i},...,\alpha_{mi})αiT=(α1i,α2i,...,αmi)
如果该线性变换满足以下条件,称之为总体主成分:

  • αiTαi=1,i=1,2,...,m\alpha_i^T\alpha_i = 1, i = 1, 2,...,mαiTαi=1,i=1,2,...,m
  • cov(yi,yj)=0(i≠j)cov (y_i,y_j) = 0(i \neq j)cov(yi,yj)=0(i=j)
  • y1y_1y1x\pmb xxxx 的所有线性变换中方差最大的y2y_2y2 是与 y1y_1y1 不相关的 x\pmb xxxx 的所有线性变换中方差最大的,以此类推,y1,y2,...,ymy_1,y_2,...,y_my1,y2,...,ym 称为第一主成分…第 mmm 主成分

假设 x\pmb xxxxmmm 维随机变量,其协方差矩阵 Σ\SigmaΣ 的特征值分别是 λ1≥λ2≥...≥λm≥0\lambda_1 \ge \lambda_2 \ge ... \ge \lambda_m \ge 0λ1λ2...λm0,特征值对应的单位特征向量分别是 α1,α2,...,αm\alpha_1,\alpha_2,...,\alpha_mα1,α2,...,αm,则 x\pmb xxxx 的第 iii 主成分可写作:
yi=αiTx=∑k=1mαkixk,i=1,2,...,my_i = \alpha_i^T \pmb x = \sum\limits_{k=1}^m \alpha_{ki}x_k, \quad i=1,2,...,myi=αiTxxx=k=1mαkixk,i=1,2,...,m
并且,x\pmb xxxx 的第 iii 主成分的方差是协方差矩阵 Σ\SigmaΣ 的第 iii特征值,即:
var(yi)=αiTΣαi=λivar (y_i) = \alpha_i^T\Sigma\alpha_i = \lambda_ivar(yi)=αiTΣαi=λi


主成分性质:

  • 主成分 y\pmb yyyy协方差矩阵是对角矩阵 cov(y)=Λ=diag(λ1,λ2,...,λm)cov(\pmb y) = \Lambda = diag(\lambda_1,\lambda_2,...,\lambda_m)cov(yyy)=Λ=diag(λ1,λ2,...,λm)

  • 主成分 y\pmb yyyy方差之和等于随机变量 x\pmb xxxx方差之和
    ∑i=1mλi=∑i=1mσii\sum\limits_{i=1}^m \lambda_i = \sum\limits_{i=1}^m \sigma_{ii}i=1mλi=i=1mσii
    其中 σii\sigma_{ii}σiixix_ixi 的方差,即协方差矩阵 Σ\SigmaΣ 的对角线元素

  • 主成分 yky_kyk 与变量 xix_ixi 的 相关系数 ρ(yk,xi)\rho(y_k,x_i)ρ(yk,xi) 称为因子负荷量(factor loading),它表示第 kkk 个主成分 yky_kyk 与变量 xix_ixi 的相关关系,即 yky_kykxix_ixi贡献程度
    ρ(yk,xi)=λkαikσii,k,i=1,2,...,m\rho(y_k, x_i) = \frac{\sqrt{\lambda_k}\alpha_{ik}}{\sqrt{\sigma_{ii}}},k,i=1,2,...,mρ(yk,xi)=σiiλkαik,k,i=1,2,...,m


2. 样本主成分分析

是基于样本协方差矩阵的主成分分析
给定样本矩阵 XXX
在这里插入图片描述
XXX 的样本协方差矩阵
S=[sij]m×n,sij=1n−1∑k=1m(xik−xˉi)(xjk−xˉj)i=1,2,...,m,j=1,2,...,m,其中xˉi=1n∑k=1nxikS = [s_{ij}]_{m \times n}, \quad s_{ij} = \frac{1}{n-1}\sum\limits_{k=1}^m(x_{ik}-\bar x_i)(x_{jk}-\bar x_j)\\ i = 1,2,...,m,\quad j = 1,2,...,m, 其中 \bar x_i = \frac{1}{n}\sum\limits_{k=1}^n x_{ik}S=[sij]m×n,sij=n11k=1m(xikxˉi)(xjkxˉj)i=1,2,...,m,j=1,2,...,m,xˉi=n1k=1nxik

给定样本 XXX,考虑 x\pmb xxxxy\pmb yyyy 的线性变换 y=ATx\pmb y = A^T \pmb xyyy=ATxxx
在这里插入图片描述
如果满足以下条件,称之为样本主成分:

  • 样本第一主成分 y1=α1Txy_1 = \alpha_1^T \pmb xy1=α1Txxx 是在 α1Tα1=1\alpha_1^T\alpha_1 = 1α1Tα1=1 条件下,使得 α1Txj(j=1,2,...,n)\alpha_1^T \pmb x_j (j=1,2,...,n)α1Txxxj(j=1,2,...,n) 的样本方差 α1TSα1\alpha_1^TS\alpha_1α1TSα1 最大的 x\pmb xxxx 的线性变换,以此类推。
  • 样本第 iii 主成分 yi=αiTxy_i = \alpha_i^T \pmb xyi=αiTxxx 是在 αiTαi=1\alpha_i^T\alpha_i = 1αiTαi=1αiTxj\alpha_i^T\pmb x_jαiTxxxjαkTxj(k<i,j=1,2,...,n)\alpha_k^T \pmb x_j \quad(k < i,j = 1,2,...,n)αkTxxxj(k<i,j=1,2,...,n)的样本协方差 αkTSαi=0\alpha_k^TS\alpha_i=0αkTSαi=0 条件下,使得 αiTxj(j=1,2,...,n)\alpha_i^T \pmb x_j (j=1,2,...,n)αiTxxxj(j=1,2,...,n) 的样本方差 αiTSαi\alpha_i^TS\alpha_iαiTSαi 最大的 x\pmb xxxx 的线性变换

3. 主成分分析方法

3.1 相关矩阵的特征值分解算法

  • 针对 m×nm \times nm×n 样本矩阵 XXX ,求样本相关矩阵 R=1n−1XXTR = \frac{1}{n-1}XX^TR=n11XXT
  • 再求样本相关矩阵kkk特征值和对应单位特征向量,构造正交矩阵
    V=(v1,v2,...,vk)V = (v_1,v_2,...,v_k)V=(v1,v2,...,vk)
  • VVV 的每一列对应一个主成分,得到 k×nk \times nk×n 样本主成分矩阵 Y=VTXY=V^TXY=VTX

3.2 矩阵奇异值分解算法

  • 针对 m×nm \times nm×n 样本矩阵 XXXX′=1n−1XTX' = \frac{1}{\sqrt{n-1}}X^TX=n11XT
  • 对矩阵 XXX 进行截断奇异值分解,保留 kkk 个奇异值、奇异向量
    得到 X′=USVTX' = USV^TX=USVT
  • VVV 的每一列对应一个主成分,得到 k×nk \times nk×n 样本主成分矩阵 Y=VTXY=V^TXY=VTX

4. sklearn.decomposition.PCA

sklearn.decomposition.PCA 官网介绍

class sklearn.decomposition.PCA(n_components=None, copy=True,
whiten=False, svd_solver='auto', tol=0.0, 
iterated_power='auto', random_state=None)

参数:
n_components:保留主成分个数,没有赋值,特征个数不变

属性:
components_:主成分
explained_variance_:各特征方差
explained_variance_ratio_:各特征方差百分比
singular_values_:主成分的奇异值
n_components_:保留特征个数

方法:
在这里插入图片描述

import numpy as np
from sklearn.decomposition import PCA
import matplotlib.pyplot as pltX = np.array([[-1, -1], [-2, -1], [-3, -2], [1, 1], [2, 1], [3, 2]])
plt.scatter(X[:, 0], X[:, 1])
plt.show()
for n in range(1, 3):print("PCA n_components = {}".format(n))pca = PCA(n_components=n)pca.fit(X)print("特征方差")print(pca.explained_variance_)print("特征方差占比")print(pca.explained_variance_ratio_)print("主成分奇异值")print(pca.singular_values_)print("主成分")print(pca.components_)print("主成分个数")print(pca.n_components_)

在这里插入图片描述

PCA n_components = 1
特征方差
[7.93954312]
特征方差占比
[0.99244289]
主成分奇异值
[6.30061232]
主成分
[[-0.83849224 -0.54491354]]
主成分个数
1
PCA n_components = 2
特征方差
[7.93954312 0.06045688]
特征方差占比
[0.99244289 0.00755711]
主成分奇异值
[6.30061232 0.54980396]
主成分
[[-0.83849224 -0.54491354][ 0.54491354 -0.83849224]]
主成分个数
2

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

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

相关文章

【DKN】(二)config.py

class BaseConfig():"""General configurations appiled to all models"""num_epochs 2 #迭代次数num_batches_show_loss 100 # Number of batchs to show lossnum_batches_validate 1000 # Number of batchs to check metrics on valid…

log4net异步写入日志_微信支付万亿日志在Hermes中的实践

导语 | 微信支付日志系统利用 Hermes 来实现日志的全文检索功能&#xff0c;自从接入以来&#xff0c;日志量持续增长。目前单日入库日志量已经突破万亿级&#xff0c;单集群日入库规模也已经突破了万亿&#xff0c;存储规模达 PB 级。本文将介绍微信支付日志系统在 Hermes 上的…

使用Axis2调用Web Service

本文作为使用Axis2创建Web Service的后篇&#xff0c;主要介绍如何使用Axis2调用Web Service。有关准备工作详情请参考前篇的内容。 在Eclipse的Packge Explorer中右键点击New&#xff0c;选择Other项&#xff0c;新建一个Axis2 Code Genrateor向导。点击Next&#xff0c;打开向…

LeetCode 旋转数组 系列

旋转数组系列&#xff0c;多数是排序数组进行了旋转&#xff0c;可以使用二分查找。做一个集合&#xff0c;如还有缺失的&#xff0c;可以留言指出&#xff0c;一起加油&#xff01; LeetCode 33. 搜索旋转排序数组&#xff08;二分查找&#xff09; LeetCode 81. 搜索旋转排…

如何并行运行程序

参考了官方文档&#xff0c; torch.nn.parallel.DataParallel 以及https://zhuanlan.zhihu.com/p/102697821 在运行此DataParallel模块之前&#xff0c;并行化模块必须在device_ids [0]上具有其参数和缓冲区。在执行DataParallel之前&#xff0c;会首先把其模型的参数放在devi…

matlab打开笔记本摄像头_matlab窗口调用摄像头

更改”.m“文件&#xff1a;function varargout untitled1(varargin)% UNTITLED1 MATLAB code for untitled1.fig% UNTITLED1, by itself, creates a new UNTITLED1 or raises the existing% singleton*.%% H UNTITLED1 returns the handle to a new UNTITLED…

session过期后登陆页面跳出iframe页面问题

登陆页面增加javascript&#xff1a;function window.onload(){if(window.parent.length>0)window.parent.locationlocation;}转载于:https://www.cnblogs.com/shenyunjun420/archive/2009/09/29/1576400.html

LeetCode 1143. 最长公共子序列(动态规划)

1. 题目 给定两个字符串 text1 和 text2&#xff0c;返回这两个字符串的最长公共子序列的长度。 一个字符串的 子序列 是指这样一个新的字符串&#xff1a;它是由原字符串在不改变字符的相对顺序的情况下删除某些字符&#xff08;也可以不删除任何字符&#xff09;后组成的新…

【DKN】(四)train.py

内容 try: #不用多言&#xff0c; 获得该模块下的model_name函数Model getattr(importlib.import_module(f"model.{model_name}"), model_name)config getattr(importlib.import_module(config), f"{model_name}Config") except AttributeError:print(…

用promise封装ajax_ES6-promise封装AJAX请求

【摘要】ES6-promise封装AJAX请求考必过小编为大家整理了关于ES6-promise封装AJAX请求的信息&#xff0c;希望可以帮助到大家&#xff01;ES6-promise封装AJAX请求标签&#xff1a;const状态码setreject对象响应状态ISErequest// 接口地址:https://api.apiopen.top/getJoke// 1…

REST和SOAP Web Service的比较(写得非常清晰易懂,转载于此)

本文转载自他人的博客&#xff0c;ArcGIS Server 推出了 对 SOAP 和 REST两种接口&#xff08;用接口类型也许并不准确&#xff09;类型的支持,本文非常清晰的比较了SOAP和Rest的区别联系&#xff01;REST似乎在一夜间兴起了&#xff0c;这可能引起一些争议&#xff0c;反对者可…

LeetCode 1249. 移除无效的括号(栈+set / deque)

1. 题目 给你一个由 (、) 和小写字母组成的字符串 s。 你需要从字符串中删除最少数目的 ‘(’ 或者 ‘)’ &#xff08;可以删除任意位置的括号)&#xff0c;使得剩下的「括号字符串」有效。 请返回任意一个合法字符串。 有效「括号字符串」应当符合以下 任意一条 要求&…

【DKN】(七)dataset.py【未完】

内容 里面有的函数在这里https://blog.csdn.net/qq_35222729/article/details/119882362 try:config getattr(importlib.import_module(config), f"{model_name}Config") except AttributeError:print(f"{model_name} not included!")exit()class BaseDa…

php raabitmq中间件_rabbitMQ消息中间件环境配置及原理了解

视频教程一、Docker 入门Docker是什么&#xff1f;Docker 是一个开源的应用容器引擎&#xff0c;你可以将其理解为一个轻量级的虚拟机&#xff0c;开发者可以打包他们的应用以及依赖包到一个可移植的容器中&#xff0c;然后发布到任 何流行的 Linux 机器上。为什么要使用 Docke…

CSS 中的定位:relative,absolute

今天碰到一个定位问题&#xff0c;问题解决不好&#xff0c;于是花了大量的时间&#xff0c;调试了好久&#xff0c;得出了一些结果&#xff1a;1、如果有两个不交叉的盒子位于一个大盒子里面&#xff0c;位于上边的盒子的定位为relative&#xff0c;而下边的那个盒子的定位则是…

【DKN】(六)KCNN.py

内容 import torch import torch.nn as nn import torch.nn.functional as F from src.model.general.attention.additive import AdditiveAttentiondevice torch.device("cuda:0" if torch.cuda.is_available() else "cpu")class KCNN(torch.nn.Module):…

北京精雕现状_6秒精密加工,日本走下神坛,北京精雕也做了一个!

各位社友还记得吗&#xff0c;机械社区之前分享过——日本6秒的精密加工火遍制造业圈子~▲点击上图 查看日本怎么用6s让世界惊奇在一阵惊呼赞叹中&#xff0c;一部分人也表示不服&#xff01;比如&#xff0c;国内一位牛人也展示了他的产品。一起看看视频介绍吧——而近日&…

LeetCode 859. 亲密字符串

1. 题目 给定两个由小写字母构成的字符串 A 和 B &#xff0c;只要我们可以通过交换 A 中的两个字母得到与 B 相等的结果&#xff0c;就返回 true &#xff1b;否则返回 false 。 示例 1&#xff1a; 输入&#xff1a; A "ab", B "ba" 输出&#xff1a…

ASP.Net快速开发新闻系统 在线播放

http://www.so138.com/sov/d19a5913-88cf-4abf-a487-69293bb0c403.html转载于:https://www.cnblogs.com/freedom831215/archive/2009/10/03/1577631.html

【DKN】(五)attention.py

感觉还是挺简单&#xff0c;这里只是方便之后回来瞅瞅 import torch import torch.nn as nn import torch.nn.functional as Fclass Attention(torch.nn.Module):"""Attention Net.Input embedding vectors (produced by KCNN) of a candidate news and all of…