使用 DBSCAN(基于密度的聚类算法) 对二维数据进行聚类分析

代码功能

生成数据:

使用 make_moons 方法生成一个非线性分布的二维数据集,模拟月亮形状的两个半环形分布,同时添加一定的噪声。

数据标准化:

使用 StandardScaler 对数据进行标准化处理,使不同特征的值具有相同的分布范围(零均值和单位方差),以提高 DBSCAN 的距离计算效果。

应用 DBSCAN:

使用 DBSCAN 算法对标准化后的数据进行聚类分析:

eps=0.2 定义两个点被视为"邻居"的最大距离。

min_samples=5 指定一个点需要至少有 5 个邻居才能被视为核心点。

算法将点划分为不同的簇或标记为噪声点。

可视化聚类结果:

使用 Matplotlib 将聚类结果以散点图形式展示:

每个簇以不同颜色表示。

噪声点用黑色标记。

输出聚类统计:

打印每个簇的编号及其包含的点数,同时统计噪声点的数量。

代码

复制代码
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_moons
from sklearn.cluster import DBSCAN
from sklearn.preprocessing import StandardScaler

# 1. 生成示例数据
X, y = make_moons(n_samples=300, noise=0.05, random_state=42)  # 生成类似月亮形状的数据

# 2. 数据标准化(DBSCAN 对距离敏感,建议先标准化)
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

# 3. 应用 DBSCAN
dbscan = DBSCAN(eps=0.2, min_samples=5)  # 设置超参数
labels = dbscan.fit_predict(X_scaled)

# 4. 可视化结果
# 获取每个簇的颜色
unique_labels = set(labels)
colors = [plt.cm.Spectral(each) for each in np.linspace(0, 1, len(unique_labels))]

# 绘制聚类结果
plt.figure(figsize=(8, 6))
for k, col in zip(unique_labels, colors):
    if k == -1:
        # 噪声点标记为黑色
        col = [0, 0, 0, 1]
    
    class_member_mask = (labels == k)
    xy = X[class_member_mask]
    plt.plot(xy[:, 0], xy[:, 1], 'o', markerfacecolor=tuple(col), markeredgecolor='k', markersize=6)

plt.title("DBSCAN Clustering")
plt.xlabel("Feature 1")
plt.ylabel("Feature 2")
plt.show()

# 5. 输出聚类结果
for i in unique_labels:
    if i == -1:
        print(f"Cluster: Noise (Label {i}) - Number of points: {(labels == i).sum()}")
    else:
        print(f"Cluster: {i} - Number of points: {(labels == i).sum()}")
相关推荐
禹凕8 小时前
滑动窗口算法实战指南
python·算法
DisonTangor8 小时前
【腾讯混元雪耻归来】 Hy4 preview:770B 参数 MoE 旗舰模型,1M 上下文全面开源
人工智能·算法·开源·aigc·腾讯云·腾讯云ai代码助手
明月_清风9 小时前
从二叉树到 B+ 树:一文搞懂工程中「树」的演化之道
数据结构·算法·go
渡我白衣9 小时前
并查集:基础认识与模拟实现
android·java·javascript·数据结构·c++·算法·并查集
电商API_180079052479 小时前
电商商品价格监控工具淘宝京东商品价格抓取API项目实操分享
java·大数据·开发语言·前端·数据挖掘
hetao173383710 小时前
2026-09-01~09-04 hetao1733837 的刷题记录
c++·算法
Evand J10 小时前
【MATLAB例程,图像滤波5】 反谐波均值滑动窗口滤波(CHMF)图像降噪与质量评价,附代码下载链接
图像处理·算法·计算机视觉·matlab·均值算法·滑动窗口滤波·均值滑动
血小板要健康10 小时前
链表 阶段算法总结
java·数据结构·笔记·算法·leetcode·链表
a1879272183110 小时前
【算法】回溯算法(三):三记重锤与 N 皇后——记忆化、状态设计与三层漏斗
算法·leetcode·go·剪枝·回溯·n皇后·算法讲解
2601_9620779812 小时前
利用Python,四步掌握机器学习
python·机器学习·数据挖掘·数据分析·编程