学习笔记——机器学习之无监督学习【从零开始学python数据分析与数据挖掘】

学习笔记——机器学习之无监督学习

机器学习之无监督学习

  • 学习笔记——机器学习之无监督学习
  • 前言
  • 一、聚类和降维
  • 二、聚类算法
    • 1.kmeans算法
    • 2.最佳k值的确定
  • 三.DBSCAN算法
    • 1.相关概念
    • 2.密度聚类的步骤
    • 3.可视化
    • 4.密度聚类与Kmeans的比较
  • 总结


前言

  • 有监督学习和无监督学习的最大区别在于数据是否有标签
  • 无监督学习:其中一个任务就是聚类(clustering)
  • 有监督学习:其中一个任务就是分类
    无监督学习:利用无标签的数据学习数据的分布或数据与数据之间的关系被称作无监督学习。

分类:分类其实是从特定的数据中挖掘模式,作出判断的过程。比如Gmail邮箱里有垃圾邮件分类器,一开始的时候可能什么都不过滤,在日常使用过程中,我人工对于每一封邮件点选“垃圾”或“不是垃圾”,过一段时间,Gmail就体现出一定的智能,能够自动过滤掉一些垃圾邮件了。这是因为在点选的过程中,其实是给每一条邮件打了一个“标签”,这个标签只有两个值,要么是“垃圾”,要么“不是垃圾”,Gmail就会不断研究哪些特点的邮件是垃圾,哪些特点的不是垃圾,形成一些判别的模式,这样当一封信的邮件到来,就可以自动把邮件分到“垃圾”和“不是垃圾”这两个我们人工设定的分类的其中一个。

聚类:聚类的目的也是把数据分类,但是事先我是不知道如何去分的,完全是算法自己来判断各条数据之间的相似性,相似的就放在一起。在聚类的结论出来之前,我完全不知道每一类有什么特点,一定要根据聚类的结果通过人的经验来分析,看看聚成的这一类大概有什么特点。

聚类和分类最大的不同在于:分类的目标是事先已知的,而聚类则不一样,聚类事先不知道目标变量是什么,类别没有像分类那样被预先定义出来。

一、聚类和降维

降维:就是在保证数据所具有的代表性特性或者分布的情况下,将高维数据转化为低维数据的过程
聚类:物以类聚,人以群分,原理:将没有类别的样本聚集成不同的组,这样的一组就叫做一簇。
聚类算法的目的就是依据已知的数据,将相似度高的样本集中到各自的簇中。例如,借助于电商平台用户的历史交易数据,将其划分为不同的价值等级;依据经纬度、交通状况、人流量等数据将地图上的几十个娱乐场所划分到不同的区块等。当然,聚类算法不仅仅可以将数据实现分割,还可以用于异常点的监控,所谓的异常点就是远离任何簇的样本,而这些样本可能就是某些场景下的关注点。信用卡交易中的异常,当用户进行频繁的奢侈品交易时可能意味着某种欺诈行为的出现;社交平台中的单击异常,当某个链接频繁地点入却又迅速地跳出,就可能说明这是一个钓鱼网站。

二、聚类算法

在数据挖掘领域,聚类算法有很多种(几十种),K-Means是聚类算法中的最常用的一种。每一种聚类算法都具有各自的优缺点,如有的只适合小样本的数据集,有的善于发现任何形状的簇,所以,在实际应用中可以尝试多种聚类效果,最终得出理想的分割。

  • 该书重点学习有关Kmeans和DBSCAN的聚类算法。

1.kmeans算法

Kmeans算法原理利用距离远近的思想将目标数据聚为指定的k个簇,簇内样本越相似,表明聚类效果越好。

关于kmeans的一篇博客K-Means(聚类)特别好,是举了“初始质点大哥和一群小弟”的形象比喻,大哥让我茅塞顿开。

优点:该算法最大的特点是简单,好理解,运算速度快。
缺点:该算法的两个致命缺点,一是聚类效果容易受到异常样本点的影响;二是该算法无法准确地将非球形样本进行合理的聚类。

