赞
踩
聚类学习
一、基本概念
二、工作流程
三、参数选择
四、DBSCAN算法的优缺点:
优点:
缺点:
五、MATLAB的DBSCAN算法代码实现:
- % DBSCAN算法
- function [clusters, clusterCount] = dbscan(data, epsilon, minPts)
- dataSize = size(data, 1);
- visited = false(dataSize, 1);
- clusters = zeros(dataSize, 1);
- clusterCount = 0;
-
- for i = 1:dataSize
- if ~visited(i)
- visited(i) = true;
- neighborPts = regionQuery(data, i, epsilon);
-
- if numel(neighborPts) < minPts
- clusters(i) = -1; % 标记为噪声点
- else
- clusterCount = clusterCount + 1;
- expandCluster(data, i, neighborPts, clusterCount, epsilon, minPts, visited, clusters);
- end
- end
- end
- end
-
- % 密度可达判断
- function neighborPts = regionQuery(data, pointIdx, epsilon)
- distances = pdist2(data(pointIdx, :), data, 'euclidean');
- neighborPts = find(distances <= epsilon);
- end
-
- % 扩展聚类
- function expandCluster(data, pointIdx, neighborPts, clusterCount, epsilon, minPts, visited, clusters)
- clusters(pointIdx) = clusterCount;
- i = 1;
-
- while i <= numel(neighborPts)
- currentPt = neighborPts(i);
-
- if ~visited(currentPt)
- visited(currentPt) = true;
- newNeighborPts = regionQuery(data, currentPt, epsilon);
-
- if numel(newNeighborPts) >= minPts
- neighborPts = [neighborPts; newNeighborPts'];
- end
- end
-
- if clusters(currentPt) == 0
- clusters(currentPt) = clusterCount;
- end
-
- i = i + 1;
- end
- end
-
- % 示例数据
- data = [
- 1, 2;
- 1.5, 1.8;
- 5, 8;
- 8, 8;
- 1, 0.6;
- 9, 11
- ];
-
- % 设置 DBSCAN 参数
- epsilon = 2;
- minPts = 2;
-
- % 运行 DBSCAN
- [clusters, clusterCount] = dbscan(data, epsilon, minPts);
-
- % 打印聚类结果
- disp('聚类结果:');
- disp(clusters);
- disp('聚类数目:');
- disp(clusterCount);
代码描述:
定义 DBSCAN 函数:包含三个函数:dbscan
(DBSCAN算法的主函数),regionQuery
(用于找到邻域内的点),expandCluster
(用于扩展聚类)。
DBSCAN 算法:主要分为几个步骤:
minPts
阈值,则扩展聚类。数据预处理:准备数据并设置 DBSCAN 的参数(epsilon
和 minPts
)。
运行 DBSCAN 算法:使用提供的数据和参数运行 DBSCAN 函数,获得聚类结果和聚类数目。
输出结果:显示聚类结果和聚类的数量。
data
:示例数据集,包含需要进行聚类的数据。epsilon
:DBSCAN 中的领域半径,用于确定某个点的邻域范围。minPts
:DBSCAN 中的最小点数,用于判定某个点为核心点的邻域内最少点数。clusters
:存储数据点所属的聚类编号。clusterCount
:最终确定的聚类数目。visited
:标记数据点是否已经被访问过的逻辑数组。neighborPts
:存储邻域内的数据点索引。distances
:数据点之间的距离矩阵。Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。