使用 Python 和 scikit-learn 学习聚类分析算法

使用无监督学习发现数据中的分组和异常

在本教程中,您将使用无监督学习来发现数据中的分组和异常。无监督学习是指没有真实情况或标记数据集向您显示预期结果。相反,您可以获取原始数据并使用各种算法来发现数据集群。如果您想了解无监督学习背后的理论和思想,请阅读用于数据分类的无监督学习

An animation displaying discovering grouping and anomalies in data

当聚类变得明显时(例如,在三维图表中),您可能会想将标签应用于聚类。这是使用无监督学习来发现数据中隐藏特征的示例。如果你不关心聚类,但想要了解有关异常值的更多信息,那么你正在研究异常检测

An animation showing an example of outliers and anamoly detection.

需要注意的是,当您尝试可视化数据时,您倾向于使用二维或三维数据,这是最容易绘制的。但是我在这里使用的技术适用于多维或超维数据。它更难可视化,但您仍然可以测量聚类中数据的数学分布,并以大致相同的方式使用发现的分组和异常值。

让我们开始吧

我设计本教程的目的是为普通读者和动手开发人员提供信息。如果你自己运行代码,你会得到更多,但如果你没有时间(或者编码不适合你),那么我已经提供了足够多的例子,无论如何你都会明白这个想法。本教程包括一个用 Python 编写的 Jupyter Notebook。您可以使用 Watson Studio 在 IBM Cloud 上运行 Notebook。

  1. 注册或登录。

  2. 创建一个空项目。

    • 单击“创建项目”或“新建项目”。

    • 选择“创建空项目”。

    • 为项目命名。

    • 选择现有的对象存储服务实例或创建一个新实例。

    • 单击创建

  3. 添加笔记本。

    • 单击“+添加到项目”。

    • 单击“笔记本”。

    • 单击“从 URL”。

    • 提供名称

    • 在“选择运行时”下,选择“**默认 Python 3.6 免费**”。

    • 输入作为笔记本 URLhttps://raw.githubusercontent.com/IBM/ml-learning-path-assets/master/notebooks/clustering_with_scikit-learn.ipynb

    • 单击 Create Notebook

  4. 运行笔记本。

    在打开的 Notebook 中,单击运行”以一次运行一个单元。本教程的其余部分遵循笔记本的顺序。

可视化工具

为了演示预测的聚类,我们总是使用颜色绘制数据集的两个或三个特征来显示聚类。对于大多数图表,我们使用 matplotlib 库和 seaborn 数据可视化库来设置样式。在某些情况下,我们还添加了 Plotly 交互式图表。当您想要旋转图表以从不同角度查看 3-D 聚类时,Plotly 图表特别有用。

scikit-学习

使用各种聚类分析算法的 scikit-learn 实现,你将了解它们的一些差异、优势和劣势。

数据集

scikit-learn 提供了有助于说明聚类算法差异的数据集。我们会在需要的地方使用这些数据,但我们也会使用我们的客户数据集来帮助您使用真实数据(而不是明显的形状)来可视化聚类。

使用我们的示例运行笔记本后,应尝试使用自己的数据来测试在本教程中学到的内容,并查看可能了解的数据。

聚类分析算法的类别

我们使用的算法分为三个不同的类别:

  • 基于质心的聚类

  • 基于密度的聚类

  • 分层聚类

笔记本中使用的算法如下:

类别算法描述
基于质心k-均值找到预定数量的中心点 (k),以根据距中心的距离创建 k 个聚类。
基于质心均值偏移寻找密度较高的区域以确定聚类中心。
基于密度DBSCAN扫描分离出噪声(稀疏区域中的点),并将密集区域中的数据组合在一起。
层次团聚聚类从每个点作为其自己的聚类开始,然后合并最近的聚类,直到达到目标。
k-means 聚类

让我们从 k 均值聚类开始。k-means 通常用作聚类算法的“Hello World”。“k”代表聚类(或聚类中心)的数量。要使用 k-means,必须设置“k”。这是 k-means 的一大弱点。当然,你可以编写一个循环并评估 k 的不同设置,但你会看到其他算法不会让你这样做。

我们的第一个示例使用使用 scikit-learn 函数生成的数据集。我们创建了三个离散的 blob,当 k=3 时,k-means 很容易预测它们。我们实际上创造了十维超球体!但是 k-means 对额外的维度没有问题。当我们在 3-D matplotlib(加上 seaborn)图表中显示斑点时,我们选择三个维度。make_blobs()

