您现在的位置是:首页 > 正文

无监督学习总结笔记

2024-02-29 15:55:58阅读 1

无监督学习的类型

一、数据集的无监督变换(unsupervised transformation)

是创建数据新的表示的算法,与数据的原始表示相比,新的表示可能更容易被人或其他机器学习算法所理解。
应用一:降维(dimensionality reduction),用较少的特征就可以概括其重要特性。
PCA,t-SNE
应用二:找到“构成”数据的各个组成部分(比如对文本文档集合进行主题提取。
PCA,NMF

二、聚类算法(clustering algorithm)

将数据划分成不同的组,每组包含相似的物项。(比如图像人脸聚类)
 
 

无监督学习的挑战

评估算法是否学到了有用的东西
无监督学习算法一般用于不包含任何标签信息的数据,不知道正确的输出是什么
通常来说,评估无监督算法结果的唯一方法就是人工检查
无监督算法的另一个常见应用:作为监督算法的预处理步骤
 
 

预处理与缩放

四种预处理:按特征进行调节(缩放和移动)

在这里插入图片描述

  • StandardScaler
    确保每个特征的平均值为0、方差为1,使所有特征都位于同一量级。但这种缩放不能保证特征任何特定的最大值和最小值。
  • RobustScaler
    工作原理与StandardScaler类似,确保每个特征的统计属性都位于同一范围。但RobustScaler使用的是中位数和四分位数,而不是平均值和方差。
    这样会忽略异常值(比如测量误差),可能会给其他缩放方法造成麻烦。
  • MinMaxScaler
    移动数据,使所有特征都刚好位于0到1之间。对于二维数据集来说,所有的数据都包含在x轴0到1与y轴0到1组成的矩形中。
  • Normalizer
    对每个数据点进行缩放,使得特征向量的欧式长度等于1。换句话说,它将一个数据点投射到半径为1的圆上(对于更高维度的情况,是球面)。
    这意味着每个数据点的缩放比例都不相同(乘以其长度的倒数)。
    如果只有数据的方向(或角度)是重要的,而特征向量的长度无关紧要,那么通常会使用这种归一化。
transform()

缩放器总是对训练集和测试集应用完全相同的变换。也就是说,transform方法总是减去训练集的最小值,然后除以训练集的范围,而这两个值可能与测试集的最小值和范围并不相同。

要对训练数据和测试数据进行相同的缩放

对训练集进行fit()transform()同时作用在训练集和测试集上

scaler = MinMaxScaler()
scaler.fit(X_train)
X_train_scaled = scaler.transform(X_train)
X_test_scaled = scaler.transform(X_test)

 
 

降维、特征提取和流形学习

主成分分析PCA

用于降维和特征提取
主成分分析(principal component analysis,PCA) 是一种旋转数据集的方法,旋转后的特征在统计上不相关。根据旋转后的新特征对解释数据的重要性来选择它的一个子集。
在这里插入图片描述

  1. 首先找到方差最大的方向“成分1”,这是数据中包含最多信息的方向,换句话说,沿着这个方向的特征之间最为相关。然后,算法找到与第一个方向正交(成直角)且包含最多信息的方向。以此类推,这些方向即为主成分。主成分的个数与原始特征数相同。
  2. 将其旋转,使得第一主成分与x轴平行且第二主成分与y轴平行。在旋转之前,从数据中减去平均值,使得变换后的数据以零为中心。
  3. 通过仅保留一部分主成分来使用PCA进行降维。
  4. 反向旋转并将平均值重新加到数据中。这些数据点位于原始特征空间中,但我们仅保留了第一主成分中包含的信息。
  • PCA是一种无监督方法,在寻找旋转方向时没有用到任何类别信息。它只是观察数据中的相关性。
  • PCA缺点: 通常不容易对图中的两个轴做出解释。主成分对应于原始数据中的方向,所以它们是原始特征的组合。但这些组合往往非常复杂。
PCA用于特征提取
  • 思想: 可以找到一种数据表示,比给定的原始表示更适合于分析
  • 人脸识别: 在仅使用前10个主成分时,仅捕捉到了图片的基本特点,比如人脸方向和明暗程度。随着使用的主成分越来越多,图像中也保留了越来越多的细节。这对应于求和中包含越来越多的项。如果使用的成分个数与像素个数相等,意味着我们在旋转后不会丢弃任何信息,可以完美重建图像。
PCA白化

在这里插入图片描述

  • 启用PCA的白化(whitening)选项,它将主成分缩放到相同的尺度。
  • 白化不仅对应于旋转数据,还对应于缩放数据使其形状是圆形而不是椭圆
     
     

非负矩阵分解NMF

将数据分解成非负加权求和,常用于特征提取
与PCA相同,我们试图将每个数据点写成一些分量的加权求和。

与PCA的区别
  • 在PCA中,我们想要的是正交分量,并且能够解释尽可能多的数据方差;在NMF中,我们希望分量和系数均为非负,因此,NMF只能应用于每个特征都是非负的数据,因为非负分量的非负求和不可能变为负值。
  • NMF对由多个独立源相加(或叠加)创建而成的数据特别有用,可以识别出组成合成数据的原始分量。总的来说,与PCA 相比,NMF得到的分量更容易解释,因为负的分量和系数可能会导致难以解释的抵消效应。
  • 与PCA不同,减少分量个数,不仅会删除一些方向,而且会创建一组完全不同的分量。NMF的分量也没有按任何特定方法排序,所以不存在“第一非负分量”:所有分量的地位平等。
    在这里插入图片描述
    对于两个分量的NMF,显然所有数据点都可以写成这两个分量的正数组合。
    如果仅使用一个分量,那么NMF会创建一个指向平均值的分量,可以对数据做出最好的解释。
  • NMF 使用了随机初始化:
    在相对简单的情况下(分量少),所有数据都可以被完美地解释,那么随机性的影响很小(虽然可能会影响分量的顺序或尺度)。
    在更加复杂的情况下,随机性的影响可能会很大。
  • NMF的主要参数:想要提取的分量个数
    NMF通常并不用于对数据进行重建或编码,而是用于在数据中寻找有趣的模式。
     
     

t-SNE进行流形学习

常用于二维散点图的可视化。

流形学习算法
  • 流形学习算法主要用于可视化,因此很少用来生成两个以上的新特征。
  • 其中一些算法(包括t-SNE)计算训练数据的一种新表示,但不允许变换新数据。这意味着这些算法只能变换用于训练的数据。
t-SNE背后思想

t-SNE背后的思想是找到数据的一个二维表示,尽可能地保持数据点之间的距离。t-SNE首先给出每个数据点的随机二维表示,然后尝试让在原始特征空间中距离较近的点更加靠近,原始特征空间中相距较远的点更加远离。
它试图保存那些表示哪些点比较靠近的信息。
 
 
 
 

聚类 clustering

将数据集划分成组,这些组叫作簇(cluster)
目标: 划分数据,使得一个簇内的数据点非常相似且不同簇内的数据点非常不同。与分类算法类似,聚类算法为每个数据点分配(或预测)一个数字,表示这个点属于哪个簇。

聚类与分类

相似,但聚类的标签本身没有先验意义

  • 分类:算法找到的第3个簇仅包含Bela的面孔
  • 聚类:所有标签为3的人脸都是相似的
     

K均值聚类 k-means

  1. 将每个数据点分配给最近的簇中心
  2. 将每个簇中心设置为所分配的所有数据点的平均值。
  3. 如果簇的分配不再发生变化,那么算法结束。
失败案例-局限性
  1. 每个簇仅由其中心定义,这意味着每个簇都是凸形,只能找到相对简单的形状。
  2. 假设所有簇在某种程度上具有相同的“直径”,它总是将簇之间的边界刚好画在簇中心的中间位置。
  3. 假设所有方向对每个簇都同等重要
矢量化,或将k均值看作分解
  1. PCA,NMF都试图将数据点表示为一些分量之和,
    k均值可以看作仅用一个分量来表示每个数据点,该分量由簇中心给出。
  2. 对于k均值,重建就是在训练集中找到的最近的簇中心
  3. 利用k均值做矢量量化,可以用比输入维度更多的簇来对数据进行编码。
优点

不仅相对容易理解和实现,而且运行速度也相对较快,可以轻松扩展到大型数据集

缺点
  1. 依赖于随机初始化,也就是说,算法的输出依赖于随机种子。默认情况下,scikit-learn用10种不同的随机初始化将算法运行10次,并返回最佳结果。
  2. 对簇形状的假设的约束性较强,而且还要求指定所要寻找的簇的个数(在现实世界的应用中可能并不知道这个数字)。

网站文章

  • vue+springboot基于web的火车高铁铁路订票管理系统

    vue+springboot基于web的火车高铁铁路订票管理系统

    主要功能包括个人中心、用户管理、火车类型管理、火车信息管理、车票预订管理、车票退票管理、系统管理等;研发一套基于web的铁路订票管理系统,既能够大大提高信息的检索、变更与维护的工作效率,也能够方便信息...

    2024-02-29 15:55:29
  • Java学习Day020(数组)

    Java学习Day020(数组)

    数组学习

    2024-02-29 15:55:23
  • 创建角色、ansible-galaxy的简单使用

    创建角色、ansible-galaxy的简单使用 1.1 创建角色 角色创建流程 在Ansible中创建角色不需要特别的开发工具。创建和使用角色包含三个步骤: 创建角色目录结构 定义角色内容 在pla...

    2024-02-29 15:55:14
  • AopContext对象原理

    AopContext的是使用和原理

    2024-02-29 15:55:08
  • SDIO协议概述

    SDIO总线SDIO总线和USB总线类似,SDIO总线也有两端,其中一端是主机(HOST)端,另一端是设备端(DEVICE),采用HOST- DEVICE这样的设计是为了简化DEVICE的设计,所有的通信都是由HOST端发出命令开始的。在DEVICE端只要能解溪HOST的命令,就可以同HOST进行通信了。这个是同SD的总线一样的,其中有如下的几种信号1.CLK信号:HOST给DEVICE的时...

    2024-02-29 15:54:40
  • 【笔记】torch 乘法总结

    【笔记】torch 乘法总结 一、乘号(*) 和 torch.mul() element-wise 即对应元素相乘 例子: >>> a = torch.randn(2,3) >...

    2024-02-29 15:54:31
  • JUC多线程及高并发-CAS-ABA

    JUC多线程及高并发-CAS-ABA

    JUC多线程及高并发-CASCAS是什么atomicInteger.compareAndSetUnsafeCAS是什么CAS的全称为Compare-And-Swap,它是一条CPU并发原语。它的功能是...

    2024-02-29 15:54:23
  • 各省市各区中心点经纬度数据(更新至2021年)

    各省市各区中心点经纬度数据(更新至2021年)

    1、数据来源:高德地图API 2、时间跨度:2021年 3、区域范围:全国 4、指标说明: 包含如下指标: 省份 城市 经度 纬度 行政区划代码 5、部分数据截图: 相关研究: [1]李林, 丁艺, ...

    2024-02-29 15:53:52
  • Docker 容器时区问题

    docker 容器时区问题利用docker发布服务,发现程序用获取的系统时间比正常时间晚了8个小时进入容器docker exec -it 容器id /bin/sh查询时间date -R发现时区为0时区...

    2024-02-29 15:53:44
  • 自定义Flutter Lint插件实现自己的Dart语法规则(静态语法分析检测)

    自定义Flutter Lint插件实现自己的Dart语法规则(静态语法分析检测)

    摘要:本文实现了一个自定义的语法检查插件,功能是:当新写一个dart类,如果类名中包含ViewModel,那么必须添加前缀HDW。在vscode中效果如下:在网上搜索自定义Dart语法检查或自定义Da...

    2024-02-29 15:53:35