c均值聚类matlab程序_机器学习笔记-9-聚类

1 K-means算法

K-means是最普及的聚类算法,算法接受一个未标记的数据集,然后将数据聚类成不同的组。
它是一个迭代算法,假设我们想要将数据聚类成 n 个组,其方法为:

  1. 选择K个随机的点,称为聚类中心
  2. 对于数据集中的每一个数据,按照距离K个中心点的距离,将其与距离最近的中心点关联起来,与同一个中心点关联的所有点聚成一类
  3. 计算每一类的平均值,将该类所关联的中心点移动到平均值的位置
  4. 重复步骤2-3,直至中心点不再变化

伪代码表示为:

Repeat { 
for i = 1 to m 
c(i) := 当前样本x(i)与k个聚类中心中距离最近的索引 index (form 1 to K) of cluster centroid closest to x(i) 
for k = 1 to K 
μk := k聚类中样本的均值,即聚类中心 average (mean) of points assigned to cluster k
}

1.1 优化目标

用μ^1,μ^2,...,μ^k 来表示聚类中心,用c^(1),c^(2),...,c^(m)来存储与第i个实例数据最近的聚类中心的索引,μ_(c^(i))表示当前样本x^(i)所处的簇中心,其代价函数与优化目标如下图所示

abd022701970f896b08b8fb19abaed3c.png
代价函数(失真代价函数)

2f70beaeec1a5f427138625d0913d8ef.png
优化目标

由上图可知,K-means算法的优化目标即是找出使得代价函数最小的c^(i)和μ^(i)

1.2 随机初始化

在运行 K-均值算法之前,首先要随机初始化所有的聚类中心点
1. 选择K<m,即聚类中心点的个数要小于所有训练集实例的数量
2. 随机选择K个训练实例(x^(i)),然后令K个聚类中心分别与这K个训练示例相等

K-means的一个问题为,他有可能会停留在一个局部最小值处,解决这个问题的方法如下:

多次运行 K-均值算法,每一次都重新进行随机初始化,最后再比较多次运行 K-means的结果,选择代价函数最小的结果。

这种方法在 较小的时候(2-10)还是可行的,但是如果 较大,这么做也可能不会有明显地改善。

1.3 选择聚类数

一个是肘部法则,不断改变K值,计算每一个K的代价,如下图左所示,如若出现了一个类似于肘关节的拐点的话,那么就采用该K值,但如果像下图右所示,是较为光滑的曲线的话,就不能用肘部法则去选择K值。

bc13b0d62969eed14039fd7fc271138d.png

大多数情况下聚类个数都是根据各训练示例可视化之后手动选择的

2 实现方法

2.1 将各样本点分簇

def find_closest_centroids(X, centroids):m = X.shape[0]k = centroids.shape[0]idx = np.zeros(m)              # idx[i]为距离样本i最近的集聚中心的索引for i in range(m):min_dist = 1000000         #每计算完一个样本点后需要将最短距重新初始化  for j in range(k):dist = np.sum((X[i,:] - centroids[j,:]) ** 2)  #代价函数if dist < min_dist:min_dist = distidx[i] = jreturn idx

2.2 计算各簇的所有样本的平均值

def compute_centroids(X, idx, k):           #k为聚类中心个数m, n = X.shape                          centroids = np.zeros((k, n))            #聚类中心为(k,n)for i in range(k):indices = np.where(idx == i)        #为i簇的各样本点的索引centroids[i,:] = (np.sum(X[indices,:], axis=1) / len(indices[0])).ravel()  #len(indices[0])为样本点的数量,axis=1为按列相加    return centroid

2.3 随机初始化

def init_centroids(X, k):m, n = X.shapecentroids = np.zeros((k, n))idx = np.random.randint(0, m, k)for i in range(k):centroids[i,:] = X[idx[i],:]  #随机选择训练示例作为聚类中心return centroids

2.4 聚类算法实现

def run_k_means(X, initial_centroids, max_iters):m, n = X.shapek = initial_centroids.shape[0]idx = np.zeros(m)centroids = initial_centroidsfor i in range(max_iters):idx = find_closest_centroids(X, centroids)centroids = compute_centroids(X, idx, k)return idx, centroids# 使用sklearn实现
from sklearn.cluster import KMeans      #导入kmeans库model = KMeans(n_clusters=16, n_init=100, n_jobs=-1)   
model.fit(data)                         #用数据拟合分类器模型
centroids = model.cluster_centers_
C = model.predict(data)                 #输出输入数据的预测结果

