MATLAB K-means聚类代码讲解

一、概述

K-means聚类采用类内距离和最小的方式对数据分类,MATLAB中自带K-means算法,最简单的调用如下:

idx=kmeans(x,k)

n-by-p数据矩阵x中的数据划分为k个类簇。x的行对应数据条数,x的列对应数据的维度。注意:当x是向量时,kmeans将其视为n乘1数据矩阵,而不管其方向如何。kmeans返回一个n乘1向量idx,其中包含每个点的簇索引。默认情况下,kmeans使用平方欧氏距离。

二、K-means参数

典型的带参数的K-means调用如下:

[ ... ] = kmeans(..., 'PARAM1',val1, 'PARAM2',val2, ...)

由param和val构成参数键值对进行控制,常用的参数有:

1 'Distance' - 距离度量, 在P维空间中,K-means应该最小化的距离度量

  • '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”初始化
  • matrix   - 用一个K行P列的矩阵作为初始聚类中心

3 'Replicates' - 重复聚类的次数,每个聚类都有一组新的初始质心,默认为1。

4 'EmptyAction'- 在聚类过程中一个类别丢失了它所有的成员时,需要采用的措施

  •  'singleton' - 创建一个新类簇,该簇由距离其质心最远的一个观测组成(默认值)
  • 'error'     - 空类别作为错误处理.
  • 'drop'      - 删除所有变为空的类簇,并将C和D中的相应值设置为NaN.

5  'Options' - 用于最小化拟合准则的迭代算法的选项, 用statset构建,statset传入的参数包括:

  • 'Display'  - 显示输出的层级。可选 'off', 'iter', 'final'. 其中默认是选择'off'
  • 'MaxIter'  - 最大的迭代次数. 默认100次.
  • 'UseParallel'  - 选择为‘true’或者‘default’,进行并行计算。前提是需要打开并行计算工具箱的parpool,否则设置为默认值‘default’,表示串行计算。
  •  'UseSubstreams'  - 设置为true以可重复的方式并行计算。默认值为false。要重复计算,设置为允许子流的类型:“mlfg6331_64”或“mrg32k3A”.
  •  'Streams'  - 如果“useParallel”为true,“useSubstreams”为false,则“streams”的长度必须等于KMeans使用的工作线程数。如果并行池已打开,则此将是并行池的大小. 

三、带参调用示例

一个例子来描述Kmeans如何带参调用。例如以下代码:

最大迭代100000次,采用1-相关性系数作为距离,对数据进行聚类分析。

K=6;
opts = statset('Display','final','MaxIter',100000);
[Idx,C,sumD,D1]=kmeans(dataStandardlized,K,'dist','correlation','Options',opts);
  • dataStandardlized :N*P的输入数据矩阵
  • K: 表示将dataStandardlized划分为几类,为整数
  • Idx :N*1的向量,存储的是每个点的聚类标号
  • C: K*P的矩阵,存储的是K个聚类质心位置
  • sumD: 1*K的和向量,存储的是类间所有点与该类质心点距离之和
  • D1: N*K的矩阵,存储的是每个点与所有质心的距离

其他:

  • 官方资料:https://ww2.mathworks.cn/help/stats/kmeans.html

------分享知识,让人愉悦,原创博文,支持请点赞。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/405376.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

树型控件使用

树型控件的使用: 1、设置树型控件的风格。 DWORD dwStyle GetWindowLong(m_TreeCtrl.m_hWnd, GWL_STYLE); dwStyle | TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT; SetWindowLong(m_TreeCtrl.m_hWnd, GWL_STYLE, dwStyle); TVS_HASBUTTONS、TVS_HASLINES等风格有很多…

带界面的OCX制作实例

制作一个有界面的OCX,并进行测试。代码下载 一、制作一个有界面的OCX: 设置该对话框的属性(关键噢): 给添加的对话框资源关联一个类CDlgTest,基类是:CDialog,如下: 给CO…

[react] componentWillUpdate可以直接修改state的值吗

[react] componentWillUpdate可以直接修改state的值吗 1: 不行,这样会导致无限循环报错。 2:在react中直接修改state,render函数不会重新执行渲染,应使用setState方法进行修改 个人简介 我是歌谣,欢迎和大家一起交流…

mysql 分组后取每个组内最新的一条数据

首先,将按条件查询并排序的结果查询出来。 1 mysql> select accepttime,user,job from tuser_job where user 8 order by accepttime desc;2 --------------------------------3 | accepttime | user | job |4 --------------------------------5 | 20…

Qt C++ 命名空间namespaces讲解

一、概述 命名空间 namespace 将一组去哪聚范围内有效的类、对象或者函数组织到一个命名的名字下边,将全局范围分割成多个子域,每个子域就叫做命名空间。作用是在大工程中避免多个类和文件出现相同的成员名称。 命名空间使用的格式为: nam…

从淘宝数据结构来看电子商务中商品属性设计

