在octave语言中K-means聚类算法求聚类中心的向量化计算

时间:2021-08-15 01:36:39

  使用octave编程的时候,一定要注意使用向量化编程的思想,下面我就说说我今天做题遇到的一个K-means聚类问题,如何使用octave中的函数向量计算聚类中心centroids。

octave几个函数:

  bsxfun:

    二元操作函数,调用方式: bsxfun (F, A, B),A为 向量、二维矩阵或多维矩阵,B也为 向量、二维矩阵或多维矩阵,F为二元操作函数。如果 A 和 B 维度数不一样,或者 对应维度长度不一样,此函数会首先尝试把 A 和 B 都broadcast 到相同维度,且对应维度长度相同的两个向量。然后,再把A和B中一一的两个元素使用二元函数F做计算,返回的结果是与broadcast之后的A和B相同维度、对应维度相同长度的一个向量。

    例如:

      A = [1, 2, 3];  #这里A 可以看做是行向量

      B = [1, 2, 3];  #这里B 可以看做是行向量

      C = bsxfun(@plus, A, B);

      则 C = [2, 4, 6]

    因为它天生支持broadcast,所以如果必须要broadcast,系统不会产生 “warning: operator +: automatic broadcasting operation applied”

    警告。

    例如:

      A2 = A';  # 这里表示 撇号的作用就是求转置。即C是A向量的转置 ,即C是列向量。

      D = bsxfun(@plus, A2, B);

      则 D = [ 2, 3, 4,

            3, 4, 5,

            4, 5, 6]

      解释:

        发现A2是3×1,B是1×3,于是将A2 broadcast 到3×3,其他两列拷贝第一列的值;B 也broadcast到3×3,

      其他两行拷贝第一行的值;接着,将A2与B对应位置的元素,进行plus操作,这里是求和操作,于是得到结果D。

  accumarray:

    分组计算函数,调用方式: accumarray (SUBS, VALS, SZ, FUNC, FILLVAL, ISSPARSE),SUBS为一个数组,

  其元素内容为新的数组下标值,VALS为一个数组,其元素为要进行操作的数值,缺省的动作是 sum 求和操作。

    例如:

      A = [1, 2, 3, 4]' #注意A为列向量

      B = [1, 2, 1, 2]' #注意B为列向量

      C = accumarray(B, A)

        则 C = [4, 6]' #注意C为列向量。

        解释:

          B的值对应分配到新的数组的对应下标,由于B(1) = B(3) = 2,于是A(1),A(3) 的值分到C(1),且缺省FUNC是求和操作,

        于是C(1)=A(1)+A(3) = 4,同理C(2) = A(2) + A(4) = 6

    accumarray函数调用,返回的结果是一维向量,如果想返回矩阵呢,那就必须用到下面的accumdim函数。

  accumdim:

    分组计算函数,调用方式:accumdim (SUBS, VALS, DIM, N, FUNC, FILLVAL)

    例如:

      A = [1, 1, 1; 2, 2, 2; 3, 3, 3; 4, 4, 4] #A为4×3矩阵

      B = [1, 2, 1, 2]' #B为列向量

      C = accumdim(B, A)

        则 C = [ 4, 4, 4; 6, 6, 6]  #2×3矩阵。

        解释,简单的说,就是将A矩阵中的行向量,按B下标分组,每组中的向量对应列求和,得到新的一个向量。

    假设,X为样本点矩阵,m×n,表示m个样本点,n个特征;idx为一维列向量,其值为m个样本点对应的聚类下标,取值(1..K),即K个聚类。

 centroids即为K个聚类中心,为K×n矩阵,每一行表示一个中心,第k行表示第k个聚类的中心。现在要求新的聚类中心。

代码如下:

position = unique(idx)

cmeans = accumdim(idx, X, 1, 0, @mean)

centroids(position, :) = cmeans

  

 

