小冰千颂 2024-08-11 23:43 采纳率: 0%
浏览 12

ap聚类算法matlab

在用matlab搞AP算法时最后的图呈现这种情况
有没有知道这是怎么回事呀/(ㄒoㄒ)/~~
是不是我的数据不好呀/(ㄒoㄒ)/~~
感谢感谢🙏
以下是我的代码,希望指正

D = pdist2(locations, locations, 'euclidean');
S = -D;
preference = median(S(:));
[idx, netsim, dpsim, expref] = apcluster(S, preference);
k = numel(unique(idx));
cluster_centers = [];
for i = 1:k
    cluster_points = locations(idx == i, :);
    center = mean(cluster_points, 1); 
    cluster_centers = [cluster_centers; center];
end
disp(['实际聚类数量: ', num2str(k)]);
disp('聚类中心坐标:');
disp(cluster_centers);
figure;
hold on;
gscatter(locations(:,1), locations(:,2), idx, 'rgb', 'o', 8);
plot(cluster_centers(:,1), cluster_centers(:,2), 'k*', 'MarkerSize', 10, 'LineWidth', 2);
for i = 1:k
    cluster_points = locations(idx == i, :);
    center = cluster_centers(i, :);
    for j = 1:size(cluster_points, 1)
        plot([cluster_points(j,1), center(1)], [cluster_points(j,2), center(2)], 'k--', 'LineWidth', 0.75);
    end
end
xlabel('经度');
ylabel('纬度');
title(['AP 聚类结果,聚类数量 k = ', num2str(k)]);
legend('Cluster 1', 'Cluster 2', 'Cluster 3', 'Cluster Centers', 'Location', 'Best');
hold off;

img

  • 写回答

3条回答 默认 最新

  • 一直免费一直爽 2024-08-11 23:43
    关注

    以下回复参考:皆我百晓生券券喵儿等免费微信小程序作答:

    要解决这个问题,首先确保你的MATLAB环境正确安装,并且已经导入了scikits.learn库,这将有助于实现AP(自动聚类)算法。以下是解决问题的步骤:

    步骤1:导入必要的库

    % 导入所需的库
    import numpy as np
    from sklearn.cluster import AgglomerativeClustering
    

    步骤2:定义数据集

    假设我们有一个包含多列数据的数据集。为了演示目的,我们将创建一个简单的示例。

    # 假设我们有三列数据
    data = np.array([[1, 2], [3, 4], [5, 6], [7, 8], [9, 10], [11, 12]])
    

    步骤3:执行AP聚类

    接下来,我们需要运行AP聚类算法以找出最佳的聚类数。这里我们可以使用AgglomerativeClustering函数。

    # 定义聚类数k
    k = 9
    
    # 创建并运行AP聚类
    clusterer = AgglomerativeClustering(n_clusters=k)
    labels = clusterer.fit_predict(data)
    
    # 打印聚类中心
    centers = clusterer.cluster_centers_
    print("聚类中心:", centers)
    

    步骤4:查看聚类结果

    现在,让我们打印出每个簇的标签和相应的中心点。

    # 打印每个簇的标签和中心点
    for i in range(k):
        print(f"Cluster {i+1}:")
        for j in range(len(labels)):
            if labels[j] == i:
                print(f"{j} -> ({data[j][0]}, {data[j][1]})", end=" ")
        print()
        print(f"Center: ({centers[i][0]}, {centers[i][1]})")
    
    # 确保输出整洁
    print("\n")
    

    解释

    • 在上述代码中,我们通过np.array()函数从给定的列表中创建了一个数组。
    • 使用AgglomerativeClustering函数来创建聚类模型,传入参数n_clusters=k表示我们希望找到的最佳聚类数为9个。
    • 运行模型并预测每个样本所属的簇。
    • 最后,我们打印出每个簇的标签和相应中心点的位置。

    如果你遇到任何问题,或者想要更深入地了解如何改进这个过程,欢迎随时提问!

    评论 编辑记录

报告相同问题?

问题事件

  • 修改了问题 8月11日
  • 创建了问题 8月11日