《机器学习实战:基于Scikit-Learn、Keras和TensorFlow第2版》-学习笔记(9):无监督学习技术

· Hands-On Machine Learning with Scikit-Learn, Keras, and TensorFlow, 2nd Edition, by Aurélien Géron (O’Reilly). Copyright 2019 Aurélien Géron, 978-1-492-03264-9.
· 《机器学习》周志华
· 环境:Anaconda(Python 3.8) + Pycharm
· 学习时间:2022.05.08~2022.05.09

第九章 无监督学习技术

尽管今天机器学习的大多数应用都是基于有监督学习的(因此,这是大多数投资的方向),但是绝大多数可用数据都没有标签:我们具有输入特征X,但是没有标签y。计算机科学家Yann LeCun曾有句著名的话:“如果智能是蛋糕,无监督学习将是蛋糕本体,有监督学习是蛋糕上的糖霜,强化学习是蛋糕上的樱桃。”换句话说,无监督学习具有巨大的潜力,我们才刚刚开始研究。

假设你要创建一个系统,该系统将在制造生产线上为每个产品拍摄几张图片,并检测哪些产品有缺陷。你可以相当容易地创建一个自动拍照系统,这可能每天为你提供数千张图片。然后,你可以在几周内构建一个相当大的数据集。但是,等等,没有标签!如果你想训练一个常规的二元分类器来预测某件产品是否有缺陷,则需要将每张图片标记为“有缺陷”或“正常”。这通常需要人类专家坐下来并手动浏览所有图片。这是一项漫长、昂贵且烦琐的任务,因此通常只能在可用图片的一部分上完成。因此,标记的数据集将非常小,并且分类器的性能将令人失望。而且,公司每次对其产品进行任何更改时,都需要从头开始整个过程。如果该算法只需要利用未标记的数据而无须人工标记每张图片,那不是很好吗?让我们进入无监督学习。

在第8章中,我们研究了最常见的无监督学习任务:降维。在本章中,我们将研究其他一些无监督的学习任务和算法:

  • 聚类:目标是将相似的实例分组到集群中。聚类是很好的工具,用于数据分析、客户细分、推荐系统、搜索引擎、图像分割、半监督学习、降维等。

  • 异常检测:目的是学习“正常”数据看起来是什么样的,然后将其用于检测异常情况,例如生产线上的缺陷产品或时间序列中的新趋势。

  • 密度估算:这是估计生成数据集的随机过程的概率密度函数(PDF)的任务,密度估算通常用于异常检测:位于非常低密度区域的实例很可能是异常。它对于数据分析和可视化也很有用。

准备好蛋糕了吗?我们将从使用K-Means和DBSCAN进行聚类开始,然后讨论高斯混合模型,并了解如何将它们用于密度估计、聚类和异常检测。

9.1 聚类

你在山中徒步旅行时,偶然发现了从未见过的植物。你环顾四周,发现还有很多。它们并不完全相同,但是它们足够相似,你可能知道它们有可能属于同一物种(或至少属于同一属)。你可能需要植物学家告诉你什么是物种,但你当然不需要专家来识别外观相似的物体组。这称为聚类:识别相似实例并将其分配给相似实例的集群或组

就像在分类中一样,每个实例都分配给一个组。但是与分类不同,聚类是一项无监督任务。考虑下图:左侧是鸢尾花数据集(在第4章中介绍),其中每个实例的种类(即类)用不同的标记表示。它是一个标记的数据集,非常适合使用逻辑回归、SVM或随机森林分类器等分类算法。右侧是相同的数据集,但是没有标签,因此你不能再使用分类算法。这就是聚类算法的引入之处,它们中的许多算法都可以轻松检测左下角的集群。肉眼也很容易看到,但是右上角的集群由两个不同的子集群组成,并不是很明显。也就是说,数据集具有两个附加特征(萼片长度和宽度),此处未表示,并且聚类算法可以很好地利用所有的特征,因此实际上它们可以很好地识别三个聚类(例如,使用高斯混合模型,在150个实例中,只有5个实例分配给错误的集群)。

在这里插入图片描述

聚类可用于各种应用程序,包括:

  • 客户细分:你可以根据客户的购买记录和他们在网站上的活动对客户进行聚类。这对于了解你的客户是谁以及他们的需求很有用,因此你可以针对每个细分客户调整产品和营销活动。例如,客户细分在推荐系统中可以很有用,可以推荐同一集群中其他用户喜欢的内容。

  • 数据分析:在分析新数据集时,运行聚类算法然后分别分析每个集群。

  • 降维技术:数据集聚类后,通常可以测量每个实例与每个集群的相似度(相似度是衡量一个实例和一个集群的相似程度)。然后可以将每个实例的特征向量x替换为其集群的向量。如果有k个集群,则此向量为k维。此向量的维度通常比原始特征向量低得多,但它可以保留足够的信息以进行进一步处理。

  • 异常检测(也称为离群值检测):对所有集群具有低相似度的任何实例都可能是异常。例如,如果你已根据用户行为对网站用户进行了聚类,则可以检测到具有异常行为的用户,例如每秒的请求数量异常。异常检测在检测制造生产线中的缺陷或欺诈检测中特别有用。

  • 半监督学习:如果你只有几个标签,则可以执行聚类并将标签传播到同一集群中的所有实例。该技术可以大大增加可用于后续有监督学习算法的标签数量,从而提高其性能。

  • 搜索引擎:一些搜索引擎可让你搜索与参考图像相似的图像。要构建这样的系统,首先要对数据库中的所有图像应用聚类算法,相似的图像最终会出现在同一集群中。然后,当用户提供参考图像时,你需要做的就是使用训练好的聚类模型找到该图像的集群,然后可以简单地从该集群中返回所有的图像。

  • 分割图像:通过根据像素的颜色对像素进行聚类,然后用其聚类的平均颜色替换每个像素的颜色,可以显著减少图像中不同颜色的数量。图像分割用于许多物体检测和跟踪系统中,因为它可以更轻松地检测每个物体的轮廓。

