sdustrs 2023-08-11 16:08 采纳率: 25%
浏览 7
已结题

基于轮盘赌算法的k-means++的算法复杂度(matlab程序)


% k-means++算法,选择尽可能距离远的初始聚类中心
function center = KmeansPPFun(data,K)
    % Choose the first inital centroid randomly
    center = data(randperm(size(data,1),1)',:); 

    % Select remaining initial centroids (a total number of k-1)
    for i = 2:K
        distance_matrix = zeros(size(data,1),i-1); % size(data,1)是数据点个数N
        for j = 1:size(distance_matrix,1) % size(distance_matrix,1) 是数据点个数N
            for m = 1:size(distance_matrix,2) % size(distance_matrix,2)是当前已经选好的聚类中心个数
                distance_matrix(j,m) = sum((data(j,:)-center(m,:)) .^ 2);
            end
        end
        % Choose next centroid according to distances between points and
        % previous cluster centroids.
        index = Roulettemethod(distance_matrix); % 轮盘赌算法
        center(i,:) = data(index,:);
    end

% 轮盘赌算法
function [index] = Roulettemethod(distance_matrix)

% Find shortest distance between one sample and its closest cluster centroid
[min_distance,~] = min(distance_matrix,[],2);

% Normalize for further operations
min_distance = min_distance ./ sum(min_distance);

% Construct roulette according to min_distance
temp_roulette = zeros(size(distance_matrix,1),1);
for i = 1:size(distance_matrix,1) % size(distance_matrix,1)是数据点个数N
    temp_roulette(i,1) = sum(min_distance(1:i,:));
end

% Generate a random number for selection
temp_rand = rand();

% Find the corresponding index
for i = 1:size(temp_roulette,1) % size(temp_roulette,1)是数据点个数N
    if((i == 1) && temp_roulette(i,1) > temp_rand)
        index = 1;
    elseif((temp_roulette(i,1) > temp_rand) && (temp_roulette(i-1,1) < temp_rand))
        index = i;
    end
end
end
  • 写回答

4条回答 默认 最新

  • 喝茶品人生 2023-08-11 16:19
    关注

    这个算法主要分析的是初始聚类中心和迭代更新聚类中心各自的时间复杂度,但是你代码的逻辑很乱,比如这里为什么要用三层循环,明明用矩阵运算就可以做的,大致只能看出你要用距离信息选择下一个聚类中心,先交给GPT去解释代码吧,逻辑弄清楚才能分析复杂度

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 8月19日
  • 已采纳回答 8月11日
  • 修改了问题 8月11日
  • 赞助了问题酬金20元 8月11日
  • 展开全部

悬赏问题

  • ¥200 解决登录微信老版本限制封号问题
  • ¥15 mysql中时间处理问题
  • ¥20 讲解此音频放大电路原理及关键部分
  • ¥15 rtsp 转 m3u8 执行后卡在Decoding VUI
  • ¥20 微信小程序转发链接问题,已禁止转发仍能转发的场景
  • ¥15 关于#硬件架构#的问题:根据开片的IC来判断是哪一款
  • ¥15 matlab simulink
  • ¥15 rtos搭建sip协议开发包
  • ¥100 TM4C1290NCPDT 在线调试
  • ¥15 window系统获取某进程打开的文件路径