聚类方法介绍

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
智能开放搜索 OpenSearch行业算法版,1GB 20LCU 1个月
简介: 聚类方法介绍

聚类是一种无监督学习方法,它的目的是将数据集中的数据点划分为若干个相似的子集,称为聚类。

常用聚类方法介绍

常用的聚类方法有以下几种:1.基于划分的聚类:这种方法将数据点划分为k个预先给定的簇,使得每个簇内部的数据点尽可能相似,而不同簇之间的数据点尽可能不同。代表性的算法有k-means、k-medoids、k-modes等。2.基于层次的聚类:这种方法将数据点按照层次结构进行划分,可以得到不同层次和粒度的聚类结果。代表性的算法有凝聚型层次聚类(自底向上)和分裂型层次聚类(自顶向下)。3.基于密度的聚类:这种方法将密度高且连续的数据点划分为一个簇,而忽略密度低或孤立的数据点。代表性的算法有DBSCAN、OPTICS、DENCLUE等。4.基于网格的聚类:这种方法将数据空间划分为若干个网格单元,然后对每个网格单元进行统计和评估,从而得到具有高密度或特定形状的网格单元组成的簇。代表性的算法有STING、CLIQUE、WaveCluster等。5.基于模型的聚类:这种方法假设每个簇都服从某种概率模型或函数模型,并根据最小化误差等原则来确定模型参数和簇划分。代表性的算法有高斯混合模型、谱聚类、神经网络等。

代码实现

k-means聚类

这里我先使用k-means算法,它的基本思想是:给定一个数据集和一个预先设定的簇数k,首先随机选择k个数据点作为初始簇中心,然后计算每个数据点到各个簇中心的距离,并将其分配到最近的簇中心所在的簇,接着更新每个簇的中心为该簇内所有数据点的均值,重复这个过程直到簇中心不再变化或达到最大迭代次数。下面是用python实现k-means算法的代码:

# 导入库
import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
from sklearn.datasets import make_blobs
# 使用make_blobs函数生成一个有四个簇的数据集,每个簇有100个观测值和两个特征
X, y = make_blobs(n_samples=400, n_features=2, centers=4)
# 可视化生成的数据集,以第一个特征和第二个特征为例
plt.scatter(X[:, 0], X[:, 1])
plt.xlabel("feature_1")
plt.ylabel("feature_2")
plt.show()
# 使用K-means算法对数据进行聚类,假设有四个簇
kmeans = KMeans(n_clusters=4)
# 训练模型并得到每个观测值的簇标签
kmeans.fit(X)
labels = kmeans.predict(X)
# 可视化聚类结果,以第一个特征和第二个特征为例,并用不同颜色表示不同簇
plt.scatter(X[:, 0], X[:, 1], c=labels, cmap="rainbow")
plt.xlabel("feature_1")
plt.ylabel("feature_2")
plt.show()

经纬度坐标数据,也可以使用K-means算法对它们进行聚类,如果需要更精确可以调整为导航距离数据。

# 导入库
import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
# 创建一些坐标数据,每个坐标由纬度和经度组成
coordinates = [[40.7128, -74.0060], [34.0522, -118.2437], [41.8781, -87.6298], [29.7604, -95.3698], [39.9526, -75.1652],
               [48.8566, 2.3522], [51.5074, -0.1278], [52.5200, 13.4050], [55.7558, 37.6173], [35.6895, 139.6917]]
# 将坐标数据转换为一个二维数组
X = np.array(coordinates)
# 使用K-means算法对坐标数据进行聚类,假设有两个簇
kmeans = KMeans(n_clusters=2)
# 训练模型并得到每个坐标的簇标签
kmeans.fit(X)
labels = kmeans.predict(X)
# 可视化聚类结果,以纬度和经度为例,并用不同颜色表示不同簇
plt.scatter(X[:, 0], X[:, 1], c=labels, cmap="rainbow")
plt.xlabel("latitude")
plt.ylabel("longitude")
plt.show()

K-means算法有以下优缺点。1.优点:简单、灵活、高效;容易调整参数和解释结果;适用于大规模数据集和高维特征;可以发现隐藏在数据中的模式。2.缺点:需要提前指定K值,但并不总是容易知道有多少个簇合适;对初始簇中心和噪声敏感,可能导致不稳定或局部最优的结果;假设每个簇是球形且具有相似大小和密度,但实际数据可能不符合这些假设;可能无法处理非线性可分或自然不平衡的数据;

DBSCAN密度聚类算法。

密度聚类是一种基于样本分布的紧密程度来确定聚类结构的算法。它从样本密度的角度来考察样本之间的可连接性,并通过可连接性不断扩展聚类簇来获得最终的聚类结果。密度聚类的原理和步骤大致如下: 定义一个邻域半径ε和一个最小点数MinPts,用于判断一个点是否为核心点。对每个点,计算其ε邻域内的点数,如果大于或等于MinPts,则该点为核心点,否则为边界点或噪声点。对每个核心点,找出其直接密度可达的点,即在其ε邻域内且也是核心点的其他点。递归地找出所有直接密度可达的核心点,并将它们连接起来形成一个最大密度相连集合,即一个聚类簇。重复上述步骤,直到所有核心点都被分配到某个聚类簇中,或者没有更多的核心点存在。

