PCA(Principal Component Analysis,主成分分析)降维
1.PCA介绍
来源:视频https://www.bilibili.com/video/BV1E5411E71z/
笔记:https://www.bilibili.com/read/cv23587690?spm_id_from=333.999.0.0&jump_opus=1
PCA就是找坐标系,使得数据在保留一维数据,损失是最小的。
目标:只保留一个轴的时候(二维降到一维),信息保留最多
怎么样最好:
找到数据分布最分散的方向(方差最大),作为主成分(坐标轴)
- 去中心化(把坐标原点放在数据中心)
- 找坐标系(找到方差最大的方向)
问题是:怎么找到方差最大的方向?
白数据
拉伸决定了方差最大的方向是横或者纵
旋转决定了方差最大的方向的角度
怎么求解PCA
PCA缺点:离群点影响大
PCA与SVD(奇异值分解Singular Value Decomposition)
SVD中的右奇异矩阵V,就是PCA的主成分
PCA需要先求出协方差矩阵:计算量可能很大
SVD有两个好处:
1)一些SVD的实现算法可不求出协方差矩阵C也能求出右奇异矩阵V
2)PCA仅仅使用了SVD的右奇异矩阵V,没有使用到左奇异值矩阵U,那么U有什么用呢?
2.用PCA给将二维数据降成一维
参考:https://blog.csdn.net/Shiraka/article/details/122354007
https://blog.csdn.net/weixin_42010722/article/details/123826197
https://www.cnblogs.com/wei-520/p/12470843.html
from sklearn.decomposition import PCA
1. 函数原型及参数说明
这里只挑几个比较重要的参数进行说明。
sklearn.decomposition.PCA(n_components=None, copy=True, whiten=False)
n_components: int, float, None 或 string,PCA算法中所要保留的主成分个数,也即保留下来的特征个数,如果 n_components = 1,将把原始数据降到一维;如果赋值为string,如n_components='mle',将自动选取特征个数,使得满足所要求的方差百分比;如果没有赋值,默认为None,特征个数不会改变(特征数据本身会改变)。
copy:True 或False,默认为True,即是否需要将原始训练数据复制。
whiten:True 或False,默认为False,即是否白化,使得每个特征具有相同的方差。
2. PCA对象的属性
explained_variance_ratio_:返回所保留各个特征的方差百分比,如果n_components没有赋值,则所有特征都会返回一个数值且解释方差之和等于1。
n_components_:返回所保留的特征个数。
3.PCA常用方法
fit(X): 用数据X来训练PCA模型。
fit_transform(X):用X来训练PCA模型,同时返回降维后的数据。
inverse_transform(newData) :将降维后的数据转换成原始数据,但可能不会完全一样,会有些许差别。
transform(X):将数据X转换成降维后的数据,当模型训练好后,对于新输入的数据,也可以用transform方法来降维。
比如:对矩阵X = [[6,-4],[-3,5],[-2,6],[7,-3]]进行降维,从2维降到1维。
代码:
%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns; sns.set()
from sklearn.decomposition import PCArng = np.random.RandomState(1)
X = [[6,-4],[-3,5],[-2,6],[7,-3]]
X = np.array(X)
plt.scatter(X[:, 0], X[:,-1])pca = PCA(n_components=2)
pca.fit(X)print(pca.explained_variance_)#PCA解释方差;
print("新的轴向量:")
print(pca.components_)# PCA分量;
print("各维度投影方差占比分布:")
print(pca.explained_variance_ratio_)
print("各点在新轴上的投影:")
print(pca.transform(X))def draw_vector(v0, v1, ax=None):ax = ax or plt.gca()arrowprops=dict(arrowstyle='->',linewidth=2,shrinkA=0, shrinkB=0)ax.annotate('', v1, v0, arrowprops=arrowprops)# plot data
plt.scatter(X[:, 0], X[:, 1], alpha=0.2)
for length, vector in zip(pca.explained_variance_, pca.components_):v = vector * 3 * np.sqrt(length)draw_vector(pca.mean_, pca.mean_ + v)
plt.axis('equal');pca = PCA(n_components=1) # 降到一维
pca.fit(X)
print("新的轴向量:")
print(pca.components_)
print("各维度投影方差占比分布:")
print(pca.explained_variance_ratio_)
print("各点在新轴上的投影:")
print(pca.transform(X))
PCA(Principal Component Analysis,主成分分析)降维相关推荐
- pca主成分分析结果解释_SKLEARN中的PCA(Principal Component Analysis)主成分分析法
PCA(Principal Component Analysis)主成分分析法是机器学习中非常重要的方法,主要作用有降维和可视化.PCA的过程除了背后深刻的数学意义外,也有深刻的思路和方法. 1. 准 ...
- 【碎片知识(9)】PCA (Principal Component Analysis) [主成分分析]
离开很久啦,从Ph.D.套磁开始到全部settle down花费了太久的时间,在上周也终于把研究方向定下来了,终于手头的事告一段落了.未来是跨度三到四年的research生涯,无数师兄师姐告诫我,读博 ...
- Principal Component Analysis 主成分分析 【学习笔记】
Principal Component Analysis 主成分分析笔记 文章目录 Principal Component Analysis 主成分分析笔记 PCA是什么? 数据的线性变换 拉伸操作: ...
- 主成分分析PCA(principal component analysis)原理
PCA在很多方面均有应用,但是之前没有仔细探究过,最近看了一些博客和论文,做一下总结. 主成分分析(Principal Component Analysis,PCA), 是一种统计方法.通过正交变换将 ...
- 机器学习降维算法一:PCA (Principal Component Analysis)
引言: 机器学习领域中所谓的降维就是指采用某种映射方法,将原高维空间中的数据点映射到低维度的空间中.降维的本质是学习一个映射函数 f : x->y,其中x是原始数据点的表达,目前最多使用向量表达 ...
- JAVA实现PCA主成分分析_主成分分析PCA(principal component analysis)原理
PCA在很多方面均有应用,但是之前没有仔细探究过,最近看了一些博客和论文,做一下总结. 主成分分析(Principal Component Analysis,PCA), 是一种统计方法.通过正交变换将 ...
- 【机器学习sklearn】主成分分析PCA(Principal Component Analysis)
主成分分析方法PCA 前言 一.PCA是什么? 二.代码实践 使用MNIST数据集实现sklearn库里的主成分分析方法 不同主成分个数对应的可解释方差分析(Explained Variance) 总 ...
- 主成分分析碎石图_R: 主成分分析 ~ PCA(Principal Component Analysis)
本文摘自:http://www.cnblogs.com/longzhongren/p/4300593.html 以表感谢.感谢 综述: 主成分分析 因子分析 典型相关分析,三种方法的共同点主要是用来对 ...
- PCA(Principal Component Analysis 主成分分析)原理及MATLAB实现
关于PCA的原理参见: PCA原理 PCA:一种通过特征的线性组合来实现降维的方法,目的就是在尽可能好的代表原始数据的前提下,通过线性变换将样本数据投影到地位空间中. 如图示意,二维样本分别投影到e1 ...
- 如何利用PCA(Principal component analysis)来简化数据
本博文的的内容为以下: 降维技术 主成分分析(PCA) 对半导体数据进行降维处理 降维(dimensionality reduction)的目标就是对输入的数目进行消减,由此剔除数据中的噪声并提高机器 ...
最新文章
- 第二十一篇:伦理/道德Ethics
- AMD与intel CPU型号大全(接口)
- 当思科交换机密码遗忘之后......(附图)
- Lecture4_14_2.多维随机变量及其概率分布
- C++11并发编程:多线程std::thread
- php处理上传文件的步骤,php文件上传步骤
- h5评论直接显示代码_全套H5教程免费学,让你0基础自学制作H5页面
- dw怎么修改html框架的宽度,Dreamweaver (dw)cs6中div标签宽度和高度设置方法
- iOS 消息发送与转发详解
- USB网卡驱动分析(rt8152)
- 2017年第八届CSTQB®国际软件测试高峰论坛日程发布
- 日活两亿的快手,如何用AI理解视频、做好分发
- 聚石塔,云鼎,多多云-----有一种坑叫盲打
- 讯飞离线语音合成(离线资源包)
- 不在 sudoers 文件中。此事将被报告。
- 系统安装教程之硬盘分区格式化(MBR或GPT)
- Latex 插入大括号分类情况
- Kafka的概念与命令操作
- 单片机c语言ad与da转换实验报告,单片机AD与DA转换实验报告.docx
- MATLAB:一维插值算法
热门文章
- Android LinearLayout横排和竖排布局
- dell 服务器硬盘failed,DELL服务器PERC-5-6RAID操作系统下诊断硬盘故障(tty)手册.pdf
- 做一个即时利润表仪表板(不用等账都做完核对完关账后)
- ERROR: pyHook-1.5.1-cp37-cp37m-win_amd64.whl is not a supported wheel on this platform.安装pyhook报错
- 【二叉树专题】—— 相同的树、对称二叉树、二叉树的最大深度
- 835计算机原理,电子科技大学835线性代数考研资料汇总
- 正则表达式中问号?的正确用法
- lol登录服务器时显示乱码,win7系统登录LOL游戏出现乱码的解决方法
- C++中的reverse()函数
- 虚拟机网卡的配置---(NET模式)