
DBSCAN聚类(密度基空间聚类算法)——设定阈值与最小观测数,获取无聚类中心结果,
附详细案例与Matlab代码
这个DBSCAN案例实现得挺有意思。咱们直接上代码,边看边聊。首先得准备点测试数据,用三维正态
分布随机数生成三个簇:
```matlab
% 生成三簇三维数据(可替换为自己的数据矩阵)
mu = [1 2 3; 4 5 6; 7 8 9]; % 各维度均值
sigma = cat(3,[1 1 1],[0.5 0.5 0.5],[2 2 2]); % 协方差矩阵
data = [mvnrnd(mu(1,:),sigma(:,:,1),200);
mvnrnd(mu(2,:),sigma(:,:,2),150);
mvnrnd(mu(3,:),sigma(:,:,3),100)];
```
生成的点云在空间里呈现不同密度分布,第三簇故意把协方差调大,让数据更分散。接下来是核心
的DBSCAN函数:
```matlab
function [IDX, isNoise] = DBSCAN(data, epsilon, minPts)
[m,n] = size(data);
visited = false(m,1);
IDX = zeros(m,1);
cluster = 1;
for i = 1:m
if ~visited(i)
visited(i) = true;
neighbors = regionQuery(data,i,epsilon);
if numel(neighbors) < minPts
IDX(i) = -1; % 标记为噪声
isNoise(i) = true;
else
expandCluster(i,neighbors,cluster,epsilon,minPts);