PCA主成分分析

import numpy as np
class PCA:def __init__(self,x,R=None):self.x = np.array(x)self.dim = self.x.shape[-1]self.num = self.x.shape[0]self.R = Rself.X = Noneself.r_list = Noneself.r_v = Noneself.nk = Noneself.X_ = Nonedef standetlize(self):self.X = []for i in range(self.dim):mean = np.mean(self.x[:,i])sii = 1/(self.num-1) * np.sum((self.x[:,i] - mean)**2)self.X.append((self.x[:, i]-mean)/sii)self.X = np.transpose(self.X)def get_R(self):self.R = 1/(self.num-1)*(self.X.T.dot(self.X))def get_r_rv(self,x):x = np.array(x)s_matrix = x.T.dot(x)r_list, r_v = np.linalg.eig(s_matrix)index_rank = np.argsort(-r_list)r_list = r_list[index_rank]r_v = r_v.T[index_rank]return r_list,r_vdef fit(self,k=None,sup=None,way='R'):self.standetlize()if way == 'R':self.get_R()r_list,r_v = self.get_r_rv(self.R)nk = r_list/np.sum(r_list)if sup:for i in range(len(nk)):if np.sum(nk[:i+1]) > sup:k = i+1breakif k:r_v = r_v[:k]r_list = r_list[:k]self.r_v = r_vself.r_list = r_listself.nk = nk[:k]y = []for i in range(k):y.append(r_v[i].dot(self.X.T))y = np.transpose(y)if way == 'SVD':self.X_ = 1/np.sqrt(self.num-1)*self.Xu,s,v = np.linalg.svd(self.X_)y = v[:,:k].T.dot(self.X.T)y = np.transpose(y)return ydef get_rv(self):return self.r_vdef get_r_list(self):return self.r_listdef get_nk(self):return self.nkdef get_factor_loading(self):return [np.sqrt(self.r_list[i])*(self.r_v[i]) for i in range(len(self.r_list))]def get_vi(self):return np.sum([(np.sqrt(self.r_list[i]) * (self.r_v[i]))**2 for i in range(len(self.r_list))],0)def main():x = [[2,9,2],[3,4,5],[3,5,2],[4,5,9],[5,6,1],[7,8,0]]pca = PCA(x)print(pca.fit(sup=0.7))print(pca.get_factor_loading())print(pca.get_vi())print(pca.fit(k=2,way="SVD"))if __name__ == '__main__':main()#----------result----------------
/usr/bin/python3 /Users/zhengyanzhao/PycharmProjects/tongjixuexi/shixian2/PVC.py
[[ 0.01436405 -0.98056186][-0.62392994  0.24417043][-0.37825673  0.00160078][-0.35639953  0.32072976][ 0.27000345  0.20323966][ 1.0742187   0.21082123]]
[array([ 0.27913238,  0.22163074, -0.1237391 ]), array([ 0.15944099, -0.1768521 ,  0.04290707])]
[0.10333632 0.08039685 0.01715238]
[[ 0.01887854 -0.95392328][-0.58760185  0.29494971][-0.44973126  0.00587801][-0.13200766  0.41115041][ 0.17525954  0.14729349][ 0.97520268  0.09465167]]

