机器学习-PCA主成份分析详细解说及代码实现

机器学习-PCA主成份分析详细解说及代码实现老饼讲解 机器学习 PCA 主成份分析常用于降维 是一个基础 知名度极高和常用的方法本文介绍 PCA 的原理和本质 并介绍相关使用场景的用法 pca 代码

大家好,欢迎来到IT知识分享网。

本站原创文章,转载请说明来自《老饼讲解-机器学习》https://www.bbbdata.com/ml

目录

一. PCA主成分分析思想介绍

1.1 主成份分析思想

1.2 什么是主成份

二. PCA主成分分析的数学描述

2.1 主成份分析的数学表达

2.2 主成份系数矩阵A的约定

2.3 主成份分析需要输出什么

三. PCA的常用场景

3.1 PCA用于降维

3.2 PCA用于排名

3.3 PCA的实际使用

四. PCA总结与补充

4.1 主成份分析是什么

4.2 特别补充说明

五. 代码实现

5.1 调用sklearn包求解PCA

5.2 自写代码求解PCA


PCA主成份分析常用于降维,是一个基础、知名度极高和常用的方法

本文介绍PCA的原理和本质,并介绍相关使用场景的用法

一. PCA主成分分析思想介绍


  本节介绍PCA用于解决什么问题及PCA的思想,初步了解PCA是什么

1.1 主成份分析思想


  

 变量间的信息冗余
现有样本如下

机器学习-PCA主成份分析详细解说及代码实现

机器学习-PCA主成份分析详细解说及代码实现

机器学习-PCA主成份分析详细解说及代码实现


1.2 什么是主成份


机器学习-PCA主成份分析详细解说及代码实现


✍️补充
 为什么说维度的方差代表包含样本的信息量?
数据点在每个维度的波动幅度有大有小,
波动较小的,则说明各个样本在该维度区别不大,可以忽略
最极致的时候,方差为0,所有样本在该维度完全一样,该维度对样本完全没有区分度
波动较大的,则说明各个样本在该维度差异较大,是区别样本与样本的主要凭据





二. PCA主成分分析的数学描述


本节从数学角度进一步讲解主成份分析PCA是什么

2.1 主成份分析的数学表达



2.2 主成份系数矩阵A的约定


 其中,A的第 i 列[a_{1i},a_{2i},...,a_{ni}]^T就是主成份x'_i的系数
 
为了方便起见,约定A的第i列存放第i个主成份的系数,
 即如下


机器学习-PCA主成份分析详细解说及代码实现

这样x经过A的转换后,得到的变量就依次是第一主成份、第二主成份…


2.3 主成份分析需要输出什么


​主成份的主要输出有

机器学习-PCA主成份分析详细解说及代码实现

👉1.各个主成份的系数矩阵A                    
👉2.主成份样本数据X’                             
👉3.各个主成份权重占比Pr   

                 


三. PCA的常用场景


本节讲解PCA实际应用中的使用场景和思路

3.1 PCA用于降维


机器学习-PCA主成份分析详细解说及代码实现


3.2 PCA用于排名



3.3 PCA的实际使用




四. PCA总结与补充


简单总结和提炼PCA是什么,加固对PCA的特点的记忆

4.1 主成份分析是什么


机器学习-PCA主成份分析详细解说及代码实现

 它的背后意义就是将样本进行旋转(或将坐标轴进行旋转)


新变量的好处
 变量不相关
变量之间相关系数为0,即统计学上不相关,这样变量之间不存在信息冗余
 降维作用
 新变量可以用每个变量自身的方差,代表该变量的样本信息量,
因此可以忽略掉一些方差小(信息量少)的变量,起到降维的作用
 备注:即使降维,并不代表把原来的变量去掉了
例如原本有10个变量,降维时只取3个主成分变量,
但这3个主成份变量仍然是由原来的10个变量线性组合而成的








4.2 特别补充说明


关于样本中心化
上面所说的,都是直接将样本进行旋转

机器学习-PCA主成份分析详细解说及代码实现


五. 代码实现


本节编写代码实现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

(0)
上一篇 2025-12-15 07:26
下一篇 2025-12-15 07:45

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信