1. 算法识别
这段 MATLAB 代码使用的是 K-means 聚类算法 。代码中通过 kmeans(coords, numClusters) 函数对船舶 AIS 轨迹的经纬度坐标进行聚类,将轨迹点划分为 200 个簇。

2. 核心代码解析
以下是代码中与 K-means 聚类相关的关键部分:
matlab
% 使用K-means进行聚类
numClusters = 200; % 设定聚类的簇数,需要根据数据情况调整
% 提取经纬度点
coords = [CF.Lon, CF.Lat];
% 使用K-means算法进行聚类
[idx, C] = kmeans(coords, numClusters);
其中:
numClusters = 200:指定聚类簇数为 200。coords = [CF.Lon, CF.Lat]:提取所有轨迹点的经纬度作为聚类输入特征。[idx, C] = kmeans(coords, numClusters):执行 K-means 聚类,返回每个点的簇标签idx和簇中心坐标C。
3. K-means 算法原理
K-means 是一种基于划分的经典无监督聚类算法,其核心思想是将 n 个样本划分为 k 个簇,使得簇内样本之间的相似度最高、簇间相似度最低。算法步骤如下:
- 初始化:随机选择 k 个样本作为初始簇中心。
- 分配:计算每个样本到各簇中心的距离(通常为欧氏距离),将其分配到最近的簇。
- 更新:重新计算每个簇的质心(即簇内所有样本的均值),作为新的簇中心。
- 迭代:重复步骤 2 和 3,直到簇中心不再变化或达到最大迭代次数。
4.
聚类结果可视化
代码中通过以下方式展示聚类结果:
matlab
% 为每个簇分配不同的颜色
clusterColors = lines(numClusters);
% 绘制聚类结果
figure; geoaxes; hold on;
for k = 1:numClusters
cluster = coords(idx == k, :);
if ~isempty(cluster)
geoscatter(cluster(:, 2), cluster(:, 1), 0.5, ...
'MarkerEdgeColor', clusterColors(k, :), ...
'MarkerFaceColor', clusterColors(k, :));
end
end
% 绘制聚类中心点
geoscatter(C(:, 2), C(:, 1), 8, 'r*', 'LineWidth', 2);
title('K-means Clustered Ship Trajectories');
geobasemap topographic;
每个簇使用不同颜色绘制轨迹点,红色星号标记簇中心位置,便于观察船舶轨迹的空间聚集特征。
5. 聚类结果保存
聚类完成后,代码将结果保存为 CSV 文件:
matlab
% 保存聚类结果和聚类中心点
CF.Cluster = idx;
writetable(CF, fullfile(outpath, 'AIS_kmeans_clustered.csv'));
C_table = array2table(C, 'VariableNames', {'Lon', 'Lat'});
writetable(C_table, fullfile(outpath, 'Cluster_Centers.csv'));
AIS_kmeans_clustered.csv:包含原始轨迹数据及每个点所属的簇标签。Cluster_Centers.csv:保存 200 个簇中心的经纬度坐标。
6. 总结
该代码使用 K-means 聚类算法对船舶 AIS 轨迹点进行空间聚类分析,通过设定 200 个簇将轨迹点按地理位置分组,并在地图上可视化聚类结果和簇中心,适用于分析船舶活动密集区域和典型航线模式。
6.1数据

6.2代码数据路径

7所有代码获取
(MATLAB代码) 船舶轨迹聚类:K-means 算法(260912)
https://mbd.pub/o/bread/mbd-YZaVlJ5qag==