pca主成分分析python代码_PCA主成分分析(原理及R/Python代码实现)

不是专业数学和统计学生 就是把自己学的内容整理了一下 欢迎指正和讨论!!

一、原理理解

PCA(Principle Component Analysis) 是一种降维方法 目的是减少特征的数量 并且最大程度上保留数据里面有用的信息。我通俗地把它理解为坐标轴的旋转 将原本的n个维度转换为k个互相垂直的维度 用这些维度去描述我们的数据。

一般来说特征(feature)的数量(n)要少于观测值或样本(observation/sample)的数量(m) 所以可以说 主成分分析最后会给我们最多n个主成分 这也就是碎石图(scree plot)里面bar的数量 而bar的数值表示 每一个主成分解释了百分之多少的variation 如果我们说 将n维的原始数据降至k维 那么我们就取前k个维度。

所有人举的第一个例子 一定是教你把二维降到一维 所以我也搬来一个例子:这里面我们已经完成了mean normalisation。 Gene1和Gene2是两个原始维度 绿色的点是原始数据的分布形态 我们如果想降至一维 就是找一条线 能够涵盖尽可能多的variation 那么原则就是:投影距离最短 或者投影点(绿色叉叉)到原点的距离最长。我们找到了这条红色虚线 就是我们的PC1。

假设PC1这条线的斜率是0.25 我们可以说 一份的PC1 由四份Gene1和一份Gene2组成 这也就是为什么我们会说 主成分是feature们的线性组合了。

在这个直角三角形里面 我们把斜边长度规定为1 那么我们可以说 一份的PC1 由0.97份Gene1和0.242份Gene2组成 (比例不变)这两个数就叫 loading score(载荷得分)

我们在上上一步最大化的东西:每个投影点到原点的距离的平方和ssd 称为这个主成分的特征值 而ssd/n-1 称为这个主成分的variation。在这个例子里面 PC1的variation=15, PC2的=3 那么一共是15+3=18. PC1占了15/18 = 83%,PC2占了17% 。这也就是碎石图。

PC2与PC1垂直 每个主成分都彼此垂直 同理如下图:

如果更多feature 那我们也按照这种顺序 找到更多的主成分 也就更多的轴。

如果(就像我一样)需要复习一下矩阵的特征值eigenvalue和特征向量eigenvector,这个视频非常清楚:【工程数学基础】1_特征值与特征向量_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili​www.bilibili.com

二、python实现PCA

1)将数据(矩阵X)标准化

2)求cov(XT)的特征值和特征向量

ew, ev = np.linalg.eig(np.cov(X.T))

python里面求解特征值和特征向量的函数:numpy.linalg.eig(a)

ew:特征值。

ev:特征向量。

3) 我们要降至k维 那么就按照ew从大到小排列 取ev的前k列得到矩阵v(维度为n*k)那么新的矩阵就是X*v (维度为m*k) 我们就实现了从n维到k维的变换。

三、RSudio实现PCA

用到prcomp函数:

impPrComp = prcomp(data)

ggscreeplot(impPrComp) 可以将解释方差画出来 类似碎石图

impPrComp$sdev是特征值的平方根:

impPrComp$rotation就是荷载得分:(这里面有13个feature 因此一共13个主成分)

ggbiplot(impPrComp,alpha=.05,choices=c(2,3)) 我们将第二和第三主成分画出来:

原理部分看了这个视频 讲的很清楚【中字】主成分分析法(PCA)| 分步步骤解析 看完你就懂了!_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili​www.bilibili.com

我自己只能理解到这里了哈哈哈哈哈 欢迎指正欢迎讨论~~

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值