K-means算法

K-means算法

输入input:data X

输出output:data(X,S)

解释:输入没有标签的数据data X,经过训练,给每一个数据添上一个标签S{s1,s2,...,sk},对应的聚类中心为U{u1,u2,...,uk}。

效果:将输入数据分为k类,并得到其相应类别的中心点。

========================================================================================

step 1 初始化聚类中心(u1,u2,...,uk)

--- 采用随机从train data中选取k个样本点作为初始的聚类中心(u1,u2,...,uk);

-----------------------------------------------------------------------------------------------------------------------------------------------------------

step 2 进行最近邻归类更新聚类中心的动作

--- 根据聚类中心,遍历所有样本点,以最近邻原则(样本点距离哪一个聚类中心近就归为哪一类),计算样本点 与所有聚类中心点的距离,选择最小距离的聚类中心,并归属为那一个类别;

--- 聚类完毕后,再次计算聚类中心,计算同一类中所有样本点的平均值作为新的聚类中心;

-----------------------------------------------------------------------------------------------------------------------------------------------------------

step 3 重复step 2 直到收敛为止即聚类不再发生变化为止。

-----------------------------------------------------------------------------------------------------------------------------------------------------------

收敛的条件是:S和U不再发生变化。

K-means理论推导过程

一个约定:如果x1≈x2的时候,我们可以很简单的利用 u ≈ x1 ≈ x2这样一个简单的标准进行聚类。

利用这个约定我们对数据集X{xn}进行聚类可以得到{S1,S2,...,Sk},同时对应的选择U{u1,u2,...,uk}。

这样我们可以利用平方误差形式的聚类误差提出一个最优化问题,其定义和推导过程如下图所示:

具体的推导思想就是先固定聚类中心,优化数据分类,方法就是最近邻思想;然后固定分类,优化聚类中心通过求解梯度最小的方式得到了聚类中心的最优解就是类别的平均值(mean);最优化问题的解决往往不是一步解析的,大多数时候是通过逐步迭代递推得到的,这类方法最终都要给出一个迭代终止或者递归终止的条件。而K-means的方法就是迭代终止条件就是聚类不再发生改变就对应了算法的收敛。

K-means实验结果

结果分析与说明:可以看到,k-means算法是一种非常有效的聚类算法,通常使用中需要注意的就是随机初始化聚类中的位置和设定的分类数K,从实验结果中可以看出k-means算法对这些初始化条件是比较敏感的。

*************************************************************************************************************************************

从上面的分析中可以总结,K-means算法是一种比较简单而且有效地聚类算法,在实际应用中是一种比较流行和常用的,其具体的代码实现也应当是简单朴素的。直观的从算法的名称中就能理解算法的核心。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-23 07:42:41

K-means算法的相关文章

K-means算法

K-means算法很简单,它属于无监督学习算法中的聚类算法中的一种方法吧,利用欧式距离进行聚合啦. 解决的问题如图所示哈:有一堆没有标签的训练样本,并且它们可以潜在地分为K类,我们怎么把它们划分呢?     那我们就用K-means算法进行划分吧. 算法很简单,这么做就可以啦: 第一步:随机初始化每种类别的中心点,u1,u2,u3,--,uk; 第二步:重复以下过程: 然后 ,就没有然后了,就这样子. 太简单, 不解释.

DM里的K均值算法

1.Preface 因为一直在做的是聚类算法的研究,算是总结了一些心得,这里总结些知识性与思路性的东西,我想在其他地方也是很容易的找到类似的内容的.毕竟,世界就是那么小. 声明:本文比较不适合没有DM基础的人来阅读.我只是胡乱的涂鸦而已 2.聚类算法 在DM里的聚类算法里,有基于划分的算法,基于层次的算法,基于密度的算法,基于网格的算法,基于约束的算法. 其中每一种基于的算法都会衍生出一至几种算法,对应的每一种算法不管在学术界还是工业界都存在着许多的改进的算法 这里想介绍的是基于基于划分的算法里

k均值算法