淘宝名词解释 产品 和 商品的区别: 淘宝标准化产品,由类目关键属性唯一确定。如:手机类目,关键属性是品牌和型号,Nokia N95就是一个产品,nokia是品牌,N95是型号。产品除了关键属性还包括一般信息、销售属性和非关键属性…

linux串口驱动分析

linux串口驱动分析硬件资源及描述 s3c2440A 通用异步接收器和发送器(UART)提供了三个独立的异步串行 I/O(SIO)端口,每个端口都可以在中断模式或 DMA 模式下操作。UART 使用系统时钟可以支持最高 115.2Kbps 的波特率。每…

用C++实现网络编程---抓取网络数据包的实现方法

From: http://blog.csdn.net/zjl_1026_2001/article/details/2191311 做过网管或协议分析的人一般都熟悉sniffer这个工具,它可以捕捉流经本地网卡的所有数据包。抓取网络数据包进行分析有很多用处,如分析网络是否有网络病毒等异常数据,通信协…

二分图----最大匹配,最小点覆盖,最大点独立集

一.二分图 二分图又称作二部图,是图论中的一种特殊模型。 设G(V,E)是一个无向图,如果顶点V可分割为两个互不相交的子集(A,B),并且图中的每条边(i,j)所关联的两个顶点i和j分别属于这两个不同的顶点集(i in A…

[react] 怎么使用Context开发组件?

[react] 怎么使用Context开发组件? import React, {Component} from react// 首先创建一个 context 对象这里命名为:ThemeContext const ThemeContext React.createContext(light)// 创建一个祖先组件组件 内部使用Provier 这个对象创建一个组件 其中…

Linux 进程通信 -- 信号

一、概述 信号用于保持进程间的通信,可以备发送到一个进程或者一组进程,发送给进程的这个唯一信息通常是标志信号的一个数。信号可从键盘终端产生、虚拟内存中非法访问系统资源等情况下产生。信号异步发生,收到信号的进程可以采取某种动作或…

简单理解Socket

TCP/IP 要想理解socket首先得熟悉一下TCP/IP协议族, TCP/IP(Transmission Control Protocol/Internet Protocol)即传输控制协议/网间协议,定义了主机如何连入因特网及数据如何再它们之间传输的标准&…

女人必知:10个好习惯 让老公不想出轨

阅读提示:要知道,妻子这10个动作是征求了数百名老公的意见之后进行总结得出的,不仅效果显著,杀伤力强,最关键的是简单易行。女人必知:10个好习惯 让老公不想出轨  1.老公累了,靠在沙发上睡了&…

codeforce Gym 100500F Door Lock (二分)

根据题意略推一下&#xff0c;其实就是问你满足(a*(a1))/2 < m < ((a1)*a(a2))/2的a和m-(a*(a1))/2 -1是多少。 二分求解就行了 #include<cstdio>using namespace std; typedef long long ll;int main() {int T;scanf("%d",&T);for(int k 1; k <…

write() vs. writev()

From: http://www.cppblog.com/whoami17/archive/2009/05/10/82452.html 今天突然想比较一下 write() 和 writev() 的性能&#xff0c; 网上google了半天&#xff0c; 竟然没有发现一点有关的数据信息&#xff0c; 自己就测试了一下。 平台如下&#xff1a; CentOS 5.2 Lin…

[react] React Intl是什么原理?

[react] React Intl是什么原理&#xff1f; 实现原理和react-redux的实现原理类似&#xff0c;最外层包一个Provider&#xff0c;利用getChildContext&#xff0c;将intlConfigPropTypes存起来&#xff0c;在FormattedMessage、FormattedNumber等组件或者调用injectIntl生成的…

linux下GPRS模块ppp拨号上网

&#xfeff;&#xfeff;交叉编译器&#xff1a;arm-linux-gcc-4.5.4 Linux内核版本&#xff1a;Linux-3.0 主机操作系统&#xff1a;Centos 6.5 开发板&#xff1a;FL2440 GPRS:SIM900A 在开发SIM900模块之前&#xff0c;开发板已经加载了linux内核以及文件系统&#xf…

Linux 使用sigaction查询或设置信号处理方式

一、概述 Linux的系统调用函数sigaction()可以用来查询或设置信号处理方式。 函数声明为&#xff1a; #include <signal.h>int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact); 如果执行成功返回0&#xff0c;否则返回-1。其中&…

mysql replicate error

工作日志之-MySQL slave Replication ErrorDescription&#xff1a; mysql> start slave;ERROR 1201 (HY000): Could not initialize master info structure; more error messages can be found in the MySQL error log [rootslave ~]# tail /var/log/mysqld.log 090105 11:…

高级I/O(七)--readv和writev函数

From: http://blog.chinaunix.net/uid-26822401-id-3158225.html readv和write函数让我们在单个函数调用里从多个不连续的缓冲里读入或写出。这些操作被称为分散读&#xff08;scatter read&#xff09;和集合写&#xff08;gather write&#xff09;。 #include <sys/uio…