第7章 PCA与梯度上升法 学习笔记中
目录
7-4 求数据的前n个主成分
获得前n个主成分
7-5 高维数据映射为低维数据
从高维数据向低维数据的映射
scikit-learn中的PCA
主成分所解释的方差
使用PCA对数据进行降维可视化
7-4 求数据的前n个主成分
本质上是从一组坐标系转移到了另一个坐标系
n维数据有N个轴之前求的是一个轴的投影
抽象类比将样本投影到x,y两个轴上,有两个方向的成分,现存只是x,y轴变成倾斜的,所以仍然有两个分量
这样会得到第二个主成分
获得前n个主成分
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)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) if(abs(f(w, X) - f(last_w, X)) < epsilon):breakcur_iter += 1return w
X2 = X - X.dot(w).reshape(-1, 1) * w
X.dot(w) 表示 mX1的向量,是m 个元素表示每一个映射到w方向上的模,将其转化为列向量
下面不用矩阵运算的结果,是循环的结果
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
7-5 高维数据映射为低维数据
每个主成分是单位向量,
k <n 从n维映射到k维
m个样本,每个有k维,即完成了降维操作
从高维数据向低维数据的映射
PCA.py
import numpy as npclass PCA:def __init__(self, n_components):"""初始化PCA"""assert n_components >= 1, "n_components must be valid"self.n_components = n_componentsself.components_ = Nonedef fit(self, X, eta=0.01, n_iters=1e4):"""获得数据集X的前n个主成分"""assert self.n_components <= X.shape[1], \"n_components must not be greater than the feature number of X"def demean(X):return X - np.mean(X, axis=0)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)def direction(w):return w / np.linalg.norm(w)def first_component(X, initial_w, eta=0.01, 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)if (abs(f(w, X) - f(last_w, X)) < epsilon):breakcur_iter += 1return wX_pca = demean(X)self.components_ = np.empty(shape=(self.n_components, X.shape[1]))for i in range(self.n_components):initial_w = np.random.random(X_pca.shape[1])w = first_component(X_pca, initial_w, eta, n_iters)self.components_[i,:] = wX_pca = X_pca - X_pca.dot(w).reshape(-1, 1) * wreturn selfdef transform(self, X):"""将给定的X,映射到各个主成分分量中"""assert X.shape[1] == self.components_.shape[1]return X.dot(self.components_.T)def inverse_transform(self, X):"""将给定的X,反向映射回原来的特征空间"""assert X.shape[1] == self.components_.shape[0]return X.dot(self.components_)def __repr__(self):return "PCA(n_components=%d)" % self.n_components
scikit-learn中的PCA
sklearn中的方法和上面咱的梯度上升的方法不同,所以其方向 是相反的,没关系
主成分所解释的方差
第一轴能解释14%的数据,第二轴的数据能解释多少的方差,通过这个变量找到将数据降到多少维
表示取样本的特征多少时,其能解释多少的方差
实例pca时传入一个小数即可
使用PCA对数据进行降维可视化
数据降到2维好处是有利于可视化
只是想区别蓝色和紫色的数据也许用二维的降维就可以了
第7章 PCA与梯度上升法 学习笔记中相关推荐
- 第7章 PCA与梯度上升法
主成分分析法:主要作用是降维 疑似右侧比较好? 第三种降维方式: 问题:????? 方差:描述样本整体分布的疏密的指标,方差越大,样本之间越稀疏:越小,越密集 第一步: 总结: 问题:????怎样使其 ...
- 韩松老师模型压缩--三步剪枝法学习笔记
韩松老师模型压缩–三步剪枝法学习笔记 Learning both Weights and Connections for Efficient Neural Networks Abstract 神经网络 ...
- 贝叶斯方法学习笔记(二)
贝叶斯方法学习笔记(二) 原文来自于知乎<你一定从未看过如此通俗易懂的马尔科夫链蒙特卡洛方法解读>.在这里只是将文章主要的核心知识点进行提炼汇总. 链接:你一定从未看过如此通俗易懂的马尔科 ...
- 贝叶斯方法学习笔记(一)
贝叶斯方法学习笔记(一) 一.基本概念 二.实例(史蒂文的身份): 三.基本的概率分布及其性质 四.实例(用短信数据推断行为): 数据集来源 一.基本概念 先验概率:我们把对一个事件A发生的信念记作P ...
- 计算机组成原理 | 第八章《计算机的外围设备》、第九章《输入/输出系统》 学习笔记
计算机组成原理 | 第八章<计算机的外围设备>.第九章<输入/输出系统> 学习笔记 引言 & 声明 第一章 计算机系统概论 第二章 计算机中数据的表示方法 第三章 运算 ...
- PCA(主成分分析-principal components analysis)学习笔记以及源代码实战讲解
PCA(主成分分析-principal components analysis)学习笔记以及源代码实战讲解 文章目录 PCA(主成分分析-principal components analysis)学 ...
- 拉格朗日乘子法 学习笔记
本来是想写支持向量机的学习笔记的然后觉得内容太多了越写越不想写于是咕掉了. 把写好的拉格朗日乘子法发上来吧QwQ 拉格朗日乘子法 wiki链接 拉格朗日乘子法用来求解带多个等式约束的情况下的多元函数极 ...
- pytorch梯度下降函数_Pytorch学习笔记6:激活函数/单层感知机/梯度下降求最小值实例...
#添加到学习笔记2末尾,直接运行.代码意义可以看注释. #需要import以下库 import torch import numpy as np from matplotlib import pypl ...
- 计算机网络第5章 运输层(自整理详细学习笔记)
本篇笔记整理:Code_流苏(CSDN) 课件资料及视频课程学习:B站/MOOC计算机网络微课堂(湖科大 高军老师) 观前提示:本篇内容为计算机网络第5章全章笔记,适合入门学习以及后期复习,超详细!建 ...
- 拉格朗日乘数法学习笔记
对于一个多元函数\(f(x_1,x_2,x_3,..,x_n)\),如果它必须满足某一些限制\(g_i(x_1,x_2,x_3,...,x_n)=0\),我们可以使用拉格朗日乘数法来求它的最值 首先你 ...
最新文章
- 第11章 AOF持久化
- PHP的单引号双引号
- error LNK2001: unresolved external symbol _WinMain@16
- mac怎么合并两个容器_Mac怎么合并文件夹?macz不容错过的苹果mac教程分享
- 使用selenium webdriver进行元素定位
- linux终端打开文本编辑器,linux - Linux打开默认终端文本编辑器 - 堆栈内存溢出
- 2022年全新UI聚合支付系统四方源码更新完美版
- 中南大学网络教育计算机考试答案,2015年6月中南大学网络教育课程考试《计算机组成原理》复习题及参考答案.pdf...
- font-family:中文字体的英文名称
- matlab矩阵对角线上下加减,matlab – 如何在相关矩阵中移动靠近矩阵对角线的较大值...
- python word 表格复制_python实现同一word中的表格分别提取并保存到不同文件下
- 电脑桌面美化教程,强迫症福利
- 《最好的告别》:如何优雅地走向生命终点
- [解疑][TI]TI毫米波雷达系列(三):调频连续波雷达回波信号3DFFT处理原理(测距、测速、测角)
- 微信自定义菜单的emoji图标
- 什么是等级保护?为什么要开展等级保护?
- python爬虫-Handler处理器的基本使用
- 如何通过浏览器访问本地电脑文件
- 地理坐标系与投影坐标系的区别以及投影变换与定义投影的区别
- 5G的主要业务场景:eMBB、URLLC、mMTC
热门文章
- VS找不到System.Web.Extensions.dll的解决办法
- Asterisk怎样配置才能出视频
- 实现模拟内存动态分区分配算法_你还在为了JVM而烦恼么?(内存结构和垃圾回收算法)...
- cors nginx 怎么解决_如何在Nginx代理服务器中启用CORS?
- linux 汽车仪表软件架构,基于嵌入式Linux的汽车全数字仪表界面的设计
- 旋转研究(矩阵,欧拉角,四元数)
- gcc和g++的区别 (很详细的描述)
- 适合人工智能开发的5种最佳编程语言优缺点对比
- Dubbo源码解读:appendAnnotation [01]
- Python学习笔记【第十二篇】:Python异常处理