K均值(K-means)

本文详细介绍了K-means聚类算法的工作原理,包括步骤、优点和缺点,以及如何用MATLAB实现于UCI数据集Aggregation.mat上的实例。算法通过迭代优化将数据划分为K个簇,但对K值和初始中心点敏感,可能需要其他方法处理非凸形状簇。
摘要由CSDN通过智能技术生成

K均值(K-means)是一种常用的聚类算法,用于将数据集划分为K个不同的组(簇),使得每个数据点属于与其最近的均值点所代表的簇。

K均值算法的基本思想是通过迭代优化,将数据点分配到K个簇中,并调整簇的均值(中心)以最小化簇内数据点与对应中心点之间的距离。

K-means K均值聚类代码获取戳此处K-means K均值聚类代码获取戳此处K-means K均值聚类代码获取戳此处

K均值算法的步骤如下

①初始化:随机选择K个初始中心点(可以是数据集中的任意数据点)作为各个簇的中心。

②分配数据点:对于每个数据点,计算其与各个中心点的距离,并将其分配到距离最近的簇中。

③更新中心点:对于每个簇,计算该簇所有数据点的均值,更新该簇的中心点。

④重复步骤②和步骤③:直到满足停止条件(如中心点不再发生变化或达到最大迭代次数)。

K均值算法的目标是最小化所有数据点与其所属簇中心点之间的距离之和(即簇内的总方差)。这意味着每个簇的中心点应该尽可能代表该簇内的数据点,同时不同簇之间的中心点应该尽可能远离彼此。

K均值算法的优点包括简单易实现、计算效率高,适用于大规模数据集。然而,K均值算法也有一些缺点,例如对K值的选择敏感、对初始中心点的选择敏感,还有可能收敛到局部最优解等。在实际应用中,K均值算法常用于聚类分析、图像分割、异常检测等领域。需要注意的是,K均值算法对于非凸形状的簇效果可能不佳,因此在某些情况下可能需要其他更复杂的聚类算法来处理数据。

以UCI常用数据集Aggregation.mat为例进行展示。

Aggregation数据集具有两个特征,7种类别。matlab代码实现如下:

N = 7;  % 设定聚类数量

[m,n] = size(data);

pattern = zeros(m,n+1);   % n+1列用于标记当前点所分配到的类索引号

center = zeros(N,n);      % 初始化聚类中心

pattern(:, 1:n) = data(:,:);

for x=1:N

    center(x,:) = data(randi(788,1), :);    % 第一次随机产生聚类中心坐标

end

while 1

    distance = zeros(1,N);

    num = zeros(1,N);       % 记录各个类中包含元素个数

    new_center=zeros(N,n);  % 保存新得到的聚类中心

    

    for x=1:m

        for y=1:N

            distance(y) = norm(data(x,:)-center(y,:)); % 计算点到每个类的距离

        end

        [~, temp] = min(distance);  % 获取当前点到几个类的最小距离

        pattern(x, n+1) = temp; % 标记x位置的点分配到对应的类中

    end

    

    k = 0;

    % 将同一个类中的点坐标相加,计算新的中心坐标

    for y=1:N

        for x=1:m

            if pattern(x, n+1) == y

                new_center(y,:) = new_center(y,:)+pattern(x, 1:n);

                num(y) = num(y)+1;

            end

        end

        

        % 计算得到新的聚类中心点

        new_center(y,:) = new_center(y,:)/num(y);

        if norm(new_center(y,:)-center(y,:))<0.1

            % 是否接受当前新产生的聚类中心点

            k=k+1;

        end

    end

    

    if k==N

        break;

    else

        center = new_center;

    end

end

[m, n]=size(pattern);

对结果可视化结果如下:

代码更简洁!且分类效果更好!

  • 21
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值