机器学习 第10章 降维与度量学习

news2024/9/24 7:23:26

目录

  • k近邻学习
  • 低维嵌入
  • 主成分分析(PCA)
  • 核化线性降维(KPCA)
  • 流形学习
    • 等度量映射(Isomap)
    • 局部线性嵌入
  • 度量学习

k近邻学习

k 近邻(KNN)学习是一种常用的监督学习方法,其工作机制如下: 给定测试样本,基于某种距离度量找出训练集中与其最靠近的k个训练样本,然后基于这k个"邻居"的信息来进行预测。KNN算法的核心在于计算新样本与训练集中样本的距离,并根据最近邻居的类别来预测新样本的类别。但它仍有不足之处,比如它没有显式的训练过程,在训练阶段仅仅将样本保存而不处理,待收到测试样本之后才处理,这称之为"懒惰学习",反之,在训练阶段就对样本进行处理的方法称之为"急切学习"。下面举一个例子以便于理解:如图所示在这里插入图片描述
当 k取不同值时,分类结果会有显著不同。当k取1或5时,此时判别为正例,当k取3时,判别为反例。

低维嵌入

在高维情形下容易出现数据样本稀疏、 距离计算困难等问题,这称之为"维数灾难",所以我们需要缓解维数灾难,其中一种方法就是降维,也叫作"维数约简",即通过某种数学变换将原始高维属性空间转变为一个低维"子空间",在这个子空间中样本密度大幅提高, 距离计算也变得更为容易。如下图所示在这里插入图片描述
我们可将(a)图中的样本点降维成(b)图中的样子。事实上,在大多数情况下,我们观测或收集到的数据样本虽是高维的,但与学习任务密切相关的也许仅是某个低维分布,即高维空间中的一个低维"嵌入" 。也就是说我们很难处理高维下的样本点,将它们转化为低维,再对它们进行处理。这样做的话有个问题需要解决,那就是要求原始空间中样本之间的距离在低维空间中得以保持,我们可采用多维缩放,下面是其主要操作步骤在这里插入图片描述

主成分分析(PCA)

主成分分析是一种常用的线性降维技术,通过寻找数据的主要成分来降低维度,这些成分是数据方差最大的方向。其算法描述如下:
在这里插入图片描述
PCA仅需保留 W与样本的均值向量即可通过简单的向量减法和矩阵–向量乘法将新样本投影至低维空间中。
代码如下:

from sklearn.decomposition import PCA
from sklearn.datasets import load_iris
import matplotlib.pyplot as plt

# 加载数据
data = load_iris()
X = data.data
y = data.target

# 应用PCA
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X)

# 可视化结果
plt.scatter(X_pca[:, 0], X_pca[:, 1], c=y, cmap='viridis')
plt.xlabel('First Principal Component')
plt.ylabel('Second Principal Component')
plt.title('PCA of Iris Dataset')
plt.show()

实验结果如图
在这里插入图片描述
这里就是我们所要处理的样本点,在二维空间中能更好地处理。

核化线性降维(KPCA)

核化线性降维是一种非线性降维方法,它利用核函数来处理非线性问题。其基本思路是将数据映射到一个高维空间中,在那里数据可能是线性可分的,然后在这个高维空间中执行PCA。由于直接在高维空间中计算可能是昂贵的,因此通过使用核技巧,可以在低维空间中直接计算高维空间中的内积。在这里插入图片描述
比如在上面图a中,样本点是三维空间中的S形曲面,此时若采用线性降维方法对三维空间观察到的样本点进行降维,则将丢失原本的低维结构。而采用非线性降维方法将得到图b的样本点,采用线性降维方法得到图c。

KPCA具体操作步骤如下:
1.选择核函数: 根据问题的特性选择适当的核函数。
2.计算核矩阵: 计算所有样本点之间核函数的值,形成核矩阵。
3.中心化核矩阵: 由于PCA要求数据集是中心化的,因此需要中心化核矩阵。
4.特征值分解: 对中心化的核矩阵进行特征值分解。
5.选取主成分: 选择具有最大特征值的特征向量作为主成分。
6.映射回低维空间: 将数据映射回低维空间。
代码如下:

from sklearn.datasets import make_moons
from sklearn.decomposition import KernelPCA
import numpy as np
import matplotlib.pyplot as plt

# 生成非线性可分的数据
X, y = make_moons(n_samples=100, noise=0.1)

# 使用RBF核函数的KPCA
kpca = KernelPCA(n_components=2, kernel='rbf', gamma=15)
X_kpca = kpca.fit_transform(X)

# 可视化降维结果
plt.figure(figsize=(8, 6))
plt.scatter(X_kpca[y == 0, 0], X_kpca[y == 0, 1], color='red', marker='^', alpha=0.5)
plt.scatter(X_kpca[y == 1, 0], X_kpca[y == 1, 1], color='blue', marker='o', alpha=0.5)
plt.xlabel('PC1')
plt.ylabel('PC2')
plt.title('Kernel PCA with RBF Kernel')
plt.grid()
plt.show()