from sklearn.cluster import DBSCAN
from sklearn.datasets import make_moons
import matplotlib.pyplot as plt
# 生成月牙形数据
X, y = make_moons(n_samples=200, noise=0.05)
# 创建DBSCAN对象,设置参数eps=0.3, min_samples=5
dbscan = DBSCAN(eps=0.3, min_samples=5)
# 对数据进行聚类
dbscan.fit(X)
# 获取聚类标签
labels = dbscan.labels_
# 绘制聚类结果
plt.scatter(X[:, 0], X[:, 1], c=labels)
plt.show()

# 导入库
import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import DBSCAN
# 生成随机数据
X = np.random.randn(1000, 2)
# 设置DBSCAN算法参数
eps = 0.3 # 邻域半径
MinPts = 10 # 密度阈值
# 创建DBSCAN对象并进行聚类
dbscan = DBSCAN(eps=eps, min_samples=MinPts)
dbscan.fit(X)
# 获取聚类标签和核心样本索引
labels = dbscan.labels_
core_indices = dbscan.core_sample_indices_
# 绘制聚类结果图
plt.figure(figsize=(8, 6))
plt.scatter(X[:, 0], X[:, 1], c=labels, cmap='rainbow')
plt.scatter(X[core_indices, 0], X[core_indices, 1], marker='o', s=80,
            edgecolor='k', facecolor='none', label='Core points')
plt.xlabel('X1')
plt.ylabel('X2')
plt.title('DBSCAN clustering result')
plt.legend()
plt.show()

1.DBSCAN聚类算法有以下优点:可以发现任意形状的聚类,不受球形假设的限制。可以识别噪声点,并将其从聚类中排除。不需要指定聚类的个数,只需要设置邻域半径和密度阈值。可以处理高维数据,具有较好的可伸缩性。2.DBSCAN算法有以下缺点:对于不同密度的数据集,可能难以选择合适的邻域半径和密度阈值。对于边界点,可能会因为访问顺序的不同而被分配到不同的簇中。对于高维数据,可能难以找到合适的距离度量方法。

目录
相关文章
|
机器学习/深度学习 算法 数据可视化
无监督学习的集成方法:相似性矩阵的聚类
在机器学习中,术语Ensemble指的是并行组合多个模型,这个想法是利用群体的智慧,在给出的最终答案上形成更好的共识。
213 0
|
6月前
|
机器学习/深度学习 算法 数据挖掘
算法金 | K-均值、层次、DBSCAN聚类方法解析
**摘要:** 这篇文章介绍了聚类分析的基本概念和几种主要的聚类算法。聚类是无监督学习中用于发现数据内在结构的技术,常用于市场分析、图像分割等场景。K-均值是一种基于划分的算法,简单高效但易受初始值影响;层次聚类包括凝聚和分裂方式,形成层次结构但计算复杂;DBSCAN基于密度,能处理任意形状的簇,但参数选择敏感。文章还讨论了这些算法的优缺点和适用场景,并提供了相关资源链接和Python实现。
112 9
算法金 | K-均值、层次、DBSCAN聚类方法解析
|
7月前
|
算法 数据可视化 数据挖掘
R语言确定聚类的最佳簇数:3种聚类优化方法
R语言确定聚类的最佳簇数:3种聚类优化方法
|
7月前
特征选择方法——最佳子集回归、逐步回归
特征选择方法——最佳子集回归、逐步回归
|
7月前
|
算法 数据挖掘 索引
R语言最优聚类数目k改进kmean聚类算法
R语言最优聚类数目k改进kmean聚类算法
|
7月前
|
算法 搜索推荐 数据挖掘
C# | KMeans聚类算法的实现,轻松将数据点分组成具有相似特征的簇
聚类是将数据点根据其相似性分组的过程,它有很多的应用场景,比如:图像分割、文本分类、推荐系统等等。在这些应用场景里面我们需要将数据点分成多个簇,每个簇内的数据点具有相似的特征,以便于我们能够更简单的处理数据。 KMeans算法是一种常用的聚类算法,它可以将数据点分组成具有相似特征的簇。
181 0
C# | KMeans聚类算法的实现,轻松将数据点分组成具有相似特征的簇
|
机器学习/深度学习 存储 索引
用4种回归方法绘制预测结果图表:向量回归、随机森林回归、线性回归、K-最近邻回归
用4种回归方法绘制预测结果图表:向量回归、随机森林回归、线性回归、K-最近邻回归
163 0
|
算法 数据可视化 数据挖掘
聚类算法(上):8个常见的无监督聚类方法介绍和比较
本文将全面概述Scikit-Learn库中用于的聚类技术以及各种评估方法。本文作为第一部分将介绍和比较各种聚类算法
624 0
|
机器学习/深度学习 算法 数据挖掘
|
机器学习/深度学习 算法 数据挖掘
聚类练习:对地理数据应用二分k-均值算法聚类
聚类练习:对地理数据应用二分k-均值算法聚类
270 0
聚类练习:对地理数据应用二分k-均值算法聚类