python数据分类聚类案例_10种Python聚类算法完整示例(建议收藏)

聚类或聚类分析通常被用作数据分析技术,用于发现数据中的有趣模式,例如基于其行为的客户群。有许多聚类算法可供选择,对于所有情况,没有单一的最佳聚类算法。聚类或聚类分析是无监督学习问题。它通常被用作数据分析技术,用于发现数据中的有趣模式,例如基于其行为的客户群。有许多聚类算法可供选择,对于所有情况,没有单一的最佳聚类算法。相反,最好探索一系列聚类算法以及每种算法的不同配置。在本教程中,您将发现如何在 ...
摘要由CSDN通过智能技术生成

聚类或聚类分析通常被用作数据分析技术,用于发现数据中的有趣模式,例如基于其行为的客户群。有许多聚类算法可供选择,对于所有情况,没有单一的最佳聚类算法。

聚类或聚类分析是无监督学习问题。

它通常被用作数据分析技术,用于发现数据中的有趣模式,例如基于其行为的客户群。

有许多聚类算法可供选择,对于所有情况,没有单一的最佳聚类算法。相反,最好探索一系列聚类算法以及每种算法的不同配置。

在本教程中,您将发现如何在 python 中安装和使用顶级聚类算法。

完成本教程后,您将知道:聚类是在输入数据的特征空间中查找自然组的无监督问题。

对于所有数据集,有许多不同的聚类算法和单一的最佳方法。

在 scikit-learn 机器学习库的 Python 中如何实现、适配和使用顶级聚类算法。

让我们开始吧。

教程概述

本教程分为三部分:聚类

聚类算法

聚类算法示例库安装

聚类数据集

亲和力传播

聚合聚类

BIRCH

DBSCAN

K-均值

Mini-Batch K-均值

Mean Shift

OPTICS

光谱聚类

高斯混合模型

一.聚类

聚类分析,即聚类,是一项无监督的机器学习任务。

它包括自动发现数据中的自然分组。与监督学习(类似预测建模)不同,聚类算法只解释输入数据,并在特征空间中找到自然组或群集。

聚类技术适用于没有要预测的类,而是将实例划分为自然组的情况。

—源自:《数据挖掘页:实用机器学习工具和技术》2016年。

群集通常是特征空间中的密度区域,其中来自域的示例(观测或数据行)比其他群集更接近群集。群集可以具有作为样本或点特征空间的中心(质心),并且可以具有边界或范围。

这些群集可能反映出在从中绘制实例的域中工作的某种机制,这种机制使某些实例彼此具有比它们与其余实例更强的相似性。

—源自:《数据挖掘页:实用机器学习工具和技术》2016年。

聚类可以作为数据分析活动提供帮助,以便了解更多关于问题域的信息,即所谓的模式发现或知识发现。

例如:该进化树可以被认为是人工聚类分析的结果;

将正常数据与异常值或异常分开可能会被认为是聚类问题;

根据自然行为将集群分开是一个集群问题,称为市场细分。

聚类还可用作特征工程的类型,其中现有的和新的示例可被映射并标记为属于数据中所标识的群集之一。

虽然确实存在许多特定于群集的定量措施,但是对所识别的群集的评估是主观的,并且可能需要领域专家。通常,聚类算法在人工合成数据集上与预先定义的群集进行学术比较,预计算法会发现这些群集。

聚类是一种无监督学习技术,因此很难评估任何给定方法的输出质量。

—源自:《机器学习页:概率观点》2012。

二.聚类算法

有许多类型的聚类算法。

许多算法在特征空间中的示例之间使用相似度或距离度量,以发现密集的观测区域。因此,在使用聚类算法之前,扩展数据通常是良好的实践。

聚类分析的所有目标的核心是被群集的各个对象之间的相似程度(或不同程度)的概念。聚类方法尝试根据提供给对象的相似性定义对对象进行分组。

—源自:《统计学习的要素:数据挖掘、推理和预测》,2016年

一些聚类算法要求您指定或猜测数据中要发现的群集的数量,而另一些算法要求指定观测之间的最小距离,其中示例可以被视为“关闭”或“连接”。

因此,聚类分析是一个迭代过程,在该过程中,对所识别的群集的主观评估被反馈回算法配置的改变中,直到达到期望的或适当的结果。

scikit-learn 库提供了一套不同的聚类算法供选择。

下面列出了10种比较流行的算法:亲和力传播

聚合聚类

BIRCH

DBSCAN

K-均值

Mini-Batch K-均值

Mean Shift

OPTICS

光谱聚类

高斯混合

每个算法都提供了一种不同的方法来应对数据中发现自然组的挑战。

没有最好的聚类算法,也没有简单的方法来找到最好的算法为您的数据没有使用控制实验。

在本教程中,我们将回顾如何使用来自 scikit-learn 库的这10个流行的聚类算法中的每一个。

