查看原文
其他

Python无监督学习的4大聚类算法

Vihar Kurama 慧天地 2020-09-16


点击图片上方蓝色字体“慧天地”即可订阅

(点击图片可放大观看,更多通知请留意文末推荐)

【新智元导读】无监督学习是机器学习技术中的一类,用于发现数据中的模式。本文介绍用Python进行无监督学习的几种聚类算法,包括K-Means聚类、分层聚类、t-SNE聚类、DBSCAN聚类等。


无监督学习是机器学习技术中的一类,用于发现数据中的模式。无监督算法的数据没有标注,这意味着只提供输入变量(X),没有相应的输出变量,在无监督学习中,算法自己去发现数据中有意义的结构。


Facebook首席AI科学家Yan Lecun解释说,无监督学习——即教机器自己学习,不需要明确地告诉它们所做的每一件事情是对还是错,是“真正的”AI的关键。


监督学习 VS 无监督学习

在监督学习中,系统试图从之前给出的例子中学习。反之,在无监督学习中,系统试图从给出的例子中直接找到模式。因此,如果数据集有标记,那么它是有监督问题,如果数据集无标记,那么它是一个无监督问题。

如上图,左边是监督学习的例子; 我们使用回归技术来寻找特征之间的最佳拟合线。而在无监督学习中,输入是基于特征分离的,预测则取决于它属于哪个聚类(cluster)。


重要术语

  • 特征(Feature):用于进行预测的输入变量。

  • 预测(Predictions):当提供一个输入示例时,模型的输出。

  • 示例(Example):数据集的一行。一个示例包含一个或多个特征,可能有标签。

  • 标签(Label):特征的结果。

为无监督学习做准备

在本文中,我们使用Iris数据集(鸢尾花卉数据集)来进行我们的第一次预测。该数据集包含150条记录的一组数据,有5个属性——花瓣长度,花瓣宽度,萼片长度,萼片宽度和类别。三个类别分别是Iris Setosa(山鸢尾),Iris Virginica(维吉尼亚鸢尾)和Iris Versicolor(变色鸢尾)。对于我们的无监督算法,我们给出鸢尾花的这四个特征,并预测它属于哪一类。我们在Python中使用sklearn Library来加载Iris数据集,并使用matplotlib来进行数据可视化。以下是代码片段。

紫罗兰色:山鸢尾,绿色:维吉尼亚鸢尾,黄色:变色鸢尾


聚类(Clustering)

在聚类中,数据被分成几个组。简单地说,其目的是将具有相似特征的组分开,并将它们组成聚类。

可视化示例:

在上图中,左边的图像是未完成分类的原始数据,右边的图像是聚类的(根据数据的特征对数据进行分类)。当给出要预测的输入时,就会根据它的特征在它所属的聚类中进行检查,并做出预测。


Python中的K-Means聚类

 K-Means是一种迭代聚类算法,它的目的是在每次迭代中找到局部最大值。首先,选择所需数量的聚类。由于我们已经知道涉及3个类,因此我们通过将参数“n_clusters”传递到K-Means模型中,将数据分组为3个类。


现在,随机将三个点(输入)分成三个聚类。基于每个点之间的质心距离,下一个给定的输入被分为所需的聚类。然后,重新计算所有聚类的质心。


聚类的每个质心是特征值的集合,定义生成的组。检查质心特征权重可以定性地解释每个聚类代表什么类型的组。


我们从sklearn库导入K-Means模型,拟合特征并进行预测。

Python中的K Means实现:


分层聚类

顾名思义,分层聚类是一种构建聚类层次结构的算法。该算法从分配给它们自己的一个cluster的所有数据开始,然后将最近的两个cluster加入同一个cluster。最后,当只剩下一个cluster时,算法结束。


 分层聚类的完成可以使用树状图来表示。

下面是一个分层聚类的例子。 数据集可以在这里找到:

 https://raw.githubusercontent.com/vihar/unsupervised-learning-with-        python/master/seeds-less-rows.csv

Python中的分层聚类实现:



K Means聚类与分层聚类的区别
  • 分层聚类不能很好地处理大数据,但K Means聚类可以。因为K Means的时间复杂度是线性的,即O(n),而分层聚类的时间复杂度是二次的,即O(n2)。

  • 在K Means聚类中,当我们从聚类的任意选择开始时,多次运行算法产生的结果可能会有所不同。不过结果可以在分层聚类中重现。

  • 当聚类的形状是超球形时(如2D中的圆形,3D中的球形),K Means聚类更好。

  • K-Means聚类不允许嘈杂的数据,而在分层聚类中,可以直接使用嘈杂的数据集进行聚类。

t-SNE聚类

t-SNE聚类是用于可视化的无监督学习方法之一。t-SNE表示t分布的随机近邻嵌入。它将高维空间映射到可以可视化的2或3维空间。具体而言,它通过二维点或三维点对每个高维对象进行建模,使得相似的对象由附近的点建模,而不相似的对象很大概率由远离的点建模。


Python中的t-SNE聚类实现,数据集是Iris数据集:


这里Iris数据集具有四个特征(4d),它被变换并以二维图形表示。类似地,t-SNE模型可以应用于具有n个特征的数据集。

DBSCAN聚类

DBSCAN(Density-Based Spatial Clustering of Applications with Noise,具有噪声的基于密度的聚类方法)是一种流行的聚类算法,用作预测分析中 K-means的替代。它不要求输入聚类的数值才能运行。但作为交换,你必须调整其他两个参数。


scikit-learn实现提供了eps和min_samples参数的默认值,但这些参数通常需要调整。eps参数是在同一邻域中考虑的两个数据点之间的最大距离。min_samples参数是被认为是聚类的邻域中的数据点的最小量。

Python中的DBSCAN聚类:


更多无监督技术:

  • 主成分分析(PCA)

  • 异常检测(Anomaly detection)

  • 自动编码(Autoencoders)

  • 深度置信网络(Deep Belief Nets)

  • Hebbian Learning

  • 生成对抗网络(GAN)

  • 自组织映射(Self-Organizing maps)

来源:新智元(版权归原作者及刊载媒体所有)


荐读

点击下文标题即可阅读

那个学Python的同龄人,也许已经抛弃了你

未来是人工智能的时代,更是Python的时代!

基于Python的“地理处理”并行方案

Python需求增速达174%,AI人才缺口仍超百万!

如何用Python和深度神经网络识别图像?

编辑 /王欠鑫    审核  / 王欠鑫 卞艺潼

指导:万剑华教授(微信号wjh18266613129)

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存