import matplotlib.pyplot as plt import numpy as np import time from django.template.defaultfilters import center def loadDataSet(fileName): dataMat=[] fr=open(fileName) for line in fr.readlines(): curLine=line.strip().split('\t') fltLine=map(float,cu

『cs231n』作业1问题1选讲_通过代码理解K近邻算法&交叉验证选择超参数参数

通过K近邻算法探究numpy向量运算提速 茴香豆的"茴"字有... ... 使用三种计算图片距离的方式实现K近邻算法: 1.最为基础的双循环 2.利用numpy的broadca机制实现单循环 3.利用broadcast和矩阵的数学性质实现无循环 图片被拉伸为一维数组 X_train:(train_num, 一维数组) X:(test_num, 一维数组) 方法验证 import numpy as np a = np.array([[1,1,1],[2,2,2],[3,3,3]]) b

K 近邻算法

声明: 1,本篇为个人对<2012.李航.统计学习方法.pdf>的学习总结,不得用作商用,欢迎转载,但请注明出处(即:本帖地址). 2,因为本人在学习初始时有非常多数学知识都已忘记,所以为了弄懂当中的内容查阅了非常多资料.所以里面应该会有引用其它帖子的小部分内容,假设原作者看到能够私信我,我会将您的帖子的地址付到以下. 3.假设有内容错误或不准确欢迎大家指正. 4.假设能帮到你.那真是太好了. 描写叙述 给定一个训练数据集,对新的输入实例.在训练数据集中找到与该实例最邻近的K个实例,若这K个实

从K近邻算法、距离度量谈到KD树、SIFT+BBF算法

从K近邻算法.距离度量谈到KD树.SIFT+BBF算法 从K近邻算法.距离度量谈到KD树.SIFT+BBF算法 前言 前两日,在微博上说:“到今天为止,我至少亏欠了3篇文章待写:1.KD树:2.神经网络:3.编程艺术第28章.你看到,blog内的文章与你于别处所见的任何都不同.于是,等啊等,等一台电脑,只好等待..”.得益于田,借了我一台电脑(借他电脑的时候,我连表示感谢,他说“能找到工作全靠你的博客,这点儿小忙还说,不地道”,有的时候,稍许感受到受人信任也是一种压力,愿我不辜负大家对我的信任)

聚类算法:K-means 算法(k均值算法)

k-means算法:      第一步:选$K$个初始聚类中心,$z_1(1),z_2(1),\cdots,z_k(1)$,其中括号内的序号为寻找聚类中心的迭代运算的次序号. 聚类中心的向量值可任意设定,例如可选开始的$K$个模式样本的向量值作为初始聚类中心.      第二步:逐个将需分类的模式样本$\{x\}$按最小距离准则分配给$K$个聚类中心中的某一个$z_j(1)$.假设$i=j$时, \[D_j (k) = \min \{ \left\| {x - z_i (k)} \right\|

二分-k均值算法

首先我们都知道k均值算法有一个炒鸡大的bug,就是在很多情况下他只会收敛到局部最小值而不是全局最小值,为了解决这个问题,很多学者提出了很多的方法,我们在这里介绍一种叫做2分k均值的方法. 该算法首先将所有点作为一个簇,然后将该簇一分为二.之后选择其中一个簇继续进行划分,选择哪一个簇进行划分取决于哪个簇的sse是最大值.上述基于sse的划分过程不断重复,直到得到用户指定的簇数目为止. 将所有的点看成一个簇,当粗的数目小于k时,对每一个簇计算总误差,在给定的粗上进行k均值聚类(k=2),计算将该粗一

K近邻算法

1.1.什么是K近邻算法 何谓K近邻算法,即K-Nearest Neighbor algorithm,简称KNN算法,单从名字来猜想,可以简单粗暴的认为是:K个最近的邻居,当K=1时,算法便成了最近邻算法,即寻找最近的那个邻居.为何要找邻居?打个比方来说,假设你来到一个陌生的村庄,现在你要找到与你有着相似特征的人群融入他们,所谓入伙. 用官方的话来说,所谓K近邻算法,即是给定一个训练数据集,对新的输入实例,在训练数据集中找到与该实例最邻近的K个实例(也就是上面所说的K个邻居),这K个实例的多数属

K均值算法-python实现

测试数据展示: #coding:utf-8__author__ = 'similarface''''实现K均值算法 算法摘要:-----------------------------输入:所有数据点A,聚类个数k输出:k个聚类的中心点 随机选取k个初始的中心点repeat: 计算每个点和中心点的距离,将点分配给最近的中心簇中 计算Ck,更新簇的中心点until 中心点稳定 -----------------------------'''import sysimport randomimport