MATLAB数学建模——DBSCAN聚类

% 清空工作区,关闭所有图形窗口,清空命令行
clear; clc; close all;

% X的每一行都是一条数据

%% 1. 生成任意维数的数据
% 设置维度和聚类数目
numDimensions = 4; % 数据的维度
numClusters = 3; % 聚类的数量
numPointsPerCluster = 1000; % 每个聚类的点数

% 随机生成聚类中心
rng(1); % 固定随机数种子
clusterCenters = rand(numClusters, numDimensions) * 10;

% 初始化数据矩阵
X = [];

% 为每个聚类生成数据点
for i = 1:numClusters
    X = [X; bsxfun(@plus, randn(numPointsPerCluster, numDimensions), clusterCenters(i,:))];
end

% 添加一些随机噪声数据点
X = [X; randn(50, numDimensions) * 5 + 20]; 

%% 2. 执行DBSCAN聚类
% 设置DBSCAN的参数
epsilon = 1.5; % 半径参数 影响聚类数目
minPts = 5; % 最小点数,决定形成一个聚类所需的邻域点数

% 使用DBSCAN算法进行聚类
labels = dbscan(X, epsilon, minPts);

%% 3. 可视化聚类结果
% 由于高维数据无法直接可视化,因此我们使用PCA将数据降到2维
[coeff, score, ~] = pca(X);

% 绘制降维后的聚类结果
figure;
hold on;
gscatter(score(:,1), score(:,2), labels);
title('DBSCAN聚类结果(PCA降维到2维)');
xlabel('第一主成分');
ylabel('第二主成分');
hold off;

%% 4. 显示聚类结果信息
% 获取聚类数量(不包括噪声点)
numClustersDetected = max(labels);

% 显示每个聚类的点数
for i = 1:numClustersDetected
    fprintf('聚类 %d: %d 个点\n', i, sum(labels == i));
end
fprintf('噪声点: %d 个\n', sum(labels == -1));

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值