网站首页 > 技术文章 正文
PCA主成分分析
总述
主成分分析(Principal Component Analysis,PCA)是一种多变量统计方法,它是最常用的降维方法之一,通过正交变换将一组可能存在相关性的变量数据转换为一组线性不相关的变量,转换后的变量被称为主成分。PCA主要用于发现数据中的基本结构,及数据中变量之间的关系,也用于其他机器学习的数据预处理。
主成分分析主要两种算法:协方差矩阵的特征值分解和数据矩阵的奇异值分解方法。
原理
首先将给定的数据进行规范化,使得数据每一个变量的平均值为0,方差为1。之后对数据进行正交变换,原来由线性相关变量表示的数据,通过正交变换变成由若干个线性无关的新变量表示的数据。新变量是可能的正交变换中变量的方差的和(信息保存)最大的,方差表示在新变量上信息的大小,将新变量依次称为第一主成分、第二主成分等。
通俗一点来说,就是问如何表示你的家人,不必将你的七大姑八大姨全部拿出来介绍,选取最典型的代表,这个典型就是要其代表性最强的、信息保存最大的家里人来表示你的家族。
而如何具体量化这种相关或者不相关,就引入了协方差的概念
算法流程
传统的主成分分析通过数据的协方差矩阵或者相关矩阵的特征值分解进行,现在常用的方法是通过数据矩阵的奇异值分解进行。
以下描述利用奇异值分解进行主成分分析
输入:m*n样本矩阵 X,其每一行元素的均值为零;
输出:k*n样本主成分 Y。
参数:主成分个数k
1)构造新的m*n矩阵X1
2)对矩阵X1进行截断奇异值分解得到有k个奇异值、奇异向量。矩阵V的前k列构成k个样本主成分。
3)求k*n样本主成分矩阵
使用指南
from sklearn.decomposition import PCA
PCA(n_components=None, copy=True, whiten=False)
sklearn提供了直接调用的API接口,其参数分别表示为:
n_components:
意义:PCA算法中所要保留的主成分个数n,也即保留下来的特征个数n
类型:int 或者 string,缺省时默认为None,所有成分被保留。
赋值为int,比如n_components=1,将把原始数据降到一个维度。
赋值为string,比如n_components='mle',将自动选取特征个数n,使得满足所要求的方差百分比。
copy:
意义:表示是否在运行算法时,将原始训练数据复制一份。若为True,则运行PCA算法后,原始训练数据的值不 会有 任何改变,因为是在原始数据的副本上进行运算;若为False,则运行PCA算法后,原始训练数据的 值会改,因为是在原始数据上进行降维计算。
类型:bool,True或者False,缺省时默认为True。
whiten:
意义:白化,使得每个特征具有相同的方差。
类型:bool,缺省时默认为False
实际效果
在最近的kaggle比赛Ubiquant Market Prediction中,利用DNN的基础上,再加上PCA确实能够提高成绩。
猜你喜欢
- 2024-10-28 编程大佬告诉你人工智能需要学习哪些数学知识
- 2024-10-28 NumPy之:多维数组中的线性代数 多维数组元素之间的关系是线性的吗
- 2024-10-28 相机模型与张氏标定 相机标定的原理
- 2024-10-28 C代码快速傅里叶变换-分类和推理-常微分和偏微分方程
- 2024-10-28 认识“模拟进化算法” 模拟进化怪物
- 2024-10-28 3D点云平面拟合算法 3d点云项目
- 2024-10-28 黎曼猜想突破作者首次公开讲解,陶哲轩送上总结
- 2024-10-28 【杂谈】cholesky分解——对称正定矩阵最好的分解
- 2024-10-28 降维算法: 奇异值分解SVD 降维的算法
- 2024-10-28 「周末AI课堂」线性降维方法(理论)|机器学习你会遇到的“坑”
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)