聚类方法介绍

本文涉及的产品
RDS DuckDB + QuickBI 企业套餐,8核32GB + QuickBI 专业版
简介: 聚类方法介绍

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

常用聚类方法介绍

常用的聚类方法有以下几种: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算法有以下缺点:对于不同密度的数据集,可能难以选择合适的邻域半径和密度阈值。对于边界点,可能会因为访问顺序的不同而被分配到不同的簇中。对于高维数据,可能难以找到合适的距离度量方法。

目录
相关文章
|
机器学习/深度学习 算法 数据挖掘
【Python机器学习】密度聚类DBSCAN、OPTICS的讲解及实战演示(附源码 超详细)
【Python机器学习】密度聚类DBSCAN、OPTICS的讲解及实战演示(附源码 超详细)
1307 0
|
机器学习/深度学习 算法 数据建模
【机器学习基础】决策树(Decision Tree)
【机器学习基础】决策树(Decision Tree)
970 0
|
数据采集 机器学习/深度学习 算法
聚类算法
【6月更文挑战第6天】聚类算法是无监督学习方法,用于将数据集划分成相似样本的类别。常见的聚类算法有K均值、层次聚类和DBSCAN等。在分析时,涉及数据预处理、选择算法、确定聚类数目、执行聚类及评估结果。层次聚类分为自底向上和自顶向下两种,而K-Means是基于质心的聚类算法。评估指标如轮廓系数可衡量聚类效果。聚类过程包括初始化中心、计算样本与中心距离、分配类别和更新中心,直到收敛。
1112 2
|
弹性计算 负载均衡 网络协议
云计算中的弹性伸缩与负载均衡技术解析
【7月更文挑战第4天】弹性伸缩与负载均衡作为云计算平台中的两大关键技术,对于构建高可用、可扩展的应用系统具有重要意义。通过合理利用这两种技术,企业可以灵活应对不断变化的业务需求,降低运营成本,提高资源利用效率。未来,随着技术的不断进步和应用的深入,弹性伸缩与负载均衡技术将在更多领域发挥重要作用,推动云计算技术的持续发展。
1056 4
|
机器学习/深度学习 人工智能 算法
机器学习算法之聚类算法
机器学习算法之聚类算法
|
机器学习/深度学习 算法 数据可视化
技术心得记录:机器学习笔记之聚类算法层次聚类HierarchicalClustering
技术心得记录:机器学习笔记之聚类算法层次聚类HierarchicalClustering
732 0
|
机器学习/深度学习 算法 搜索推荐
机器学习聚类算法
聚类算法是无监督学习技术,用于发现数据集中的自然群体,如用户画像、广告推荐等。常见的聚类算法包括K-Means,它基于距离分配样本至簇,适合球形分布;层次聚类则通过合并或分裂形成簇,能发现任意形状的簇;DBSCAN依据密度来聚类,对噪声鲁棒。KMeans API中`sklearn.cluster.KMeans(n_clusters=8)`用于指定簇的数量。评估聚类效果可使用轮廓系数、SSE等指标,Elbow方法帮助选择合适的K值。
|
算法 数据挖掘 计算机视觉
程序技术好文:聚类算法一(Kmeans、层次类聚、谱类聚)
程序技术好文:聚类算法一(Kmeans、层次类聚、谱类聚)
385 0
|
机器学习/深度学习 算法 数据可视化
【机器学习】聚类算法——DBSCAN算法(理论+图解)
【机器学习】聚类算法——DBSCAN算法(理论+图解)
3753 0
【机器学习】聚类算法——DBSCAN算法(理论+图解)
|
机器学习/深度学习 算法 数据挖掘
Python | 机器学习之聚类算法
Python | 机器学习之聚类算法
1008 0

热门文章

最新文章