大家好,欢迎来到IT知识分享网。
本站原创文章,转载请说明来自《老饼讲解-机器学习》https://www.bbbdata.com/ml
目录
PCA主成份分析常用于降维,是一个基础、知名度极高和常用的方法
本文介绍PCA的原理和本质,并介绍相关使用场景的用法
一. PCA主成分分析思想介绍
本节介绍PCA用于解决什么问题及PCA的思想,初步了解PCA是什么
1.1 主成份分析思想
变量间的信息冗余
现有样本如下
1.2 什么是主成份
✍️补充
为什么说维度的方差代表包含样本的信息量?
数据点在每个维度的波动幅度有大有小,
波动较小的,则说明各个样本在该维度区别不大,可以忽略
最极致的时候,方差为0,所有样本在该维度完全一样,该维度对样本完全没有区分度
波动较大的,则说明各个样本在该维度差异较大,是区别样本与样本的主要凭据
二. PCA主成分分析的数学描述
本节从数学角度进一步讲解主成份分析PCA是什么
2.1 主成份分析的数学表达
2.2 主成份系数矩阵A的约定
其中,A的第 i 列
就是主成份
的系数
为了方便起见,约定A的第i列存放第i个主成份的系数,
即如下
这样x经过A的转换后,得到的变量就依次是第一主成份、第二主成份…
2.3 主成份分析需要输出什么
主成份的主要输出有
👉1.各个主成份的系数矩阵A
👉2.主成份样本数据X’
👉3.各个主成份权重占比Pr
三. PCA的常用场景
本节讲解PCA实际应用中的使用场景和思路
3.1 PCA用于降维
3.2 PCA用于排名
3.3 PCA的实际使用
四. PCA总结与补充
简单总结和提炼PCA是什么,加固对PCA的特点的记忆
4.1 主成份分析是什么
它的背后意义就是将样本进行旋转(或将坐标轴进行旋转)
新变量的好处
变量不相关
变量之间相关系数为0,即统计学上不相关,这样变量之间不存在信息冗余
降维作用
新变量可以用每个变量自身的方差,代表该变量的样本信息量,
因此可以忽略掉一些方差小(信息量少)的变量,起到降维的作用
备注:即使降维,并不代表把原来的变量去掉了
例如原本有10个变量,降维时只取3个主成分变量,
但这3个主成份变量仍然是由原来的10个变量线性组合而成的
4.2 特别补充说明
关于样本中心化
上面所说的,都是直接将样本进行旋转
五. 代码实现
本节编写代码实现PCA的求解,
先调sklearn包求解,再自行写代码求解,并比较结果是否一致
5.1 调用sklearn包求解PCA
下面先通过sklearn包求解PCA中的A,代码如下
# -*- coding: utf-8 -*- """ 主成份分析求解DEMO(调用sklearn) 本代码来自老饼讲解-机器学习:www.bbbdata.com """ from sklearn.datasets import load_iris from sklearn.decomposition import PCA # 加载数据 iris = load_iris() X = iris.data # 样本X x_mean = X.mean(axis=0) # 样本的中心 # 用PCA对X进行主成份分析 clf = PCA() # 初始化PCA对象 clf.fit(X) # 对X进行主成份分析 # 打印结果 print('主成份系数矩阵A:\n A=',clf.components_) print('主成份方差var:',clf.explained_variance_) print('主成份贡献占比(方差占比)Pr:',clf.explained_variance_ratio_) # 获取主成份数据 y = clf.transform(X) # 通过调用transform方法获取主成份数据 y2= (X-x_mean)@clf.components_.T # 通过调用公式计算主成份数据
运行结果如下
主成份系数矩阵A: A= [[ 0. 0. -0. -0.] [-0.0 0. 0. 0. ] [ 0. -0. 0.0 0.] [ 0. -0.0 0. -0.]] 主成份方差var: [4. 0. 0.0 0.0] 主成份贡献占比(方差占比)Pr: [0. 0.0 0.0 0.00]
5.2 自写代码求解PCA
不借助sklearn包,自行编写代码求解PCA的python代码如下
import numpy as np from sklearn.datasets import load_iris # 加载数据 iris = load_iris() X = iris.data x_mean = X.mean(axis=0) # 样本的中心 # 通过SVD分解,得到A与XA每列的方差var U,S,VT = np.linalg.svd((X-x_mean)/np.sqrt(X.shape[0]-1)) # 注意,numpy的SVD分解出的是US(VT) A = VT.T # 主成份系数矩阵A var = S*S # 方差 pr = var/var.sum() # 方差占比 #打印结果 print('主成份系数矩阵A:\n A=',A) print('主成份方差var:',var) print('主成份贡献占比(方差占比)Pr:',pr) # 获取主成份数据 y= (X-x_mean)@A # 通过调用公式计算主成份数据
运行结果如下
主成份系数矩阵A: A= [[ 0. -0. 0. 0.] [-0.0 -0. -0. -0. ] [ 0. 0. -0.0 -0.] [ 0. 0.0 -0. 0.]] 主成份方差var: [4. 0. 0.0 0.0] 主成份贡献占比(方差占比)Pr: [0. 0.0 0.0 0.00]
可以看到,自行编写代码的结果与调用sklearn包是一致的
没错,PCA的求解就是这么简单,仅是进行一下SVD分解即可
相关文章
《老饼讲解|【逻辑回归】逻辑回归损失函数交叉熵形式的理解》
《老饼讲解|【原理】CART决策树算法实现流程》
《老饼讲解|【原理】逻辑回归原理》
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/113372.html




就是主成份