统计学习方法第十六章作业:PCA主成分分析算法 代码实现相关推荐

  1. 统计学习方法第十九章作业:马尔可夫链蒙特卡罗法、吉布斯抽样算法(书上题目) 代码实现

    马尔可夫链蒙特卡罗法 作业19.7 import numpy as np import matplotlib.pyplot as plt from scipy.stats import betacla ...

  2. 统计学习方法第十五章作业:SVD矩阵分解 代码实现 及其在推荐的应用和矩阵压缩意义

    SVD矩阵分解 import numpy as npclass SVD:def __init__(self,x):self.x = np.array(x)def get_r_rv(self,x):x ...

  3. 统计学习方法第十四章作业:聚类—层次聚类聚合/分裂算法、K_means聚类算法 代码实现

    层次聚类聚合/分裂算法 import numpy as np import copy import matplotlib.pyplot as pltclass Hierarchical_cluster ...

  4. 操作系统导论OSTEP 第十六章作业答案 分段

    答案Github库 https://github.com/jzplp/OSTEP-Answers 问题 1 答案 [testjz@localhost vm-segmentation]$ ./segme ...

  5. 嵌入式实时操作系统ucos-ii_「正点原子NANO STM32开发板资料连载」第三十六章 UCOSII 实验 1任务调度...

    1)实验平台:alientek NANO STM32F411 V1开发板2)摘自<正点原子STM32F4 开发指南(HAL 库版>关注官方微信号公众号,获取更多资料:正点原子 第三十六章 ...

  6. 《Reids 设计与实现》第十六章 集群(下)

    <Reids 设计与实现>第十六章 集群(下) 文章目录 <Reids 设计与实现>第十六章 集群(下) 七.复制与故障转移 1.设置从节点 2.故障检测 3.故障转移 4.选 ...

  7. 【JAVA SE】第十六章 进程、线程、同步锁和线程锁的简介

    第十六章 进程.线程.同步锁和线程安全问题 文章目录 第十六章 进程.线程.同步锁和线程安全问题 一.进程 1.基本介绍 2.进程模型 二.线程 1.基本介绍 2.线程的生命周期 3.线程的优先级 4 ...

  8. 机器学习入门-西瓜书总结笔记第十六章

    西瓜书第十六章-强化学习 一.任务与奖赏 二.K-摇臂赌博机 1.探索与利用 2. ϵ \epsilon ϵ-贪心 3.Softmax 三.有模型学习 1.策略评估 2.策略改进 3.策略迭代与值迭代 ...

  9. 大学计算机基础试题第六章,大学计算机基础第六章作业答案

    第六章作业 一单选题(错一题,扣1分) http://www.doczj.com/doc/9acd8d2d4b73f242336c5fb3.htmlN和W AN是两种不同类型的计算机网络,后者可以(D ...

最新文章

  1. 别再写满屏的try-catch了,真丑,全局异常处理不会吗?
  2. git换行符之autoCRLF配置的意义
  3. MATLAB常用的学习的网站
  4. 青少年蓝桥杯_2020_每日一题_11.03_输出M与N之间符合要求的数据
  5. 【codevs2333】【BZOJ2002】弹飞绵羊,第一次的LCT
  6. Markdown 编辑器使用
  7. devexpress 高分辨率显示问题_144Hz高刷+曲屏超2k 蚂蚁电竞显示器ANT271QC 小白到专业电竞跳板...
  8. set up BU Printer on ubuntu
  9. 地理信息系统(第二版)汤国安等编著第一章1.1-1.2节
  10. 小问题:要把pdg格式的jpg图片还原成pc能显示的jpg图片
  11. python词云图片在哪儿打开_如何用python创建词云图片
  12. java导出可运行文件格式,|java导出excel,excel打不开,报文件格式无效,怎么解决!...
  13. 2010南非世界杯32强手绘海报
  14. 无线鼠标插上去没反应
  15. CentOS_7配置静态ip地址
  16. mysql数据库击穿_缓存穿透、击穿、雪崩区别和解决方案
  17. Ruby中按照指定编码读取文件
  18. 没什么经验的UE/UI设计师如何应对面试
  19. UR机器人(一):坐标系及位姿表示方法
  20. linux怎么共享打印机驱动程序,为samba共享的打印机添加Windows驱动

热门文章

  1. 测试教程网.unittest教程.7. 各种断言方法
  2. 20170728xlVBA改转置一例
  3. 第三方登录之微信登录,基于ThinkSDK
  4. ubuntu安装SSH2
  5. 真正优秀的程序员有哪些与众不同之处?
  6. 从蛋白质结构到功能的生物信息学研究 From Protein Structure to Function with Bioinformatics PDF
  7. 超级全的 SCI 写作句式模板
  8. invalid signature 错误原因验签失败_Nginx 失败重试机制
  9. 服务器端授权验证,移动应用的第三方平台登录在服务端的授权验证
  10. 450g带盖吐司配方_450g带盖吐司烤多久