【聚类】DBCAN聚类

OPTICS是基于DBSCAN改进的一种密度聚类算法,对参数不敏感。当需要用到基于密度的聚类算法时,可以作为DBSCAN的一种替代的优化方案,以实现更优的效果。

原理

基于密度的聚类算法(1)------DBSCAN详解_dbscan聚类_root-cause的博客-CSDN博客

重点关照

DBSCAN的优缺点及应用场景:

(1)DBSCAN的优点:

1) 可以对任意形状的稠密数据集进行聚类,相对的,K-Means之类的聚类算法一般只适用于凸数据集。

2) 可以在聚类的同时发现异常点,对数据集中的异常点不敏感,和BIRCH聚类一样。

3) 聚类结果没有偏倚,相对的,K-Means之类的聚类算法初始值对聚类结果有很大影响。

(2)DBSCAN的缺点:

1)如果样本集的密度不均匀、聚类间距差相差很大时,聚类质量较差,这时用DBSCAN聚类一般不适合。

2) 如果样本集较大时,聚类收敛时间较长,此时可以对搜索最近邻时建立的KD树或者球树进行规模限制来改进。

3) 调参稍复杂,对参数比较敏感。主要需要对距离阈值ϵ,邻域样本数阈值MinPts联合调参,不同的参数组合对最后的聚类效果有较大影响

python实现

原始数据

python 复制代码
from sklearn.cluster import DBSCAN
#from sklearn import metrics
from sklearn.datasets import make_blobs
from sklearn.preprocessing import StandardScaler
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['STKaiTi'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号

# 产生数据
centers = [[1, 1], [-1, -1], [1, -1]]
#make_blobs函数是为聚类产生数据集,产生一个数据集和相应的标签
X,ltrue=make_blobs(n_samples=750,centers=centers,cluster_std=0.4,random_state=0)
X = StandardScaler().fit_transform(X)
# 画出原始的数据点
plt.figure(0, figsize=(8, 6))
plt.scatter(X[:, 0], X[:, 1],c = ltrue)
plt.show()

DBSCAN聚类

python 复制代码
# 调用DBSCAN
model = DBSCAN(eps=0.3, min_samples=10)
db=model.fit(X)
labels = db.labels_
#-1表示那些噪声点
n_clusters_ = len(set(labels)) - (1 if -1 in labels else 0)
print(n_clusters_)
print(set(labels))
# 统计每一类的数量
import pandas as pd
counts = pd.value_counts(model.fit_predict(X),sort=True)
print(counts)

plt.figure(1, figsize=(8, 6))
plt.scatter( X[:, 0], X[:, 1],c=db.labels_)
plt.show()

图中黑色的是异常点,在取参数的过程中发现对参数比较敏感,一不小心就不对了

相关推荐
晴天的雨.9923 分钟前
类和对象下(内部类,匿名对象,对象拷贝时的编译器优化)
开发语言·c++·算法
旖旎夜光22 分钟前
LeetCode 238:除自身以外数组的乘积(前缀和) —— 题解
数据结构·c++·算法·leetcode·前缀和
咖啡星人k23 分钟前
2026 AI Agent 智能体:ReAct 让 AI 边想边做、把大任务拆成小步骤(MonkeyCode 实战)
人工智能·深度学习·机器学习·语言模型·自然语言处理
一条大祥脚29 分钟前
26杭电暑期第八场(后半)快读|快写|tarjan|路径DP|mex转化|扫描线|前缀和|二分图
数据结构·算法·tarjan·杭电多校·强联通分量·动态规划dp
奈斯先生Vector32 分钟前
从“能调用”到“可运营”:AI Agent 进入多模型时代后的架构升级
java·javascript·数据库·人工智能·算法·架构·aigc
2601_9561219744 分钟前
Bellman-ford算法
算法
逻辑君1 小时前
ANNA 7.6 知识智能引擎白皮书
人工智能·机器学习
叠层归一研究院1 小时前
基于区分本源的此刻存在唯一性本体论推演
人工智能·算法
luj_17681 小时前
尾椎藏今生记忆?骨盆对应不确定性
开发语言·网络·c++·经验分享·算法