在octave语言中K-means聚类算法求聚类中心的向量化计算的更多相关文章

  1. K-Means 聚类算法原理分析与代码实现

    前言 在前面的文章中,涉及到的机器学习算法均为监督学习算法. 所谓监督学习,就是有训练过程的学习.再确切点,就是有 "分类标签集" 的学习. 现在开始,将进入到非监督学习领域.从经 ...

  2. [聚类算法] K-means 算法

    聚类 和 k-means简单概括. 聚类是一种 无监督学习 问题,它的目标就是基于 相似度 将相似的子集聚合在一起. k-means算法是聚类分析中使用最广泛的算法之一.它把n个对象根据它们的属性分为 ...

  3. Spark:聚类算法

    Spark:聚类算法 Kmeans聚类 KMeans算法的基本思想是初始随机给定K个簇中心,按照最邻近原则把待分类样本点分到各个簇.然后按平均法重新计算各个簇的质心,从而确定新的簇心.一直迭代,直到簇 ...

  4. 第十三篇:K-Means 聚类算法原理分析与代码实现

    前言 在前面的文章中,涉及到的机器学习算法均为监督学习算法. 所谓监督学习,就是有训练过程的学习.再确切点,就是有 "分类标签集" 的学习. 现在开始,将进入到非监督学习领域.从经 ...

  5. 浅谈K-means聚类算法

    K-means算法的起源 1967年,James MacQueen在他的论文<用于多变量观测分类和分析的一些方法>中首次提出 “K-means”这一术语.1957年,贝尔实验室也将标准算法 ...

  6. 挑子学习笔记:两步聚类算法(TwoStep Cluster Algorithm)——改进的BIRCH算法

    转载请标明出处:http://www.cnblogs.com/tiaozistudy/p/twostep_cluster_algorithm.html 两步聚类算法是在SPSS Modeler中使用的 ...

  7. 机器学习六--K-means聚类算法

    机器学习六--K-means聚类算法 想想常见的分类算法有决策树.Logistic回归.SVM.贝叶斯等.分类作为一种监督学习方法,要求必须事先明确知道各个类别的信息,并且断言所有待分类项都有一个类别 ...

  8. 【聚类算法】谱聚类&lpar;Spectral Clustering&rpar;

    目录: 1.问题描述 2.问题转化 3.划分准则 4.总结 1.问题描述 谱聚类(Spectral Clustering, SC)是一种基于图论的聚类方法——将带权无向图划分为两个或两个以上的最优子图 ...

  9. k-means均值聚类算法(转)

    4.1.摘要 在前面的文章中,介绍了三种常见的分类算法.分类作为一种监督学习方法,要求必须事先明确知道各个类别的信息,并且断言所有待分类项都有一个类别与之对应.但是很多时候上述条件得不到满足,尤其是在 ...

随机推荐

  1. 3&period;Windows Server 2012 R2数据库部署

    很多人竟然不会安装数据库....好吧,来个图文教程,其实和windows里面一样安装,和安装2008一样的 先安装3.5:http://www.cnblogs.com/dunitian/p/53487 ...

  2. XidianOJ 1041&colon; Franky的游戏O

    题目描述 Franky是super的人造人,来到了n*m的棋盘世界玩冒险游戏. n×m的棋盘由n行每行m个方格组成,左上角的方格坐标是(0,0),右下角的方格坐标是(n-1,m-1). 每次游戏时,他 ...

  3. 16&period; Copy List with Random Pointer

    类同:剑指 Offer 题目汇总索引第26题 Copy List with Random Pointer A linked list is given such that each node cont ...

  4. Python MySQL ORM QuickORM hacking

    # coding: utf-8 # # Python MySQL ORM QuickORM hacking # 说明: # 以前仅仅是知道有ORM的存在,但是对ORM这个东西内部工作原理不是很清楚, ...

  5. 【CCS仿真】用matlab把CCS保存的32位16进制的数据转换为十进制的数

    2013-12-04 16:37:28 使用fscanf函数即可完成. 例如,CCS保存的.dat文件Copy_of_forward_i_f.dat如下: 1651 1 81008800 0 4000 ...

  6. VC&plus;&plus; 获取windows系统的版本类型

    vc中获取windows版本信息,一般是调用GetVersionEx 这个API函数来获取的,这个API需要OSVERSIONINFOEX 这个结构体作为参数,OSVERSIONINFOEX 的对应的 ...

  7. HTC Vive 叠影器无法创建设备

    今天使用笔记本电脑打开SteamVR发生错误:SteamVR启动失败,"Shared IPC Compositor Connected Fail(306)",然后启动失败,在UI界 ...

  8. Python 实现红绿灯

    一.通过Event来实现两个或多个线程间的交互,下面是一个红绿灯的例子,即起动一个线程做交通指挥信号灯,一个线程做车辆,车辆行驶按红灯停,绿灯行的规则. #!/usr/bin/python # -*- ...

  9. 洛谷P3167 通配符匹配 &lbrack;CQOI2014&rsqb; 字符串

    正解:哈希+dp/AC自动机/kmp 解题报告: 传送门! 这题解法挺多的,所以就分别港下好了QwQ 首先港下hash+dp趴 可以考虑设dp式f[i][j]:匹配到第i个通配符了,下面那个字符串匹配 ...

  10. Django 2&period;0&period;1 官方文档翻译&colon; 编写你的第一个 Django app,第四部分(Page 9)

    编写你的第一个 Django app,第四部分(Page 9)转载请注明链接地址 该教程上接前面的第三部分.我们会继续开发 web-poll 应用,并专注于简单的表单处理和简化代码. 写一个简单的表单 ...