运行结果如下:
在这里插入图片描述

流形学习

流形学习是一类借鉴了拓扑流形概念的降维方法。 "流形"是在局部与欧氏空间同胚的空间,换言之,它在局部具有欧氏空间的性质,能用欧氏距离来进行距离计算。下面介绍两种著名的流形学习方法。

等度量映射(Isomap)

Isomap算法的核心在于它不是简单地使用欧几里得距离来衡量数据点之间的相似性,而是使用了测地距离。测地距离是指沿着流形表面两点之间的最短路径距离。通过这种方式,Isomap能够更好地保持数据的全局结构,即使在非线性流形上也是如此
在这里插入图片描述
如上图所示,红色是测地距离,黑色是近邻距离。测地线距离是两点之间
的本真距离.显然,直接在高维空间中计算直线距离是不恰当的。
Isomap算法描述如下:
在这里插入图片描述
代码如下:

from sklearn.manifold import Isomap

# 应用Isomap
isomap = Isomap(n_components=2)
X_isomap = isomap.fit_transform(X)

# 可视化结果
plt.scatter(X_isomap[:, 0], X_isomap[:, 1], c=y, cmap='viridis')
plt.xlabel('First Isomap Component')
plt.ylabel('Second Isomap Component')
plt.title('Isomap of Iris Dataset')
plt.show()

运行结果如下:
在这里插入图片描述

局部线性嵌入

与 Isomap 试图保持近邻样本之间的距离不同,局部线性嵌入(LLE)试图保持邻域内样本之间的线性关系。如下图所示在这里插入图片描述
x i x_{i} xi希望能通过它的邻域样本 x j x_{j} xj x k x_{k} xk x l x_{l} xl的坐标表示,假设通过下面公式表示 x i x_{i} xi的坐标,即 x i = w i j x j + w i k x k + w i l x l x_{i}=w_{ij}x_{j}+w_{ik}x_{k}+w_{il}x_{l} xi=wijxj+wikxk+wilxl
其算法描述如下所示在这里插入图片描述
算法第4行显示出:对于不在样本 x i x_{i} xi邻域区域的样本 x j x_{j} xj,无论其如何变化都对 x i x_{i} xi z i z_{i} zi没有任何影响

度量学习

度量学习的目标是调整度量标准,使得分类或识别的效果更好。这通常涉及到学习一个映射函数,将数据点映射到一个新的空间中,使得在这个空间中,相似的数据点距离较近,而不相似的数据点距离较远。
度量学习的实现方法:
1.对比损失:对比损失函数旨在最小化相似数据点之间的距离,同时最大化不相似数据点之间的距离。
2.三元组损失:三元组损失函数使用三元组(锚点、正样本、负样本)来训练模型,使得锚点和正样本之间的距离小于锚点和负样本之间的距离。

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

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

相关文章

太炸裂!AI绘画赚钱机会,多到你无法想象!

家人们,AI绘画带来的变现方式真的太多了! 很多人会认为AI还没有落地,也有很多人认为这些宣扬AI红利的自媒体就是想割韭菜,那只能说可能认知太浅薄了。 新的事物出现,总会有善于捕捉信息和透过表层看清事物本质的人冲在…

格式化的硬盘能恢复数据吗?拯救数据的可能性

在信息技术高速发展的今天,硬盘作为计算机的核心存储部件,承载着大量的数据和文件。然而,有时因为误操作或其他原因,我们可能需要对硬盘进行格式化,这往往导致重要数据的丢失。 那么,格式化后的硬盘数据是否…

护网期间社区同好的一些问题总结

本文来自无问社区,更多网安知识分享可前往查看http://www.wwlib.cn/index.php/artread/artid/7560.html 一,SQL注入 分类: 从注入参数类型分:数字型注入、字符型注入 从注入效果分:报错注入、布尔注入、延时注入、联合注入、堆…

固态硬盘和机械硬盘区别?固态硬盘和机械硬盘哪个好?

在当今数据时代,硬盘作为电脑里的存储设备在我们的生活和工作中扮演着十分重要的角色。随着存储技术的进步,市场上出现了两种主流硬盘:固态硬盘和机械硬盘。它们各有优劣,那么二者究竟有什么区别?我们又该如何选择呢&a…

Linux驱动(六):Linux2.6驱动编写之平台设备总线

目录 前言一、平台设备总线1.是个啥?2.API函数 二、设备端驱动端1. 匹配机制2. 实现代码 三、设备树驱动端1.匹配机制2.代码实现 前言 本文主要介绍了一下两种驱动编写方法: 1.比较原始的设备端驱动端编写方法。 2.效率较高的设备树驱动端编写方法。 最…

echarts 5.3.2 折线图 tooltip设置trigger为axis无效

在使用echarts5.3.2过程中,发生一个不应该发生的bug,希望效果如下 现实中如下 代码中设置了tooltip: {trigger: ‘axis’}不生效啊。查阅文档,应该是这样设置的啊,可是为什么无效呢。改成tooltip: {trigger: ‘item’}虽能显示弹…

