获取前N个主成分

#获取前n个主成分
import numpy as np
import matplotlib.pyplot as plt

产生数据集

X = np.empty((100,2))
X[:,0] = np.random.uniform(0,100,size=100)#产生实数
X[:,1] = 0.75 * X[:,0] + 3. +np.random.normal(0,10,size=100)

首先进行demean操作

#demean
def demean(X):return X - np.mean(X,axis=0)#1*n向量
X = demean(X)plt.scatter(X[:,0],X[:,1])


梯度上升法
损失函数

def f(w,X):return np.sum((X.dot(w) ** 2)) / len(X)

导数

def df(w,X):return X.T.dot(X.dot(w)) * 2 / len(X)

direction

def direction(w):return w / np.linalg.norm(w)#求模

第一主成分

def first_component(X,initial_w,eta,n_iters = 1e4,epsilon = 1e-8):w = direction(initial_w)cur_iter = 0while cur_iter < n_iters:gradient = df(w,X)last_w = ww = w + eta * gradientw = direction(w) #注意 每次w都要求成单位向量if (np.abs(f(w,X) - f(last_w,X)) < epsilon):breakcur_iter += 1return w

随机化w,求第一主成分

initial_w = np.random.random(X.shape[1])
eta = 0.01
w = first_component(X,initial_w,eta)
print(w)#第一主成分
[0.77768061 0.62865958]

求新的数据的第一主成分
第二主成分(向量减法)这里采用for循环计算,也可以向量化

X2 = np.empty(X.shape)
for i in range(len(X)):X2[i] = X[i] - X[i].dot(w) * w
plt.scatter(X2[:,0],X2[:,1])


w和w2垂直

w2 = first_component(X2,initial_w,eta)
print(w2)
print(w.dot(w2))#非常接近0
[-0.62865512  0.77768422]
5.7376907299233615e-06

向量化

X2 = X - X.dot(w).reshape(-1,1) * w #向量化

求前n个主成分


def first_n_components(n,X,eta = 0.01,n_iters = 1e4,epsilon = 1e-8):X_pca = X.copy()X_pca = demean(X_pca)res = []for i in range(n):initial_w = np.random.random(X_pca.shape[1])w = first_component(X_pca,initial_w,eta)res.append(w)X_pca = X_pca - X_pca.dot(w).reshape(-1,1) * wreturn res
print(first_n_components(2,X))
[array([0.77768056, 0.62865964]), array([ 0.62866465, -0.77767651])]








Python机器学习:PCA与梯度上升:04求数据的前n个主成分相关推荐

  1. Python机器学习:PCA与梯度上升03求数据的主成分PCA

    梯度上升法解决最优化问题 import numpy as np import matplotlib.pyplot as plt X = np.empty((100,2)) X[:,0] = np.ra ...

  2. 数据分享|R语言用主成分PCA、 逻辑回归、决策树、随机森林分析心脏病数据并高维可视化...

    全文链接:http://tecdat.cn/?p=22262 在讨论分类时,我们经常分析二维数据(一个自变量,一个因变量)(点击文末"阅读原文"获取完整代码数据). 但在实际生活中 ...

  3. 【python机器学习】线性回归--梯度下降实现(基于波士顿房价数据集)

    波士顿房价数据集字段说明 crim 房屋所在镇的犯罪率 zn 面积大于25000平凡英尺住宅所占比例 indus 房屋所在镇非零售区域所占比例 chas 房屋是否位于河边 如果在河边,值1 nox 一 ...

  4. Python机器学习:线型回归法04向量化运算

    核心两行代码, 向量化 比较两者运算速度 运行速度提升100倍 #性能测试 #性能测试 m = 10000000 big_x = np.random.random(size=m) print(big_ ...

  5. python多维数据划分_【python+机器学习(4)】多维数据的特征选取(RidgeLasso)...

    欢迎关注哈希大数据微信公众号[哈希大数据] 在之前我们介绍了直接使用线性回归进行波士顿房价的预测,但是预测准确率仅有60%左右.预测准确率不高一方面是我们未对数据进行一定的预处理(包括归一化和标准化等 ...

  6. python对称差集是什么意思_Python求数据的交、并、差集、对称差集

    1.集合(set) 首先要了解一下集合set set是一个无序不重复元素集,Python数据类型的一种,由于是无序的,不能通过索引和切片来做一些操作. 主要有添加.删除.交集.并集.差集.对称差集 五 ...

  7. 机器学习经典算法笔记——PCA和梯度上升算法

    首先,什么是PCA ? principal Component Analysis 一个非监督的机器学习算法,主要用于数据的降维,通过降维,可以发现更便于人类理解的特征 通常应用于可视化,去噪 下面是涉 ...

  8. Python机器学习基础篇三《无监督学习与预处理》

    前言 前期回顾: Python机器学习基础篇二<为什么用Python进行机器学习> 上面这篇里面写了文本和序列相关. 我们要讨论的第二种机器学习算法是无监督学习算法.无监督学习包括没有已知 ...

  9. Python机器学习:PCA与梯度上升:05高维数据映射成低维数据(封装一个PCA)

    使用封装后的PCA进行操作 import numpy as np import matplotlib.pyplot as plt from pcaa.PCA import PCA 生成数据 X = n ...

最新文章

  1. 小编说之“常见问题答疑”
  2. 使用List中的remove方法遇到的坑,不信你没有踩过!
  3. VS2013_QT5.4_静态编译问题_已经解决
  4. 变频器端子阻抗3k_PLC与变频器连接问题分析
  5. ThreadLocal的重要方法介绍
  6. ICML 2018 | 腾讯AI Lab详解16篇入选论文
  7. 关于dhtmlxScheduler的使用说明(ADD EDIT DEL,自定义CelendarBox)
  8. 前苹果M1芯片设计总监跳槽英特尔 或将负责所有SoC架构设计
  9. java8 日期比较_20 个案例教你在 Java 8 中如何处理日期和时间?
  10. 什么是面向对象,为什么要面向对象
  11. 力扣-111. 二叉树的最小深度
  12. 特征点检测-SIFT
  13. 从文本中读取 并截取需要的字符串
  14. Java开源J2EE框架
  15. noip2011 观光公交 (贪心)
  16. 使用ES6,Pt更好JavaScript。 III:酷收藏和闪烁的弦
  17. 85-决策树解决回归问题
  18. 【tableau】4个基本图表
  19. 戴尔科技云平台赋能“新基建”,打造云底座
  20. 22-07-04 西安 尚好房(01)项目经验总结

热门文章

  1. java 获取本机的ip和mac_java获取本机ip和mac地址
  2. oracle数据库月份日期固定,oracle 日期函数介绍-数据库专栏,ORACLE
  3. 2017.10.10 Perm 排列计数 失败总结
  4. bes2300 tws配对_tws 耳机春天来了!
  5. Intel 64/x86_64/IA-32/x86处理器 - 指令格式(10/E) - 特殊指令格式(AVX AVX-512)
  6. 信号 移相 matlab,MATLAB中的SISOTOOL在数字式移相全桥中的应用
  7. SPH(光滑粒子流体动力学)流体模拟实现四:各向异性(Anisotropic)表面光滑(2)
  8. java 摸拟qq消息提示_java 仿qq消息提示框
  9. Python-复习-习题-13
  10. Ansible 起步指南