[Hands On ML] 8. 降维

文章目录

    • 1. 降维方法
      • 1.1 投影
      • 1.2 流行学习
    • 2. 降维技术
      • 2.1 PCA
      • 2.2 增量PCA
      • 2.3 随机PCA
      • 2.4 核PCA
      • 2.5. 调参
      • 2.6 LLE
      • 2.7 其他方法

本文为《机器学习实战:基于Scikit-Learn和TensorFlow》的读书笔记。
中文翻译参考

  • 特征维度太大,降维加速训练
  • 能筛掉一些噪声和不必要的细节

更高维度的实例之间彼此距离可能越远,空间分布很大概率是稀疏的

1. 降维方法

1.1 投影

在这里插入图片描述
上图,三维空间中的点,都近似在灰色平面附近,可以投影到其上

  • 投影并不总是最佳的方法

1.2 流行学习

Manifold Learning
假设:在流形的较低维空间中表示,它们会变得更简单(并不总是成立)
在这里插入图片描述

  • 是否流行学习会更好,取决于数据集
  • 第一行的情况,展开后更好分类,第二行的则,直接一个面分类更简单

2. 降维技术

2.1 PCA

《统计学习方法》主成分分析(Principal Component Analysis,PCA)笔记

目前为止最流行的降维算法

  • 首先它找到接近数据集分布的超平面
  • 然后将所有的数据都投影到这个超平面上

在这里插入图片描述

  • 将数据投影到方差最大的轴(损失更少的信息)
  • 或者理解为,点到该轴的均方距离最小

矩阵的 SVD分解 可以帮助找到主成分

X_centered=X-X.mean(axis=0)
U,s,V=np.linalg.svd(X_centered)
c1=V.T[:,0]
c2=V.T[:,1]
  • sklearn 的 PCA 类使用 SVD 分解实现
