精华内容
下载资源
问答
  • Kmeans算法matlab

    2015-12-12 21:09:36
    %N是数据一共分多少类 %data是输入的不带分类标号的数据 %u是每一类的中心 %re是返回的带分类标号的数据
  • kmeans算法 matlab

    2012-06-21 20:06:34
    LITEKMEANS K-means clustering, accelerated by matlab matrix operations.
  • Kmeans算法matlab实现

    2020-07-10 20:45:30
    k均值聚类算法(k-means clustering algorithm)是一种迭代求解的聚类分析算法,其步骤是,预将数据分为K组,则随机选取K个对象作为初始的聚类中心,然后计算每个对象与各个种子聚类中心之间的距离,把每个对象分配...
  • kmeans算法matlab实现

    热门讨论 2011-01-20 14:39:14
    matlab实现遥感图像分割,利用kmeans算法
  • K-means, Matlab, 聚类算法,机器学习 有丰富的注释解释代码含义,并提供了修改思路
  • Kmeans算法Matlab语言

    2010-09-27 09:33:41
    里面包含Kmeans程序和聚类数据,是用Matlab编写的,欢迎下载。
  • “如果把人工智能比作一块大蛋糕,监督学习只是上面的一层奶油“。日常生活中,从人脸识别、语音识别到搜索引擎,我们看到越来越多人工智能领域的算法逐渐走向落地...本文是记录自己过去学习KMeans算法的系统小结,...

    093c2d3f4befdefdbd1b888bb817d118.png

    “如果把人工智能比作一块大蛋糕,监督学习只是上面的一层奶油“。

    日常生活中,从人脸识别、语音识别到搜索引擎,我们看到越来越多人工智能领域的算法逐渐走向落地。尽管全球每日新增数据量以PB或EB级别增长,但是大部分数据属于无标注甚至非结构化。所以相对于监督学习,不需要标注的无监督学习蕴含了巨大的潜力与价值。

    聚类算法KMeans是无监督学习的杰出代表之一。本文是记录自己过去学习KMeans算法的系统小结,将从“KMeans简介,优缺点与优化策略,结合EM算法解释KMeans以及手推KMeans”几个方面来尽可能彻底、清晰地搞明白这个算法,希望对大家能有所帮助。

    一、聚类与KMeans

    与分类、序列标注等任务不同,聚类是在事先并不知道任何样本标签的情况下,通过数据之间的内在关系把样本划分为若干类别,使得同类别样本之间的相似度高,不同类别之间的样本相似度低(即增大类内聚,减少类间距)。

    聚类属于非监督学习,K均值聚类是最基础常用的聚类算法。它的基本思想是,通过迭代寻找K个簇(Cluster)的一种划分方案,使得聚类结果对应的损失函数最小。其中,损失函数可以定义为各个样本距离所属簇中心点的误差平方和:

    其中

    代表第
    个样本,
    所属的簇,
    代表簇对应的中心点,
    是样本总数。

    二、具体步骤

    KMeans的核心目标是将给定的数据集划分成K个簇(K是超参),并给出每个样本数据对应的中心点。具体步骤非常简单,可以分为4步:

    (1)数据预处理。主要是标准化、异常点过滤。

    (2)随机选取K个中心,记为

    (3)定义损失函数:

    (4)令t=0,1,2,... 为迭代步数,重复如下过程知道

    收敛:

    (4.1)对于每一个样本

    ,将其分配到距离最近的中心

    (4.2)对于每一个类中心k,重新计算该类的中心

    KMeans最核心的部分就是先固定中心点,调整每个样本所属的类别来减少

    ;再固定每个样本的类别,调整中心点继续减小
    。两个过程交替循环,
    单调递减直到最(极)小值,中心点和样本划分的类别同时收敛。

    2a0f0e12097a3587811b553453215db2.png
    KMeans迭代示意图

    三、优缺点与优化方法

    KMenas的优点:

    • 高效可伸缩,计算复杂度 为
      接近于线性(N是数据量,K是聚类总数,t是迭代轮数)。
    • 收敛速度快,原理相对通俗易懂,可解释性强。

    KMeans也有一些明显的缺点:

    • 受初始值和异常点影响,聚类结果可能不是全局最优而是局部最优。
    • K是超参数,一般需要按经验选择
    • 样本点只能划分到单一的类中

    根据以上特点,我们可以从下面几个角度对算法做调优。

    1. 数据预处理:归一化和异常点过滤

    KMeans本质上是一种基于欧式距离度量的数据划分方法,均值和方差大的维度将对数据的聚类结果产生决定性影响。所以在聚类前对数据(具体的说是每一个维度的特征)做归一化和单位统一至关重要。此外,异常值会对均值计算产生较大影响,导致中心偏移,这些噪声点最好能提前过滤。

    2.合理选择K值

    K值的选择一般基于实验和多次实验结果。例如采用手肘法,尝试不同K值并将对应的损失函数画成折线。手肘法认为图上的拐点就是K的最佳值(上图对应K=3)。

    70d3a0c4ec7a0723fe2c59b95d4a3863.png
    手肘法

    为了将找寻最佳K值的过程自动化,研究人员提出了Gap Statistic方法。它的有点是我们不再需要肉眼判断,只需要找到最大的Gap Statistic对应的K即可。

    沿用第一节中损失函数记为

    ,当分为K类时,Gap Statistic定义为:
    的期望,一般由蒙特卡洛模拟产生。我们在样本所在的区域内按照均匀分布随机地产生和原始样本数一样多的随机样本,并对这个随机样本做KMeans,得到一个
    ,重复多次就可以计算出
    的近似值。

    的物理含义是随机样本的损失与实际样本的损失之差。Gap越大说明聚类的效果越好
    。一种极端情况是,随着K的变化
    几乎维持一条直线保持不变。说明这些样本间没有明显的类别关系,数据分布几乎和均匀分布一致,近似随机。此时做聚类没有意义。

    3.改进初始值的选择

    之前我们采取随机选择K个中心的做法,可能导致不同的中心点距离很近,就需要更多的迭代次数才能收敛。如果在选择初始中心点时能让不同的中心尽可能远离,效果往往更好。这类算法中,以K-Means++算法最具影响力。

    4.采用核函数

    主要思想是通过一个非线性映射,将输入空间中的数据点映射到高位的特征空间中,并在新的空间进行聚类。非线性映射增加了数据点线性可分的概率(与SVM中使用核函数思想类似)对于非凸的数据分布可以达到更为准确的聚类结果。

    四、从EM算法解释KMeans

    EM(Expectation-Maximum)算法即期望最大化算法,是最常见的隐变量估计方法。EM算法是一种迭代优化策略,每一次迭代都分为两步:期望步(E)、极大步(M)。EM算法的提出最初是为了解决数据缺失情况下的参数估计问题,基本思想是首先根据已有的观测数据,通过极大似然估计估计出模型的参数;再根据上一步估计出的参数值估计缺失数据的值;最后根据估计出的缺失数据和原有的观测数据重新对参数值进行估计,反复迭代直到收敛。

    EM算法基础和收敛有效性等问题可以参考Dempster、Laird和Rubin三人于1977年所做的文章《Maximum likelihood from incomplete data via the EM algorithm》。

    KMeans算法等价于用EM算法求解以下含隐变量的最大似然问题:

    3cddae75e6b6903e5dc59113e3a37fef.png

    其中

    是模型的隐变量,可以理解为当样本
    离第
    个类的中心点
    距离最近是,概率正比于
    ,否则为0。

    在E步骤,计算:

    35334358f00eb3cdd8c14208f66164e3.png

    等同于在KMeans中对于每一个点

    找到离当前最近的类

    在M步骤,找到最优的参数

    ,使得似然函数最大(假设
    对应的分布为
    ,且满足
    ):

    c1aa1063d990be642c961ff432f8026f.png

    经推导得:

    0150bba76e44ee20f78da1608159587c.png

    这一步等价于找到最优的中心点

    ,使得损失函数
    达到最小。此时每个样本
    对应的类
    已确定,每个类
    对应的最优中心点
    可以由该类所有点取平均值得到。这与KMeans算法中根据当前类的分配更新聚类中心的步骤等同。

    五、手推KMeans

    最后,为大家提供一个pyTorch手推实现KMeans的代码(通过sklearn包也能方便调用),结合理论梳理一遍具体实现,相信可以理解的更为扎实。

    3168aac603088400d4640af10b140789.png

    小结

    KMeans作为一种无监督聚类算法,在日常生活中有大量应用。经过适当的预处理,可以对数据做初步分析,甚至挖掘出隐含的价值信息(例如对用户日志做聚类,得到一些高频高质量的新FAQ)。相比于SVM、GBDT等机器学习算法,理解起来相对通俗易懂,实乃实在又实用。

    Reference:

    1.《百面机器学习》5.1 K均值聚类:P92-P101

    2.EM算法详解

    3.手推KMeans

    展开全文
  • matlabkmeans使用 matlabkmeans使用 英文实在太难看懂了,翻译一下 k-means简介 后续有空就加上吧 matlab使用 [IDX, C] = KMEANS(X, K);返回聚类下标IDX,聚类中心坐标C [IDX, C, SUMD] = KMEANS(X, K); 返回...

    matlab中kmeans使用

    matlab中kmeans使用

    英文实在太难看懂了,翻译一下

    k-means简介

    后续有空就加上吧

    matlab使用

    [IDX, C] = KMEANS(X, K);返回聚类下标IDX,聚类中心坐标C
    [IDX, C, SUMD] = KMEANS(X, K); 返回聚类内的点到中心的距离之和的K×1 向量 sumD.
    [IDX, C, SUMD, D] = KMEANS(X, K) ;返回每个点到聚类中心的距离 N×K矩阵D.

    [ … ] = KMEANS(…, ‘PARAM1’,val1, ‘PARAM2’,val2, …) 其他参数和选值如下:

    1. ‘Distance’ ——描述距离的方式,可选参数值如下:

      ‘sqeuclidean’ : 默认值,欧式距离
      ‘cityblock’ : 绝对差的和,也就是L1距离
      ‘cosine’ : 1减去点之间夹角的余弦值(作为向量处理)
      ‘correlation’ : 1减去点之间的样本相关性(作为值的序列处理)
      ‘hamming’ 不同位的百分比(只适用于二进制数据)

    2. ‘Start’——选择初始聚类中心的方法,可选参数值如下:
      “plus”-默认值。根据K-means++算法从X中选择K个观测值:从X中随机均匀地选择第一个聚类中心,然后从剩余的数据点随机选择每个后续的聚类中心,其概率与该点最近的现有聚类中心的距离成正比。

    “sample”-从X中随机选择K个观测值。

    “uniform”-从X的范围内随机均匀地选择K个点。对于Hamming距离无效。

    “cluster”-对X的随机10%子样本执行初步聚类阶段。这个初步阶段本身使用“sample”初始化。(这是mini kmeans用到的吗?)

    matrix-起始位置的K×P矩阵。在这种情况下,可以设置矩阵,KMEANS从矩阵的第一个维度推断K。您还可以提供一个三维数组,这意味着从数组的第三维度“复制”的值。
    4. ‘Replicates’ :重复次数
    5…

    展开全文
  • 数据挖掘(KDD)聚类算法KMEANSMATLAB实现
  • 基于Matlab模糊聚类Kmeans算法,有兴趣和需要的可以研究
  • matlab实现kmeans算法

    2013-12-26 11:22:25
    matlab实现kmeans算法,可直接运行,稍加改动可实现复杂需求。
  • kmeans聚类算法MATLAB实现

    千次阅读 2018-03-13 18:59:29
    kmeans算法就是要将这个集合分成k类,每一类有一个中心,其中k的大小是人为设置的。 kmeans工作流程如下: 1. 随意选k个点作为每个类初始的中心点 2. 遍历每一个点i,分别计算点i到这k个点的距离,离哪一个点...

    原理 :##

    一个含n个元素的集合D:{x1, x2, …, xn},其中xi = (xi1,xi2,…,xir),即表示每个元素有r个属性(纬度)。kmeans算法就是要将这个集合分成k类,每一类有一个中心,其中k的大小是人为设置的。
    kmeans工作流程如下:

    1. 随意选k个点作为每个类初始的中心点
    2. 遍历每一个点i,分别计算点i到这k个点的距离,离哪一个点最近就将点i划分成哪一类
    3. 所有的点都划分完后,求每一类所有点的平均值,作为该类新的中心点
    4. 然后重复2,3直到中心点不在变化,或者重复2,3到一定次数

    优缺点:

    优点:简单,高效
    缺点:需要人为设置聚类的个数;对一些不规则的分布聚类效果很差;对异常值十分敏感,如下图:
    这里写图片描述

    MATLAB实现

    源数据链接:https://pan.baidu.com/s/1aioiSIkvdN53AU1lzAScrw
    提取码:df1g,若失效,可从资源链接中直接获取
    代码:

    [b] = xlsread('aggregate.xlsx',1,'A1:c788');
    x = b(:,1);
    y = b(:,2);
    %c = b(:,3);
    
    data = [x(1:7,1),y(1:7,1)];
    %用于记录点到样本的距离
    dist = zeros(1,7);
    for k = 1:300
    %用来记录点被分到那个类中
    c = zeros(788,1);
    sum = zeros(7,3);
    for i = 1:788
        for j = 1:7
            dist(1,j) = sqrt((x(i,1)-data(j,1))^2+(y(i,1)-data(j,2))^2);
        end
        [mi,index]=min(dist);
        c(i,1) = index;
        sum(c(i,1),1)=x(i)+sum(c(i,1),1);
        sum(c(i,1),2)=y(i)+sum(c(i,1),2);
        sum(c(i,1),3)=sum(c(i,1),3)+1;
    end
    %重新计算均值
    for m = 1:7
        data(m,1) = sum(m,1)/sum(m,3);
        data(m,2) = sum(m,2)/sum(m,3);
    end
    end
    %画图
    for i = 1:788
        rand('seed',c(i,1));
        color = rand(1,3);
        plot(x(i,1),y(i,1),'*','color',color);
        hold on;
    end    
    

    这里写图片描述

    展开全文
  • MATLAB实现的K-means均值算法,可以对图像进行K-means均值聚类分析,注释很清晰,运行也很流畅
  • kmeans聚类算法matlab实现

    万次阅读 2014-12-08 20:54:12
    自己实现kmeans聚类算法matlab语言,带有界面,容易理解

    运行界面(可以支持任意维数据)



    单介绍下kmeans算法流程:

    假设要把样本集分为c个类别,算法描述如下:
    (1)适当选择c个类的初始中心;
    (2)在第k次迭代中,对任意一个样本,求其到c各中心的距离,将该样本归到距离最短的中心所在的类;
    (3)利用均值等方法更新该类的中心值;
    (4)对于所有的c个聚类中心,如果利用(2)(3)的迭代法更新后,值保持不变,则迭代结束,否则继续迭代。
    算法的最大优势在于简洁和快速。算法的关键在于初始中心的选择和距离公式。
    matlab实现:
    function [ class count]=k_means(data,k);
    
    %clear
    %load testdata.mat
    %k=2;
    sum=size(data,1);
    for i=1:k
      centroid(i,:)=data(floor(sum/k)*(i-1)+1,:);
    end
    tic
    ck=0;
    while 1
        temp=zeros(1,2);;
        count=zeros(1,k);
        ck=ck+1
        for i=1:sum
            for j=1:k
                dist(j)=norm(data(i,:)-centroid(j,:));
            end
                [a min_dist]=min(dist);
                count(min_dist)=count(min_dist)+1;
                class(min_dist,count(min_dist))=i;
        end
        
      %重新计算类中心    
        for i=1:k   
            for j=1:count(i)
                temp=temp+data(class(i,j),:);
            end
            temp_centroid(i,:)=temp/(count(i));
            temp(1,:)=0;
          % temp_centroid(i,:)=re_calculate(class(i,:),count(i),tdata);
        end  
        %计算新的类中心和原类中心距离centr_dist;
        for i=1:k
            centr_dist(i)=norm(temp_centroid(i,:)-centroid(i,:));
        end
        if max(centr_dist)<=0
            break;
        else
            for i=1:k
                centroid(i,:)=temp_centroid(i,:);
                %重新进行前俩不
            end
        end 
    end
    toc
        
    

    数据点是鼠标插进去的,通过界面可以很清晰的看到分类过程,功能截图如下:

    源码连接:kmeans聚类算法源码

    展开全文
  • kmeans算法matlab实践

    2013-10-14 22:57:00
    对imgRGB进行聚类算法,默认应该是欧拉距离 19 [classIndex, classRGB] = kmeans( double (imgRGB), 3 ); 20 classRGB = int32(classRGB); 21 22 % 把3个中心点的RGB值作为输出值,使图像只有那么3种颜色 ...
  • Kmeans算法MATLAB中的实现及实例

    千次阅读 2020-04-05 09:25:30
    K-means 是一种基本的、经典的聚类方法,也被称为K-平均或K-均值算法,是一种广泛使用的聚类算法。K-Means算法是聚焦于相似的无监督的算法,以距离作为数据对象间相似性度量的标准,即数据对象间的距离越小,则它们...
  • function kmeans()clear all;clc;k=3;%k为聚类个数x = 0.8 + sqrt(0.01) * randn(100,2); %随机生成数据集y = 0.2 + sqrt(0.02) * randn(100,2);z= 0.5 + sqrt(0.01) * randn(100,2);% size(x)= 100,2% plot(x(:,1),...
  • kmeans算法

    2015-03-24 14:21:36
    自己写的kmeans算法,代码为matlab
  • 展开全部1、从Kmeans说起Kmeans是一个非常基础的聚类算法,使用了迭代...下面说一下如何在matlab中使用kmeans算法。创建7个二维的数据点:复制代码代码如下:x=[randn(3,2)*.4;randn(4,2)*.5+ones(4,1)*[4 4]];使用km...
  • Kmeans算法详解及MATLAB实现

    万次阅读 多人点赞 2016-04-25 16:08:53
    下面是我的MATLAB代码,效果不是特别好,可能需要改进,因为找中心的方式有好多种,这种方式可能会出现最终找不到最好的中心点的情况: 主函数: clc; clear all; close all; data1=ones(30,1);%产生...
  • Kmeans聚类matlab源代码

    2015-06-10 20:13:55
    Kmeans聚类算法matlab源代码,可用于图像分割等数字图像处理领域。
  • Kmeans算法

    热门讨论 2012-10-17 21:34:53
    经典的Kmeans算法 资料非常详细,包括word文档,PPT,matlab code
  • 模式识别Kmeans算法

    2013-02-02 10:16:49
    模式识别中经典的Kmeans算法 使用Matlab编写
  • matlab实现kmeans算法,非常完整例子一维和二维
  • sklearn的官网链接http://scikit-learn.org/stable/index.html#kmeans算法概述:MATLAB kmeans算法:下面利用python中sklearn模块进行数据的聚类数据集自制数据集维度为3。需要用到的python库:xlrd:读取Excel中的...
  • 图像处理方面,利用matlab自带函数进行kmeans聚类,完成图像分割任务。完整代码,参数(k值)根据需求自行选择,当前代码中k=2。
  • 以基因表达谱为测试数据,附有中文说明,给出Kmeans算法的流程

空空如也

空空如也

1 2 3 4 5 ... 14
收藏数 272
精华内容 108
关键字:

kmeans算法matlab

matlab 订阅