合宙低功耗4G模组Air724UG ——产品规格书

Air724UG 是合宙通信推出的超小封装 LTE Cat.1 bis 模块;采用紫光展锐的UIS8910平台,支持 LTE 3GPP Rel.13 技术。是4G全网通模块,可适应不同的运营商和产品,确保产品设计的最大灵活性。 模块主要特点: 超小封装&…

‘“node“‘ �����ڲ����ⲿ���Ҳ���ǿ����еij��� ���������ļ���

错误信息 使用vscode提交前端代码到git时,报下面的错,一直不知道啥原因,后来找到了个临时解决方案。。。 vscode解决方案 package.json文件中,去掉hooks的配置。 Idea解决方案 网上有说idea的解决方案的:就是提…

【Qt网络编程基础】Tcp服务器和客户端(只支持一对一)

目录 一、编写思路 1、服务器 总体思路 详细思路 1. 构造函数 (Widget::Widget) 2. 启动监听 (Widget::on_btn_start_clicked) 3. 停止监听 (Widget::on_btn_cease_clicked) 4. 发送消息 (Widget::on_btn_info_clicked) 5. 接收消息 (Widget::receive_message) 6. 处…

顶象图标点选模型识别

注意,本文只提供学习的思路,严禁违反法律以及破坏信息系统等行为,本文只提供思路 如有侵犯,请联系作者下架 (水文一篇)使用resnet分类模型配合yolo训练的图标点选验证码,用于顶象图标点选,案例如下图:

类型参数传值问题

一、基本数据类型传参问题 public static void main(String[] args) throws Exception {Integer number null;method01(number);}private static void method01(int number){System.out.println("number " number);}Ps: 基于int基本数据类型传参的时候&#xff0c…

常用的Adobe XD插件就看这10款!

Adobe XD是为 UI/UX 设计量身定制的协作工具,它与 Adobe 其他产品的无缝集成使得设计工作更加高效。与专注于 MacOS 的 Sketch不同,Adobe XD支持多平台操作,这种灵活性让它在原型设计领域备受瞩目。为了更高效地使用 Adobe XD,插件…

【大模型专栏—入门篇】机器学习与深度学习基础测试

大模型专栏介绍 😊你好,我是小航,一个正在变秃、变强的文艺倾年。 🔔本文为大模型专栏子篇,大模型专栏将持续更新,主要讲解大模型从入门到实战打怪升级。如有兴趣,欢迎您的阅读。 &#x1f4…

开源项目低代码表单FormCreate中ElementPlus表单使用校验规则示例

在开源项目低代码表单FormCreate 中,可以通过 validate 配置项为表单组件设置验证规则。无论是内置的表单组件还是自定义的表单组件,都支持表单校验。本文将详细介绍验证规则的使用方法,并提供一些示例来帮助您更好地理解和应用这些功能。 源…

2024年最新微短剧系统重构版,短剧小程序源码开源源码搭建部署

技术栈 前端&#xff1a;vueuniapp 后端&#xff1a;php 数据库&#xff1a;MySQL <?php class Drama {private $title;private $description;private $cast;private $genre;public function __construct($title, $description, $cast, $genre) {$this->title $tit…

iPhone手机备忘录转移到Windows电脑上的方法

备忘录作为我们日常生活中常用的软件&#xff0c;帮助我们记录下重要事项、待办任务、灵感创意等&#xff0c;已成为许多人不可或缺的工具。然而&#xff0c;当我们需要在不同设备间转移备忘录内容时&#xff0c;常常会遇到一些困难。特别是从iPhone手机转移到Windows电脑上&am…

从0到1实现线程池(C语言版)

目录 &#x1f324;️1. 基础知识 ⛅1.1 线程概述 ⛅1.2 linux下线程相关函数 &#x1f325;️1.2.1 线程ID &#x1f325;️1.2.2 线程创建 &#x1f325;️1.2.3 线程回收 &#x1f325;️1.2.4 线程分离 &#x1f324;️2. 线程池概述 ⛅2.1 线程池的定义 ⛅2.2 为…

多种现货黄金的简介 第三种你要特别注意

近期黄金的价格全线上涨&#xff0c;虽然作为商品&#xff0c;一般人看到其价格上涨&#xff0c;购买它的欲望就下跌了。但是作为一种投资品种&#xff0c;在近期黄金价格的上涨以及未来美联储货币政策的影响下&#xff0c;他的投资潜力是巨大的。但市场中有那么多的黄金理财产…

JavaScript编程精粹:语法、函数与对象

JavaScript编程精粹&#xff1a;语法、函数与对象 一 . JavaScript 介绍1.1 应用场景1.2 JavaScript 介绍1.3 JavaScript 组成部分 二 . JavaScript 引入方式2.1 内部脚本2.2 外部脚本 三 . JavaScript 基础语法3.1 输出语句3.2 变量3.3 数据类型3.3.1 number 类型3.3.2 string…