笔记参考资料:fengdu78/Coursera-ML-AndrewNg-Notes: 吴恩达老师的机器学习课程个人笔记

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

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

相关文章

php井字游戏代码_PHP初级笔试题:Tic-Tac-Toe(n阶井字棋)判断胜负

//Tic-Tac-Toe$n 5;//五阶棋盘$res array();function check($arr){$n $GLOBALS[n];$res $GLOBALS[res];//已经下过这一步&#xff0c;返回false&#xff1b;没有&#xff0c;赋值if (isset($res[$arr[1]][$arr[2]])) {return false;} else {$res[$arr[1]][$arr[2]] $arr[0…

js与html编码不同,js与html中unicode编码的使用

【转】javascript和html中unicode编码和字符转义的详解不是十分理解unicode和html转义的情况下,可能会误用,所以下面会对它们再做比较容易理解的解释: 1.html中的转义:在html中如果遇到转义字符(如“ ”),不管你的页面字符编码是utf-8 ...javascript和html中unicode编码和字符转…

g标签 怎么设置svg_SVG g元素

SVG 元素SVG 元素用于将SVG形状分组在一起。分组后&#xff0c;您可以像变形单个形状一样变换整个形状。与 不能单独成为转换目标的嵌套 元素相比&#xff0c;这是一个优势。您还可以设置分组元素的样式&#xff0c;并像对待单个元素一样重复使用它们。元素g是用来组合对象的容…

html和css哪个优先,CSS3 | 样式和优先级

css3一般介绍&#xff1a;CSS注释&#xff1a;/*CSS*/CSS长度单位&#xff1a;1.px(像素)2.em(倍数&#xff0c;一般用于文字)一、HTML嵌套CSS3样式&#xff1a;1.外部(推荐)例如HTML文件为index.html将样式放入另一文件中&#xff0c;index.css以上两个文件放入同一文件夹下2.…

java上传视频到七牛云_Java进阶学习:将文件上传到七牛云中

Java进阶学习&#xff1a;将文件上传到七牛云中通过本文&#xff0c;我们将讲述如何利用七牛云官方SDK&#xff0c;将我们的本地文件传输到其存储空间中去。JavaSDK&#xff1a;https://developer.qiniu.com/kodo/sdk/1239/java#server-upload官方SDK&#xff1a;https://devel…

计算机网络讨论4,计算机网络实验四

实验四IEEE 802.3协议分析和以太网一、实验目的1、分析802.3协议2、熟悉以太网帧的格式二、实验环境与因特网连接的计算机网络系统&#xff1b;主机操作系统为windows&#xff1b;Ethereal、IE 等软件。三、实验步骤(注&#xff1a;本次实验先完成前面的“1 俘获并分析以太网帧…

rust新版组队指令_Rust最新控制台命令2017

物品名称物品代码电池battery.small骨头碎片bone.fragments空的豆罐头can.beans.empty空的金枪鱼罐头can.tuna.empty摄像头cctv.camera木炭charcoal煤coal石油crude.oil炸药explosives动物脂肪fat.animal火药gunpowder高级金属矿hq.metal.ore金属碎片metal.fragments金属矿meta…

python实现mini-batch_Mini-Batch 、Momentum、Adam算法的实现

