统计学习方法第十六章作业:PCA主成分分析算法 代码实现
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主成分分析算法 代码实现相关推荐
- 统计学习方法第十九章作业:马尔可夫链蒙特卡罗法、吉布斯抽样算法(书上题目) 代码实现
马尔可夫链蒙特卡罗法 作业19.7 import numpy as np import matplotlib.pyplot as plt from scipy.stats import betacla ...
- 统计学习方法第十五章作业:SVD矩阵分解 代码实现 及其在推荐的应用和矩阵压缩意义
SVD矩阵分解 import numpy as npclass SVD:def __init__(self,x):self.x = np.array(x)def get_r_rv(self,x):x ...
- 统计学习方法第十四章作业:聚类—层次聚类聚合/分裂算法、K_means聚类算法 代码实现
层次聚类聚合/分裂算法 import numpy as np import copy import matplotlib.pyplot as pltclass Hierarchical_cluster ...
- 操作系统导论OSTEP 第十六章作业答案 分段
答案Github库 https://github.com/jzplp/OSTEP-Answers 问题 1 答案 [testjz@localhost vm-segmentation]$ ./segme ...
- 嵌入式实时操作系统ucos-ii_「正点原子NANO STM32开发板资料连载」第三十六章 UCOSII 实验 1任务调度...
1)实验平台:alientek NANO STM32F411 V1开发板2)摘自<正点原子STM32F4 开发指南(HAL 库版>关注官方微信号公众号,获取更多资料:正点原子 第三十六章 ...
- 《Reids 设计与实现》第十六章 集群(下)
<Reids 设计与实现>第十六章 集群(下) 文章目录 <Reids 设计与实现>第十六章 集群(下) 七.复制与故障转移 1.设置从节点 2.故障检测 3.故障转移 4.选 ...
- 【JAVA SE】第十六章 进程、线程、同步锁和线程锁的简介
第十六章 进程.线程.同步锁和线程安全问题 文章目录 第十六章 进程.线程.同步锁和线程安全问题 一.进程 1.基本介绍 2.进程模型 二.线程 1.基本介绍 2.线程的生命周期 3.线程的优先级 4 ...
- 机器学习入门-西瓜书总结笔记第十六章
西瓜书第十六章-强化学习 一.任务与奖赏 二.K-摇臂赌博机 1.探索与利用 2. ϵ \epsilon ϵ-贪心 3.Softmax 三.有模型学习 1.策略评估 2.策略改进 3.策略迭代与值迭代 ...
- 大学计算机基础试题第六章,大学计算机基础第六章作业答案
第六章作业 一单选题(错一题,扣1分) http://www.doczj.com/doc/9acd8d2d4b73f242336c5fb3.htmlN和W AN是两种不同类型的计算机网络,后者可以(D ...
最新文章
- 别再写满屏的try-catch了,真丑,全局异常处理不会吗?
- git换行符之autoCRLF配置的意义
- MATLAB常用的学习的网站
- 青少年蓝桥杯_2020_每日一题_11.03_输出M与N之间符合要求的数据
- 【codevs2333】【BZOJ2002】弹飞绵羊,第一次的LCT
- Markdown 编辑器使用
- devexpress 高分辨率显示问题_144Hz高刷+曲屏超2k 蚂蚁电竞显示器ANT271QC 小白到专业电竞跳板...
- set up BU Printer on ubuntu
- 地理信息系统(第二版)汤国安等编著第一章1.1-1.2节
- 小问题:要把pdg格式的jpg图片还原成pc能显示的jpg图片
- python词云图片在哪儿打开_如何用python创建词云图片
- java导出可运行文件格式,|java导出excel,excel打不开,报文件格式无效,怎么解决!...
- 2010南非世界杯32强手绘海报
- 无线鼠标插上去没反应
- CentOS_7配置静态ip地址
- mysql数据库击穿_缓存穿透、击穿、雪崩区别和解决方案
- Ruby中按照指定编码读取文件
- 没什么经验的UE/UI设计师如何应对面试
- UR机器人(一):坐标系及位姿表示方法
- linux怎么共享打印机驱动程序,为samba共享的打印机添加Windows驱动
热门文章
- 测试教程网.unittest教程.7. 各种断言方法
- 20170728xlVBA改转置一例
- 第三方登录之微信登录,基于ThinkSDK
- ubuntu安装SSH2
- 真正优秀的程序员有哪些与众不同之处?
- 从蛋白质结构到功能的生物信息学研究 From Protein Structure to Function with Bioinformatics PDF
- 超级全的 SCI 写作句式模板
- invalid signature 错误原因验签失败_Nginx 失败重试机制
- 服务器端授权验证,移动应用的第三方平台登录在服务端的授权验证
- 450g带盖吐司配方_450g带盖吐司烤多久