当前位置: 首页 > news >正文

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

目录

  • 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.三元组损失:三元组损失函数使用三元组(锚点、正样本、负样本)来训练模型,使得锚点和正样本之间的距离小于锚点和负样本之间的距离。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 真实案例分享:零售企业如何避免销售数据的无效分析?
  • Kali Linux 设置与维护教程
  • 【开源大模型生态7】华为的盘古大模型
  • 《三角洲行动》“是时候玩点好的” 9月26日在PC及移动端上线
  • vscode 高效率开发手册
  • 一分钟了解统一软件开发过程RUP的那点事
  • 说说相机标定?
  • react-问卷星项目(1)
  • 【JAVA基础】实现Tomcat基本功能
  • 2024年【起重信号司索工(建筑特殊工种)】考试题及起重信号司索工(建筑特殊工种)免费试题
  • Java中的类型转换 Day4
  • Vue+SpringBoot+数据库整体开发流程 2
  • uniapp 懒加载、预加载、缓存机制深度解析
  • 动手学深度学习(pytorch)学习记录27-深度卷积神经网络(AlexNet)[学习记录]
  • 农业小气候观测站
  • 【翻译】babel对TC39装饰器草案的实现
  • Android Volley源码解析
  • canvas 五子棋游戏
  • go append函数以及写入
  • Java 实战开发之spring、logback配置及chrome开发神器(六)
  • Java,console输出实时的转向GUI textbox
  • java8-模拟hadoop
  • win10下安装mysql5.7
  • 爱情 北京女病人
  • 技术:超级实用的电脑小技巧
  • 紧急通知:《观止-微软》请在经管柜购买!
  • 利用DataURL技术在网页上显示图片
  • 前端工程化(Gulp、Webpack)-webpack
  • 前言-如何学习区块链
  • 深度学习在携程攻略社区的应用
  • 使用 Docker 部署 Spring Boot项目
  • 学习HTTP相关知识笔记
  • 在electron中实现跨域请求,无需更改服务器端设置
  • mysql 慢查询分析工具:pt-query-digest 在mac 上的安装使用 ...
  • 智能情侣枕Pillow Talk,倾听彼此的心跳
  • ​一、什么是射频识别?二、射频识别系统组成及工作原理三、射频识别系统分类四、RFID与物联网​
  • # include “ “ 和 # include < >两者的区别
  • ###51单片机学习(2)-----如何通过C语言运用延时函数设计LED流水灯
  • #{}和${}的区别是什么 -- java面试
  • ( 用例图)定义了系统的功能需求,它是从系统的外部看系统功能,并不描述系统内部对功能的具体实现
  • (2)STL算法之元素计数
  • (3)STL算法之搜索
  • (android 地图实战开发)3 在地图上显示当前位置和自定义银行位置
  • (html5)在移动端input输入搜索项后 输入法下面为什么不想百度那样出现前往? 而我的出现的是换行...
  • (Java岗)秋招打卡!一本学历拿下美团、阿里、快手、米哈游offer
  • (Oracle)SQL优化基础(三):看懂执行计划顺序
  • (备份) esp32 GPIO
  • (苍穹外卖)day03菜品管理
  • (第61天)多租户架构(CDB/PDB)
  • (动态规划)5. 最长回文子串 java解决
  • (附源码)计算机毕业设计ssm高校《大学语文》课程作业在线管理系统
  • (解决办法)ASP.NET导出Excel,打开时提示“您尝试打开文件'XXX.xls'的格式与文件扩展名指定文件不一致
  • (删)Java线程同步实现一:synchronzied和wait()/notify()
  • (五)网络优化与超参数选择--九五小庞
  • (源码分析)springsecurity认证授权