这些示例将为您复制粘贴示例并在自己的数据上测试方法提供基础。

我们不会深入研究算法如何工作的理论,也不会直接比较它们。

让我们深入研究一下。

三.聚类算法示例

在本节中,我们将回顾如何在 scikit-learn 中使用10个流行的聚类算法。

这包括一个拟合模型的例子和可视化结果的例子。

这些示例用于将粘贴复制到您自己的项目中,并将方法应用于您自己的数据。

1.库安装

首先,让我们安装库。

不要跳过此步骤,因为您需要确保安装了最新版本。

您可以使用 pip Python 安装程序安装 scikit-learn 存储库,如下所示:

sudo pip install scikit-learn

接下来,让我们确认已经安装了库,并且您正在使用一个现代版本。

运行以下脚本以输出库版本号。

# 检查 scikit-learn 版本

import sklearn

print(sklearn.__version__)

运行该示例时,您应该看到以下版本号或更高版本。

0.22.1

2.聚类数据集

我们将使用 make _ classification ()函数创建一个测试二分类数据集。

数据集将有1000个示例,每个类有两个输入要素和一个群集。这些群集在两个维度上是可见的,因此我们可以用散点图绘制数据,并通过指定的群集对图中的点进行颜色绘制。

这将有助于了解,至少在测试问题上,群集的识别能力如何。

该测试问题中的群集基于多变量高斯,并非所有聚类算法都能有效地识别这些类型的群集。因此,本教程中的结果不应用作比较一般方法的基础。

下面列出了创建和汇总合成聚类数据集的示例。

# 综合分类数据集<

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
GMM(Gaussian Mixture Model)是一基于高斯分布的概率模型,常用于聚类或密度估计。EM(Expectation-Maximization)算法是一迭代算法,通常用于GMM的参数估计。下面是使用Python实现GMM和EM算法的示例代码: ``` import numpy as np from sklearn.mixture import GaussianMixture # 生成随机数据 np.random.seed(0) X = np.concatenate([np.random.randn(100, 2) + [2, 2], np.random.randn(100, 2) + [-2, -2], np.random.randn(100, 2) + [2, -2]]) # 初始化GMM模型 gmm = GaussianMixture(n_components=3, covariance_type='full') # 训练模型 gmm.fit(X) # 打印聚类结果 print(gmm.predict(X)) # 打印GMM模型参数 print('Means:') print(gmm.means_) print('Covariances:') print(gmm.covariances_) print('Weights:') print(gmm.weights_) ``` 这段代码使用了`sklearn.mixture.GaussianMixture`类,它可以方便地进行GMM模型的训练和参数估计。其中,`n_components`参数指定了聚类个数,`covariance_type`参数指定了协方差矩阵类型。在上面的例子中,我们使用了`'full'`类型,即完整协方差矩阵。 下面是使用Python实现EM算法的示例代码: ``` import numpy as np # 初始化参数 np.random.seed(0) K = 3 N = 300 mu = np.array([[-2, 2], [2, 2], [0, -2]]) sigma = np.array([[[1, 0], [0, 1]], [[1, 0.5], [0.5, 1]], [[0.5, 0], [0, 0.5]]]) alpha = np.ones(K) / K x = np.zeros((N, 2)) for i in range(K): x[i * 100:(i + 1) * 100, :] = np.random.multivariate_normal(mu[i, :], sigma[i, :, :], 100) # EM算法迭代 for t in range(10): # E步:计算后验概率 gamma = np.zeros((N, K)) for k in range(K): gamma[:, k] = alpha[k] * np.exp(-0.5 * np.sum((x - mu[k, :]) ** 2 / sigma[k, :, :], axis=1)) / np.sqrt(np.linalg.det(sigma[k, :, :])) gamma /= np.sum(gamma, axis=1, keepdims=True) # M步:更新模型参数 for k in range(K): Nk = np.sum(gamma[:, k]) mu[k, :] = np.sum(gamma[:, k].reshape(-1, 1) * x, axis=0) / Nk sigma[k, :, :] = np.sum(gamma[:, k].reshape(-1, 1, 1) * np.matmul((x - mu[k, :]).reshape(-1, 2, 1), (x - mu[k, :]).reshape(-1, 1, 2)), axis=0) / Nk alpha[k] = Nk / N # 打印模型参数 print('Iteration', t + 1) print('Means:') print(mu) print('Covariances:') print(sigma) print('Weights:') print(alpha) ``` 这段代码使用了EM算法来估计GMM模型的参数。其中,`mu`、`sigma`和`alpha`分别表示高斯分布的均值、协方差矩阵和权重,`gamma`表示后验概率。在每一轮迭代中,首先计算后验概率,然后根据后验概率更新模型参数。迭代结束后,打印出模型参数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值