以下代码训练 k-means 模型并对数据集运行预测。该图表使用颜色来显示预测的聚类成员资格,并使用红色 X 来显示聚类中心。

当您为数据使用正确的聚类算法时,这是多么容易。如果运行的是 Notebook,请随意更改 k 并重新运行单元格,以查看当 k 不等于 3 时必须如何划分或组合 blob。

k-means是如何工作的?

k-means 首先在超空间中分配 k(三个)簇质心种子。您可以从随机点开始,但 scikit-learn 默认值更聪明一些。它在点之间留出一定的距离,以避免随机落入收敛于某些局部最小值的陷阱。另一个 scikit-learn 默认值 () 表示它将使用不同的种子运行 10 次,以确保它不会因某些“坏种子”而倒霉。n_init=10

接下来,它计算每个点和每个聚类质心之间的距离,并将每个点分配给最近的质心。分配点后,将计算每个点聚类的平均值。这些平均值在下一次迭代中用作质心。重复分配和重新定心过程,直到不需要进行重大的重新定心。

k 均值聚类的局限性

我们之前提到过,您需要指定“k”(聚类数)。如果尝试在 blob 示例中使用 3 以外的数字,则必须对 blob 进行划分或合并。

第二大限制是 k 均值将点分成球形(或超维中的超球体)。为了说明这一点,我们笔记本中的下一个示例使用 scikit-learn 的函数创建一个二维数据集,该数据集看起来像两个新月形,或者一个微笑和一个皱眉。make_moons()

从视觉上看,很明显,数据点形成了两个形状,当 k=2 时,你希望看到预测的聚类将微笑与皱眉分开。遗憾的是,您不能使用球形簇进行分离。

kmeans_moons.png

k-means 客户聚类器

为了看一个不那么做作的例子,我们使用了客户数据集的一部分,其中包括客户人口统计、账户活动和股票交易利润。再一次,我们有超过三个维度,但我们选择了三个重要的维度来帮助可视化。下图显示了 k=3 时的结果。我们将用它来展示其他一些算法的比较。掌握窍门后,使用自己的数据进行尝试。

kmeans_customers.png

在某些用例中,群集形状很有用。例如,聚类通常是图像识别的一部分,其目标是识别形状。但是,对于我们的客户示例,这些形状有助于我们演示集群分离和密度,但真正的目标是识别客户组,以便我们可以将这些分组用于业务目的。在我们的示例中,我们有一个流失风险标签,该标签未包含在用于训练和预测的数据集中。现在,我们将预测的集群与已知的流失风险进行比较,看看我们是否找到了可能感兴趣的客户分组。我们是否在客户分组中发现了隐藏的特征或共同特征?

kmeans_risk.png

事实证明,这三个集群非常适合分离低风险客户。高风险集群看起来很有用,但我们需要更多信息来了解中/高集群是否有用。我们将使用此外部评估和散点图来帮助说明我们在尝试其他一些聚类算法时的差异。

   在线教程

有需要的小伙伴,可以点击下方链接免费领取或者V扫描下方二维码免费领取🆓

请添加图片描述

人工智能书籍

第一阶段:零基础入门(3-6个月)

新手应首先通过少而精的学习,看到全景图,建立大局观。 通过完成小实验,建立信心,才能避免“从入门到放弃”的尴尬。因此,第一阶段只推荐4本最必要的书(而且这些书到了第二、三阶段也能继续用),入门以后,在后续学习中再“哪里不会补哪里”即可。

第二阶段:基础进阶(3-6个月)

熟读《机器学习算法的数学解析与Python实现》并动手实践后,你已经对机器学习有了基本的了解,不再是小白了。这时可以开始触类旁通,学习热门技术,加强实践水平。在深入学习的同时,也可以探索自己感兴趣的方向,为求职面试打好基础。

第三阶段:工作应用

这一阶段你已经不再需要引导,只需要一些推荐书目。如果你从入门时就确认了未来的工作方向,可以在第二阶段就提前阅读相关入门书籍(对应“商业落地五大方向”中的前两本),然后再“哪里不会补哪里”。

 有需要的小伙伴,可以点击下方链接免费领取或者V扫描下方二维码免费领取🆓

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值