选择K个点作为初始质心  
repeat  
    将每个点指派到最近的质心,形成K个簇  
    重新计算每个簇的质心  
until 簇不发生变化或达到最大迭代次数  

2.最佳k值的确定

对于Kmeans算法来说,如何确定簇数k值是一个至关重要的问题。

  • 最佳k值的确定
  • 1.拐点法
  • 2.轮廓系数法
  • 3.间隔统计量法
  • Kmeans聚类的应用
  • iris数据集的聚类
  • NBA球员数据集的聚类

三.DBSCAN算法

1.相关概念

优点:

  • DBSCAN密度聚类算法可以非常方便地发现样本集中的异常点,故通常可以使用该算法实现异常点的检测;
  • 密度聚类算法可以发现任何形状的样本簇,而且该算法具有很强的抗噪声能力。

2.密度聚类的步骤

(1)为密度聚类算法设置一个合理的半径ε以及ε领域内所包含的最少样本量MinPts。
(2)从数据集中随机挑选一个样本点p,检验其在ε领域内是否包
含指定的最少样本量,如果包含就将其定性为核心对象,并构成一个簇C;否则,重新挑选一个样本点。
(3)对于核心对象p所覆盖的其他样本点q,如果点q对应的ε领域内仍然包含最少样本量MinPts,就将其覆盖的样本点统统归于簇C。
(4)重复步骤(3),将最大的密度相连所包含的样本点聚为一类,形成一个大簇。
(5)完成步骤(4)后,重新回到步骤(2),并重复步骤(3)和(4),直到没有新的样本点可以生成新簇时算法结束。

概念比喻:有一种比喻把DBSCAN比作是“传销”。
(1)设置一个人传销的范围(半径ε)、和一个人传销最少达到的人数MinPts则把它作为新的核心对象。
(2)先随机选择一个人,看他周围能不能传销MinPts个人,如果可以的话把它当做核心对象把它定为一个簇C;否则,重新挑选一个人。
(3)被核心对象p传销的人q,如果q对应的传销范围(半径ε)内仍然包含最少MinPts的话,就将起传销范围的人q统统归为簇C。
(4)重复步棸(3),将所有被传销的人归为同一个核心对象定的一个簇内,这个簇所包含的人聚为一个类,形成一个大簇。
(5)完成步棸(4)后,重新回到步骤(2),并重复步骤(3)和(4),直到没有新的样本点可以生成新簇时算法结束。

3.可视化

有一个特别有意思的网站:https://www.naftaliharris.com/blog/visualizing-dbscan-clustering/
学习笔记——机器学习之无监督学习【从零开始学python数据分析与数据挖掘】_第1张图片
它可以把我们DBSCAN的迭代过程动态图画出来。

学习笔记——机器学习之无监督学习【从零开始学python数据分析与数据挖掘】_第2张图片
聚类结果是这样的:
学习笔记——机器学习之无监督学习【从零开始学python数据分析与数据挖掘】_第3张图片
还可以在这个网页上面传统的Kmeans聚类效果也很不错。

4.密度聚类与Kmeans的比较

Kmeans聚类的短板是无法对非球形的簇进行聚类,同时也非常容易受到极端值的影响,而密度聚类则可以弥补它的缺点。如果用于聚类的原始数据集为类球形,那么密度聚类和Kmeans聚类的效果基本一致。
但是像一些非球形的簇Kmeans就没有办法有很好的的效果了。
学习笔记——机器学习之无监督学习【从零开始学python数据分析与数据挖掘】_第4张图片

总结

  1. dbscan是基于密度计算聚类的,会剔除异常(噪声点)。如上图中的类别0,就是dbscan算法聚类出的噪声点(不是核心点且不再核心点的邻域内)。
  2. k-means需要指定k值,并且初始聚类中心对聚类结果影响很大。
  3. k-means把任何点都归到了某一个类,对异常点比较敏感。
  • 以上进行了对《从零开始学python数据分析与数据挖掘》中有关Kmeans和DBSCAN的聚类算法进行总结。

你可能感兴趣的:(学习笔记——机器学习之无监督学习【从零开始学python数据分析与数据挖掘】)