from sklearn.decomposition import PCA
pca=PCA(n_components=2)
X2D=pca.fit_transform(X)
  • components_访问每一个主成分(它返回水平向量的矩阵,如果我们想要获得第一个主成分则可以写成pca.components_.T[:,0]

  • 方差解释率(Explained Variance Ratio),它表示位于每个主成分轴上的数据集方差的比例

print(pca.explained_variance_ratio_)
array([0.84248607, 0.14631839])
看出第二个轴上的比例为14.6%
  • 选择方差解释率占比达到足够(例如95%)的维度即可
pca=PCA()
pac.fit(X)
cumsum=np.cumsum(pca.explained_variance_ratio_)
d=np.argmax(cumsum>=0.95)+1
d为选取的主成分个数pca=PCA(n_components=0.95)
设置为小数,表明保留的方差解释率为0.95
X_reduced=pca.fit_transform(X)

在这里插入图片描述

2.2 增量PCA

对大型数据集友好,可在线使用

from sklearn.decomposition import IncrementalPCAn_batches=100
inc_pca=IncrementalPCA(n_components=154)
for X_batch in np.array_split(X_mnist,n_batches):inc_pca.partial_fit(X_batch)
X_mnist_reduced=inc_pca.transform(X_mnist)

注意:array_split()将数据分开,partial_fit(),部分 fit

X_mm=np.memmap(filename,dtype='float32',mode='readonly',shape=(m,n))
batch_size=m//n_batches
inc_pca=IncrementalPCA(n_components=154,batch_size=batch_size)
inc_pca.fit(X_mm)

使用np.memmap方法,就好像文件完全在内存中一样,后面可跟fit

2.3 随机PCA

可以快速找到前 d 个主成分的近似值

  • 它的计算复杂度是O(m×d2)+O(d3)O(m × d^2) + O(d^3)O(m×d2)+O(d3),而不是O(m×n2)+O(n3)O(m × n^2) + O(n^3)O(m×n2)+O(n3),所以当 d 远小于 n 时,它比之前的算法快得多
rnd_pca=PCA(n_components=154,svd_solver='randomized')
X_reduced=rnd_pca.fit_transform(X_mnist)

2.4 核PCA

from sklearn.decomposition import KernelPCArbf_pca=KernelPCA(n_components=2,kernel='rbf',gamma=0.04)
X_reduced=rbf_pca.fit_transform(X)

在这里插入图片描述

2.5. 调参

由于 kPCA 是无监督学习算法,没有明显的性能指标帮助选择参数

  • 使用网格搜索来选择最佳表现的核方法和超参数
from sklearn.model_selection import GridSearchCV 
from sklearn.linear_model import LogisticRegression 
from sklearn.pipeline import Pipelineclf = Pipeline([("kpca", KernelPCA(n_components=2)),("log_reg", LogisticRegression())
])
param_grid = [{"kpca__gamma": np.linspace(0.03, 0.05, 10),"kpca__kernel": ["rbf", "sigmoid"]}]
grid_search = GridSearchCV(clf, param_grid, cv=3)
grid_search.fit(X, y)

获得最佳参数

print(grid_search.best_params_)
{'kpca__gamma': 0.043333333333333335, 'kpca__kernel': 'rbf'}

还可以比较重构后的数据跟原始数据的误差来找最佳参数

在这里插入图片描述

rbf_pca = KernelPCA(n_components = 2, kernel="rbf", gamma=0.0433,fit_inverse_transform=True)
X_reduced = rbf_pca.fit_transform(X)
X_preimage = rbf_pca.inverse_transform(X_reduced)
from sklearn.metrics import mean_squared_error
mean_squared_error(X, X_preimage) 
32.786308795766132

然后网格搜索最小误差的 核方法 和 超参数

2.6 LLE

局部线性嵌入(Locally Linear Embedding)是另一种非常有效的非线性降维(NLDR)方法,是一种流形学习技术

  • 它特别擅长展开扭曲的流形
from sklearn.manifold import LocallyLinearEmbeddinglle=LocallyLinearEmbedding(n_components=2,n_neighbors=10)
X_reduced=lle.fit_transform(X)

这个算法在处理 大数据集 的时候 表现 较差

2.7 其他方法

  • 多维缩放(MDS)在尝试保持实例之间距离的同时降低了维度
  • Isomap 通过将每个实例连接到最近的邻居来创建图形,然后在尝试保持实例之间的测地距离时降低维度
  • t-分布随机邻域嵌入(t-Distributed Stochastic Neighbor Embedding,t-SNE)可以用于降低维​​度,同时试图保持相似的实例临近并将不相似的实例分开。
    它主要用于可视化,尤其是用于可视化高维空间中的实例(例如,可以将MNIST图像降维到 2D 可视化)
  • 线性判别分析(Linear Discriminant Analysis,LDA)实际上是一种分类算法,但在训练过程中,它会学习类之间最有区别的轴,然后使用这些轴来定义用于投影数据的超平面
    LDA 的好处是投影会尽可能地保持各个类之间距离,所以在运行另一种分类算法(如 SVM 分类器)之前,LDA 是很好的降维技术

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/474831.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode 776. 拆分二叉搜索树(DFS)*

文章目录1. 题目2. 解题1. 题目 给你一棵二叉搜索树(BST)、它的根结点 root 以及目标值 V。 请将该树按要求拆分为两个子树:其中一个子树结点的值都必须小于等于给定的目标值 V;另一个子树结点的值都必须大于目标值 V&#xff1…

变压器绕组降低邻近效应_了解高频变压器设计基础(2)

单片开关电源高频变压器的设计要点高频变压器是单片开关电源的核心部件,鉴于这种高频变压器在设计上有其特殊性,为此专门阐述降低其损耗及抑制音频噪声的方法,可供高频变压器设计人员参考。单片开关电源集成电路具有高集成度、高性价比、最简…

Python-jieba分词学习及应用

文章目录基础添加自定义词典实战基础 jieba.cut 方法接受三个输入参数: 需要分词的字符串;cut_all 参数用来控制是否采用全模式;HMM 参数用来控制是否使用 HMM 模型jieba.cut_for_search 方法接受两个参数:需要分词的字符串;是否…

LeetCode 302. 包含全部黑色像素的最小矩形(BFS)

文章目录1. 题目2. 解题1. 题目 图片在计算机处理中往往是使用二维矩阵来表示的。 假设,这里我们用的是一张黑白的图片,那么 0 代表白色像素,1 代表黑色像素。 其中黑色的像素他们相互连接,也就是说,图片中只会有一…

蓝色三角_叶子长得像韭菜,花朵开得像个糖三角的鸢尾,用这3个方法拍摄它...

女孩子们小时候都跳皮筋。有一段口诀,里面有一句“马兰开花二十一”……我虽然皮筋没少跳,但是对于马兰花,却也是只闻其名,未见其身。后来,我在户外拍风光、拍花卉。在草丛里看到三片细长花瓣组成的的蓝色小花&#xf…

LeetCode 1063. 有效子数组的数目(单调栈)

文章目录1. 题目2. 解题1. 题目 给定一个整数数组 A,返回满足下面条件的 非空、连续 子数组的数目: 子数组中,最左侧的元素不大于其他元素。 示例 1: 输入:[1,4,2,5,3] 输出:11 解释:有 11 个…

springboot 多了8小时_日本人不明白:中国的奶茶有多好喝,值得排队8小时去买?...

日本人不明白:中国的奶茶有多好喝,值得排队8小时去买?最近有许多的网红奶茶店兴起,尤其是在冬季,加料十足的热奶茶就成为了年轻人的心头之好,就拿最近在武汉新开的首家茶颜悦色来说,每天的队伍都…

将整个表单设置为只读_如何将独立网站设置为制作中,阻止搜索引擎收录网站页面?...

独立网站设置为制作中当网站未完成状态时,可能不希望除管理员以外的人看到未完成的页面时,如何操作可以将独立网站设置为制作中,并阻止搜索引擎收录网站页面呢?可按照以下步骤进行操作;将网站设置为制作中网站制作中设…

LeetCode 361. 轰炸敌人(前缀和DP)

文章目录1. 题目2. 解题1. 题目 想象一下炸弹人游戏,在你面前有一个二维的网格来表示地图,网格中的格子分别被以下三种符号占据: W 表示一堵墙 E 表示一个敌人 0(数字 0)表示一个空位请你计算一个炸弹最多能炸多少敌…

led拼接屏报价_液晶拼接屏与led显示屏的区别在哪?

在目前的大屏显示产品中,液晶拼接屏和led显示屏是两种比较普遍的产品,拼接大屏是通过单个液晶拼接单元拼接而成的显示大屏,而led显示屏则是通过发光二极管组成密集点阵组成图像显示,我们通常听到的P1、P2代表的是像素点距离&#…

LeetCode 356. 直线镜像

文章目录1. 题目2. 解题1. 题目 在一个二维平面空间中,给你 n 个点的坐标。 问,是否能找出一条平行于 y 轴的直线,让这些点关于这条直线成镜像排布? 示例 1: 输入: [[1,1],[-1,1]] 输出: true示例 2: 输入…

使用DispatcherTimer计时器

《银光志--Silverlight 3.0开发详解与最佳实践》第3章XAML与Silverlight编程内功,通过本章的学习,相信你会对Silverlight编程模型、XAML、事件处理,以及LINQ查询语言有了一个比较全面的了解,在本章的示例中应用的都是一些基本的XA…

静物摄影用光技巧_室内人像摄影想要拍好,这3种用光技巧你了解吗?

选择靠近窗户的位置在室内可以首先考虑在靠近窗户的位置进行拍摄,因为窗户边上尤其是朝北的窗户会有非常柔和的散射光,当投射进窗户的是直射光线时,摄影者还可以拉上一层很薄的窗帘来缓解一下光线的强度,在靠近窗户的位置&#xf…

LeetCode 660. 移除 9(9进制)

文章目录1. 题目2. 解题1. 题目 从 1 开始,移除所有包含数字 9 的所有整数,例如 9,19,29,…… 这样就获得了一个新的整数数列:1,2,3,4,5,6&…

postman怎么导出测试用例_利用Charles抓包巧转接口自动化测试用例

在前面的文章中,也有介绍类似的工具的。例如:一键将接口请求转为测试用例介绍了开源的mitmproxy录制转化为接口测试用例,postman接口用例转化为python自动化测试用例 文章记录了如何把postman的测试用例转化为python的接口自动化的测试用例&a…

LeetCode 1236. 网络爬虫(BFS/DFS)

文章目录1. 题目2. 解题2.1 BFS2.2 DFS1. 题目 给定一个链接 startUrl 和一个接口 HtmlParser ,请你实现一个网络爬虫,以实现爬取同 startUrl 拥有相同 域名标签 的全部链接。该爬虫得到的全部链接可以 任何顺序 返回结果。 你的网络爬虫应当按照如下模…

启动不起来_国产开源工具:U盘启动工具Ventoy v1.0.29发布——墨涩网

Ventoy是一个制作可启动U盘的开源工具。有了Ventoy你就无需反复地格式化U盘,你只需要把ISO文件拷贝到U盘里面就可以启动了,无需其他操作。你可以一次性拷贝很多个不同类型的ISO文件,在启动时Ventoy会显示一个菜单来选择。 无差异支持Legacy B…

众多Android 开源项目再次推荐,学习不可错过

FBReaderJ FBReaderJ用于Android平台的电子书阅读器,它支持多种电子书籍格式包括:oeb、ePub和fb2。此外还支持直接读取zip、tar和gzip等压缩文档。项目地址:http://www.fbreader.org/FBReaderJ/Angle Angle是一款专为Android平台设计的&#…

LeetCode 1231. 分享巧克力(极小极大化 二分查找)

文章目录1. 题目2. 解题1. 题目 你有一大块巧克力,它由一些甜度不完全相同的小块组成。我们用数组 sweetness 来表示每一小块的甜度。 你打算和 K 名朋友一起分享这块巧克力,所以你需要将切割 K 次才能得到 K1 块,每一块都由一些 连续 的小…

筛选末位数字为1或5_看看广州示范性高中排行榜,怎么填报志愿?如何运用末位考生分数...

人们评价一所高中学校的层次通常会用两个指标:高考升学率和录取分数线,升学率又多以高优率高低为排序标准。在志愿填报期间,不少家长总希望我对学校进行比较。我试以三个维度对广州的70所示范性高中学校(校区)进行比较供大家参考。2016-2018近…