关于聚类什么没有统一的定义,它实际上取决于上下文,并且不同的算法会得到不同种类的集群。一些算法会寻找围绕特定点(称为中心点)的实例。其他人则寻找密集实例的连续区域:这些集群可以呈现任何形状。一些算法是分层的,寻找集群中的集群。这样的示例不胜枚举。

在本节中,我们将研究两种流行的聚类算法——K-Means和DBSCAN,并探讨它们的一些应用,例如非线性降维、半监督学习和异常检测。

补充:性能度量

聚类性能度量亦称聚类"有效性指标"(validity index)。与监督学习中的性能度量作用相似,对聚类结果,我们需通过某种性能度量来评估其好坏;另一方面,若明确了最终将要使用的性能度量,则可直接将其作为聚类过程的优化目标,从而更好地得到符合要求的聚类结果。

聚类是将样本集 D划分为若干互不相交的子集,即样本簇。那么,什么样的聚类结果比较好呢?直观上看,我们希望"物以类聚"、即同一簇的样本尽可能彼此相似,不同簇的样本尽可能不同。换言之,聚类结果的"簇内相似度"fintrae-cluster similarity)高且"簇间相似度"(inter-clhuster similarity)低。

聚类性能度量大致有两类. 一类是将聚类结果与某个"参考模型"(reference model)进行比较,称为"外部指标"(external index);另一类是直接考察聚类结果而不利用任何参考模型,称为"内部指标"(internal index)。

对数据集$D = {x_1,x_2, …,x_m} , 假 定 通 过 聚 类 给 出 的 簇 划 分 为 ,假定通过聚类给出的簇划分为 C={C_1, C_2,C_k} , 参 考 模 型 给 出 的 簇 划 分 为 ,参考模型给出的簇划分为 C*={C_1, C^_2, …, C^_s} 。 相 应 地 , 令 。相应地,令 λ 与 与 λ 分 别 表 示 与 分别表示与 C 和 和 C*$对应的簇标记向量。我们将样本两两配对考虑,定义:

  • a = ∣ S S ∣ , S S = { ( x i , x j ) ∣ λ i = λ j , λ i ∗ = λ j ∗ , ( i < j ) } a = |SS|, SS = \{(x_i, x_j) | λ_i=λ_j, λ_i^* = λ^*_j, (i<j)\} a=SS,SS={ (xi,xj)λi=λj,λi=λj,(i<j)}
  • b = ∣ S D ∣ , S D = { ( x i , x j ) ∣ λ i = λ j , λ i ∗ ≠ λ j ∗ , ( i < j ) } b = |SD|, SD = \{(x_i, x_j) | λ_i=λ_j, λ_i^* ≠ λ^*_j, (i<j)\} b=SD,SD={ (xi,xj)λi=λj,λi=λj,(i<j)}
  • c = ∣ D S ∣ , D S = { ( x i , x j ) ∣ λ i ≠ λ j , λ i ∗ = λ j ∗ , ( i < j ) } c = |DS|, DS = \{(x_i, x_j) | λ_i≠λ_j, λ_i^* = λ^*_j, (i<j)\} c=DS,DS={ (xi,xj)λi=λj,λi=λj,(i<j)}
  • d = ∣ D D ∣ , D D = { ( x i , x j ) ∣ λ i ≠ λ j , λ i ∗ ≠ λ j ∗ , ( i < j ) } d = |DD|, DD = \{(x_i, x_j) | λ_i≠λ_j, λ_i^* ≠ λ^*_j, (i<j)\} d=DD,DD={ (xi,xj)λi=λj,λi=λj,(i<j)}

其中集合 S S SS SS包含了在 C C C中隶属于相同簇且在 C ∗ C^* C中也隶属于相同簇的样本对,集合 S D SD SD包含了在C中隶属于相同簇但在 C ∗ C^* C中隶属于不同簇的样本对,……由于每个样本对 ( x i , x j )   ( i < j ) (x_i, x_j)\ (i<j) (xi,xj) (i<j)仅能出现在一个集合中,因此有 a + b + c + d = m ( m − 1 ) / 2 a+b+c+d= m(m-1)/2 abc+d=m(m1)/2成立。

常用的聚类性能度量外部指标有(结果均在 [ 0 , 1 ] [0, 1] [0,1]区间,值越大越好):

  • Jaccard系数((Jaccard Coefficient,简称 JC)
    • J C = a a + b + c JC = \frac{a}{a+b+c} JC=a+b+ca
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

新四石路打卤面

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值