直接上代码:

x = np.random.rand(10,5) #随机生成一组样本
x -= x.mean(axis=0)   # 见详注1
C = x.T.dot(x)         # 计算自协方差矩阵
lam,v= lina.eig(C)     # 特征分解,v是
new_index = np.argsort(lam)[::-1]    # 特征值排序,见详注2
A = -v[:,new_index]                     # 得到A
w = x.dot(A)                        # 计算变换后的特征
r = lam[new_index]/lam.sum()        # 计算所有特征对应的贡献率

测试一下:

w[:,:2]        # 新特征的前2个>>> array([[-0.3939524518, -0.4184678305],[-0.5907434013,  0.2033346207],[-0.4585388051, -0.111367225 ],[ 0.4552495673, -0.0405062598],[-0.2335902798, -0.4260334862],[ 0.4523182771,  0.039755097 ],[ 0.0902288594,  0.1869543779],[ 0.089419155 ,  0.7656098218],[ 0.7645053936, -0.3353675658],[-0.1748963144,  0.1360884499]])r           # 各个特征值对应的贡献率>>> array([0.4026073116, 0.2589988934, 0.2088275432, 0.0902665298,0.0392997221])

对比SKLEARN实现:

pca = PCA(n_components=2)pca.fit(x)  # x还是最开始那个xpca.explained_variance_ratio_>>> array([0.4026073116, 0.2589988934])    # 前2个特征对应的贡献率(完全一致)pca.transform(x)                               # 降维变换(完全一致)>>> array([[-0.3939524518, -0.4184678305],[-0.5907434013,  0.2033346207],[-0.4585388051, -0.111367225 ],[ 0.4552495673, -0.0405062598],[-0.2335902798, -0.4260334862],[ 0.4523182771,  0.039755097 ],[ 0.0902288594,  0.1869543779],[ 0.089419155 ,  0.7656098218],[ 0.7645053936, -0.3353675658],[-0.1748963144,  0.1360884499]])

计算变换后的特征差值:

 w1 = w[:,0]w2 = pca.transform(c)[:,0]
((w1-w2)**2).sum()
>>> 2.2980196096428498e-30

贡献率的值:

pca.explained_variance_ratio_ - r[:2]
>>> array([ 1.1102230246e-16, -1.6653345369e-16])

详细注解见: https://blog.csdn.net/cauchy7203/article/details/107421996

matlab pca降维_手撸PCA(Python七行代码实现)相关推荐

  1. Python第一行代码

    Python第一行代码 前言 'module' object is not callable 前言 其实说起来也不算是Python的第一行代码,或第一次写Python,只不过在学习Python的时候遇 ...

  2. python人脸识别代码百度ai_强大的AI!Python几行代码,就能预测未来孩子的长相?...

    这次,将百度智能云中的人脸识别功能与python结合起来进行实验花了一些时间.结果非常令人满意,而且过程非常简单而不复杂.或许,你可以整合你孩子的外貌.让我们一起敲击键盘. 准备百度人工智能开放平台账 ...

  3. python 250行代码开发一个贪吃蛇

    python 250行代码开发一个贪吃蛇 1. 前提工作准备 2. 全局变量的定义与包的导入 3. 游戏开始界面初始化 4. 游戏界面的设置 4.1 游戏界面,使用一个Point类进行划分 4.2 预 ...

  4. Python 8行代码模拟鼠标自动删除微信收藏

    上回我们提到了用 pyuserinput 进行模拟键盘鼠标操作,结果发现很多同学都回复无法安装成功,即便安装成功了还是存在很多问题.确实,pyuserinput存在不少问题,包括其安装的pymouse ...

  5. python pca降维_机器学习的降维打击

    文章发布于公号[数智物语] (ID:decision_engine),关注公号不错过每一篇干货. 来源 | SAMshare(id:SAMshare) 作者 | samshare "本次主要 ...

  6. python pca降维_机器学习之sklearn中的降维算法

    1. PCA与SVD sklearn中降维算法都被包括在模块decomposition中,这个模块本质是一个矩阵分解模块.在过去的十年中,如果要讨论算法进步的先锋,矩阵分解可以说是独树一帜.矩阵分解可 ...

  7. python pca降维_协方差矩阵的计算、PCA

    python默认矩阵X每一行是一个向量,因此一共有m行个数据,对于每一个数据有统计的维度个数为列数n,因此无偏估计用的是对于某个维度的1/(m-1)来归一化得到矩阵A,然后用的是A转置矩阵乘A得到协方 ...

  8. pca 主成分分析_超越普通PCA:非线性主成分分析

    pca 主成分分析 TL;DR: PCA cannot handle categorical variables because it makes linear assumptions about t ...

  9. 多元线性回归算法python实现_手写算法-Python代码推广多元线性回归

    1.梯度下降-矩阵形式 上篇文章介绍了一元线性回归,包括Python实现和sklearn实现的实例.对比,以及一些问题点,详情可以看这里: 链接: 手写算法-Python代码实现一元线性回归 里面封装 ...

最新文章

  1. 服务器端执行javascript脚本
  2. 只要你的AI算法能比小白鼠聪明,DeepMind的这20万奖金请拿走
  3. 第六章|网络编程-socket开发
  4. TabActivity 切换到后台遇到的问题
  5. java中主函数抛出的异常怎么解决_java – 从递归函数中抛出异常
  6. php redis新增数据类型,Redis有哪几种数据类型
  7. PC如何控制device进入suspend模式
  8. php判断数组下标,php判断json或者数组格式与给定格式是否一致
  9. 计算机操作系统指导书,《计算机操作系统》实验指导书-2015
  10. C++day13 学习笔记
  11. Windows下的SQL Server备份文件BAK在Linux环境下还原遇到的问题
  12. 【剑指 offer】(二十二)—— 栈的压入、弹出序列
  13. 阿里云云呼叫中心——软电话SDK前端接入
  14. 越南语常用的40句口语
  15. 猜数字小游戏(随机生成’三剑客‘)
  16. 二十一、JVM可视化监控工具
  17. m扩频通信系统在瑞利信道中的误码率性能matlab仿真
  18. SpringBoot瘦身打包部署
  19. word文档导航栏中的同级菜单不对齐
  20. 夺宝网站服务器配置,3月27日服务器公告:夺宝小分队

热门文章

  1. 这只猫在云端定居了?边缘计算在天猫精灵云应用上的落地实践
  2. 平台式可复用的应用集成能力,助您敏捷、高效的完成企业数字化转型
  3. 如何在 Flink 中规划 RocksDB 内存容量?
  4. 五个问答,告诉你阿里云对象存储如何助力钉钉战胜业务洪峰
  5. 5年时间,我从开发做到总裁的秘籍--如何提升技术型管理者的领导力
  6. 可应用于实际的14个NLP突破性研究成果(二)
  7. Dubbo Mesh | 阿里巴巴中间件团队在 Service Mesh 的实践和探索(附PPT)
  8. EDAS再升级!全面支持Spring Cloud应用
  9. 如果还不懂如何使用 Consumer 接口,就来看这篇!
  10. 什么是Docker?看这一篇文章就够了