def random_mini_batches(X,Y,mini_batch_size64,seed0):"""从(X&#xff0c;Y)中创建一个随机的mini-batch列表参数&#xff1a;X - 输入数据&#xff0c;维度为(输入节点数量&#xff0c;样本的数量)Y - 对应的是X的标签&#xff0c;【1 | 0】(蓝|红)&#xf…

html5+shim脚本,HTML5探秘:用requestAnimationFrame优化Web动画

requestAnimationFrame是什么&#xff1f;在浏览器动画程序中&#xff0c;我们通常使用一个定时器来循环每隔几毫秒移动目标物体一次&#xff0c;来让它动起来。如今有一个好消息&#xff0c;浏览器开发商们决定&#xff1a;“嗨&#xff0c;为什么我们不在浏览器里提供这样一个…

计算机科学与技术的专业论述,关于计算机科学专业的论文题目 计算机科学专业论文题目怎样定...

【100道】关于关于计算机科学专业的论文题目汇总,作为大学生的毕业生应该明白了计算机科学专业论文题目怎样定,选一个好的题目后续的计算机科学专业论文写作起来会更轻松&#xff01;一、比较好写的计算机科学专业论文题目:1、计算机科学与技术专业应用型人才培养改革调研分析—…

ming window 交叉编译_opencv3编译pc端及交叉编译arm端

环境&#xff1a; opensuse opencv3.4.1 交叉编译器arm-openwrt-linux 作者&#xff1a;帅得不敢出门https://github.com/opencv/opencv/tree/3.4.1选择右边的"clone or download"按钮进行下载&#xff0c;选择下载zip我下的是opencv-3.4.1.zip, 3.4.1的版本号…

锁定计算机 背景图片,win7系统电脑更换锁屏壁纸的方法

当win7系统电脑在一段时间不动的话就进入锁屏状态&#xff0c;然而很多用户觉得默认的锁屏壁纸不好看&#xff0c;就想要更换自己喜欢的锁屏壁纸&#xff0c;那么win7怎么更换锁屏壁纸呢&#xff1f;下面给大家讲解一下win7系统电脑更换锁屏壁纸的方法。1、同时按下窗口键winR组…

两阶段最小二乘法原理_R语言代写工具变量与两阶段最小二乘法

我们要估计的模型是yabxcdeyabxcde&#xff0c;其中是解释变量&#xff0c;&#xff0c;和是我们想要估计的系数。是控制变量&#xff0c;是治疗变量。我们特别关注我们的治疗效果对。生成数据首先&#xff0c;让我们生成数据。假设 的工具变量和之间的相关矩阵如下&#xff1a…

计算机二级循环队列知识点,考点!计算机二级考试公共基础知识冲刺复习笔记:栈、队列和循环队列...

小编所收集到的相关计算机二级考试公共基础知识冲刺复习笔记&#xff1a;栈、队列和循环队列的资料 大家要认真阅读哦&#xff01;1、栈(Stack)又称堆栈。(1)栈是一种运算受限的线性表&#xff0c;其限制是仅允许在表的一端进行插入和删除运算。人们把此端称为栈顶&#xff0c;…

lua 字符串包含_Programming in Lualua学习第11期 Lua模块与包

微信公众号&#xff1a;GameToolDev关注可了解更多的游戏工具开发教程。问题或建议&#xff0c;请公众号留言;从Lua 5.1开始&#xff0c;我们可以使用require和module函数来获取和创建Lua中的模块。从使用者的角度来看&#xff0c;一个模块就是一个程序库&#xff0c;可以通过r…

学计算机优盘多少内存够用,u盘建议买多大内存的

大家好&#xff0c;我是时间财富网智能客服时间君&#xff0c;上述问题将由我为大家进行解答。u盘建议买多大内存主要看用途&#xff0c;一般容量为&#xff1a;1G、2G、4G、8G、16G、32G、64G、128G、256G、512G、1T&#xff0c;具体来说&#xff1a;1、如果是用来存放视频的&…

.net 从txt中读取行数据_【VBA项目】从指定文件中读取数据并绘制图表

VBA 是一种很久远的编程语言&#xff0c;但并不过时。在满足以下两个条件时&#xff0c;借助 VBA 可以极大的提升生产率&#xff0c;降低出错率&#xff1a;你的电脑上不允许自主安装软件&#xff1b; 你需要执行的工作中大部分的步骤都是固定且重复的。项目背景近期接到一个工…

本地摄像头应用到远程计算机,远程摄像头设置

可以的&#xff0c;智能家用监控摄像头&#xff0c;只要你手机有网&#xff0c;千里之外打开手机都可以查看视频&#xff0c;而且智能摄像头主要用于看家看孩子看老人照看猫猫狗狗等宠物的。智能摄像头&#xff0c;与市面上普通的事件录制不一样&#xff0c;它可以实现7*24小时…

axure实现复选框全选_jq简单的全选、反选和全不选效果

jquery是很实用和方便的前端效果库&#xff0c;可以让我减少很多的操作和节省很多的时间。今天&#xff0c;我们来说一下jq的全选、全不选和反选效果&#xff0c;本篇讲的是最简单简洁的jq全选、全不选和反选的例子。如果还有什么其他的功能要求可自己根据所学到的基础来扩展一…

计算机设备管理器驱动,设备管理器安装驱动程序的详细教程

系统出现问题&#xff0c;很多人都会选择重装系统。但系统重装后&#xff0c;我们所做的第一件事&#xff0c;就是安装驱动。有的驱动程序有安装包&#xff0c;直接安装就行了。但是有的驱动是只有驱动程序文件&#xff0c;而没有执行程序&#xff0c;这时候就需要通过设备管理…