Kmeans、Kmeans++和KNN算法比較

K-Means介绍

K-means算法是聚类分析中使用最广泛的算法之中的一个。它把n个对象依据他们的属性分为k个聚类以便使得所获得的聚类满足:同一聚类中的对象相似度较高;而不同聚类中的对象相似度较小。其聚类过程能够用下图表示:

如图所看到的。数据样本用圆点表示,每一个簇的中心点用叉叉表示。(a)刚開始时是原始数据。杂乱无章,没有label,看起来都一样。都是绿色的。

(b)如果数据集能够分为两类。令K=2。随机在坐标上选两个点,作为两个类的中心点。(c-f)演示了聚类的两种迭代。先划分,把每一个数据样本划分到近期的中心点那一簇;划分完后,更新每一个簇的中心。即把该簇的全部数据点的坐标加起来去平均值。这样不断进行”划分—更新—划分—更新”,直到每一个簇的中心不在移动为止。

该算法过程比較简单,但有些东西我们还是须要关注一下。此处。我想说一下"求点中心的算法"

一般来说。求点群中心点的算法你能够非常简的使用各个点的X/Y坐标的平均值。也能够用另三个求中心点的的公式:

1)Minkowski Distance 公式 —— λ 能够任意取值。能够是负数,也能够是正数,或是无穷大。

2)Euclidean Distance 公式 —— 也就是第一个公式 λ=2 的情况

3)CityBlock Distance 公式 —— 也就是第一个公式 λ=1 的情况

这三个公式的求中心点有一些不一样的地方,我们看下图(对于第一个 λ 在 0-1之间)。

(1)Minkowski Distance (2)Euclidean Distance (3)CityBlock Distance

上面这几个图的大意是他们是怎么个逼近中心的,第一个图以星形的方式。第二个图以同心圆的方式,第三个图以菱形的方式。

Kmeans算法的缺陷

  • 聚类中心的个数K 须要事先给定,但在实际中这个 K 值的选定是非常难以预计的,非常多时候。事先并不知道给定的数据集应该分成多少个类别才最合适
  • Kmeans须要人为地确定初始聚类中心。不同的初始聚类中心可能导致全然不同的聚类结果。

    (能够使用Kmeans++算法来解决)

针对上述第2个缺陷,能够使用Kmeans++算法来解决

K-Means ++ 算法

k-means++算法选择初始seeds的基本思想就是:初始的聚类中心之间的相互距离要尽可能的远。

  1. 从输入的数据点集合中随机选择一个点作为第一个聚类中心
  2. 对于数据集中的每个点x。计算它与近期聚类中心(指已选择的聚类中心)的距离D(x)
  3. 选择一个新的数据点作为新的聚类中心,选择的原则是:D(x)较大的点,被选取作为聚类中心的概率较大
  4. 反复2和3直到k个聚类中心被选出来
  5. 利用这k个初始的聚类中心来执行标准的k-means算法

从上面的算法描写叙述上能够看到。算法的关键是第3步,怎样将D(x)反映到点被选择的概率上,一种算法例如以下:

  1. 先从我们的数据库随机挑个随机点当“种子点”
  2. 对于每一个点。我们都计算其和近期的一个“种子点”的距离D(x)并保存在一个数组里。然后把这些距离加起来得到Sum(D(x))。
  3. 然后。再取一个随机值。用权重的方式来取计算下一个“种子点”。

    这个算法的实现是。先取一个能落在Sum(D(x))中的随机值Random。然后用Random -= D(x),直到其<=0。此时的点就是下一个“种子点”。

  4. 反复2和3直到k个聚类中心被选出来
  5. 利用这k个初始的聚类中心来执行标准的k-means算法

能够看到算法的第三步选取新中心的方法,这样就能保证距离D(x)较大的点,会被选出来作为聚类中心了。

至于为什么原因比較简单,例如以下图 所看到的:

如果A、B、C、D的D(x)如上图所看到的,当算法取值Sum(D(x))*random时,该值会以较大的概率落入D(x)较大的区间内,所以相应的点会以较大的概率被选中作为新的聚类中心。

k-means++代码:http://rosettacode.org/wiki/K-means%2B%2B_clustering

KNN(K-Nearest Neighbor)介绍

算法思路:假设一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。该方法在定类决策上仅仅根据最邻近的一个或者几个样本的类别来决定待分样本所属的类别。

看以下这幅图:

KNN的算法过程是是这种:

从上图中我们能够看到。图中的数据集是良好的数据。即都打好了label,一类是蓝色的正方形,一类是红色的三角形,那个绿色的圆形是我们待分类的数据。

假设K=3,那么离绿色点近期的有2个红色三角形和1个蓝色的正方形,这3个点投票。于是绿色的这个待分类点属于红色的三角形

假设K=5。那么离绿色点近期的有2个红色三角形和3个蓝色的正方形,这5个点投票,于是绿色的这个待分类点属于蓝色的正方形

我们能够看到。KNN本质是基于一种数据统计的方法!

事实上非常多机器学习算法也是基于数据统计的。

KNN是一种memory-based learning,也叫instance-based learning。属于lazy learning。即它没有明显的前期训练过程,而是程序開始执行时,把数据集载入到内存后,不须要进行训练,就能够開始分类了。

详细是每次来一个未知的样本点。就在附近找K个近期的点进行投票。

再举一个样例。Locally weighted regression (LWR)也是一种 memory-based 方法。例如以下图所看到的的数据集。

用不论什么一条直线来模拟这个数据集都是不行的,由于这个数据集看起来不像是一条直线。可是每一个局部范围内的数据点,能够觉得在一条直线上。每次来了一个位置样本x。我们在X轴上以该数据样本为中心,左右各找几个点,把这几个样本点进行线性回归。算出一条局部的直线。然后把位置样本x代入这条直线,就算出了相应的y。完毕了一次线性回归。也就是每次来一个数据点,都要训练一条局部直线,也即训练一次,就用一次。LWR和KNN非常相似,都是为位置数据量身定制,在局部进行训练。

KNN和K-Means的差别


KNN


K-Means

1.KNN是分类算法

2.监督学习

3.喂给它的数据集是带label的数据。已经是全然正确的数据

1.K-Means是聚类算法

2.非监督学习

3.喂给它的数据集是无label的数据。是杂乱无章的。经过聚类后才变得有点顺序。先无序。后有序

没有明显的前期训练过程,属于memory-based learning 有明显的前期训练过程
K的含义:来了一个样本x,要给它分类,即求出它的y。就从数据集中。在x附近找离它近期的K个数据点,这K个数据点,类别c占的个数最多,就把x的label设为c K的含义:K是人工固定好的数字,如果数据集合能够分为K个簇,因为是依靠人工定好,须要一点先验知识
相似点:都包括这种过程,给定一个点,在数据集中找离它近期的点。

即二者都用到了NN(Nears Neighbor)算法,一般用KD树来实现NN。

时间: 2024-08-02 17:29:54

Kmeans、Kmeans++和KNN算法比較的相关文章

k-Means和KNN算法简述

k-means 算法 k-means 算法接受输入量 k :然后将n个数据对象划分为 k个聚类以便使得所获得的聚类满足:同一聚类中的对象相似度较高:而不同聚类中的对象相似度较小.聚类相似度是利用各聚类中对象的均值所获得一个“中心对象”(引力中心)来进行计算的. k-means 算法的工作过程说明如下:首先从n个数据对象任意选择 k 个对象作为初始聚类中心:而对于所剩下其它对象,则根据它们与这些聚类中心的相似度(距离),分别将它们分配给与其最相似的(聚类中心所代表的)聚类:然后再计算每个所获新聚类

KNN 算法,以及与Kmeans的简单对比

KNN与Kmeans感觉没啥联系,但是名字挺像的,就拿来一起总结一下吧. 初学者的总结. KNN是监督学习,Kmeans是无监督学习. KNN用于分类,Kmeans用于聚类. 先说KNN: 对于KNN,有一批已经标注好label的训练样本,将这批样本的数据转换为向量表示,然后选择度量向量距离的方式.例如 欧式距离,曼哈顿距离,夹脚余弦等.对于这批样本记为W. 然后来一个待分类的样本S,选取W中距离样本S距离最近的K个样本.这K个样本中哪种类别的样本多,则该样本S的分类就是哪种. KNN的优缺点:

k-means和iosdata聚类算法在生活案例中的运用

引言:聚类是将数据分成类或者簇的过程,从而使同簇的对象之间具有很高的相似度,而不同的簇的对象相似度则存在差异.聚类技术是一种迭代重定位技术,在我们的生活中也得到了广泛的运用,比如:零件分组.数据评价.数据分析等很多方面:具体的比如对市场分析人员而言,聚类可以帮助市场分析人员从消费者数据库中分出不同的消费群体来,并且可以分析出每一类消费者的消费习惯等,从而帮助市场人员对销售做出更好的决策. 所以,本篇博客主要是对生活中的案例,运用k-means算法和isodata聚类算法进行数据评价和分析.本文是

ML(5):KNN算法

K近邻算法,即K-Nearest Neighbor algorithm,简称KNN算法,可以简单的理解为由那离自己最近的K个点来投票决定待分类数据归为哪一类.这个算法是机器学习里面一个比较经典的算法, 总体来说KNN算法是相对比较容易理解的算法.其中的K表示最接近自己的K个数据样本.KNN算法和K-Means算法不同的是,K-Means算法用来聚类,用来判断哪些东西是一个比较相近的类型,而KNN算法是用来做归类的,也就是说,有一个样本空间里的样本分成几个类型,然后,给定一个待分类的数据,通过计算

基于K-Nearest Neighbors[K-NN]算法的鸢尾花分类问题解决方案(For Python)

看了原理,总觉得需要用具体问题实现一下机器学习算法的模型,才算学习深刻.而写此博文的目的是,网上关于K-NN解决此问题的博文很多,但大都是调用Python高级库实现,尤其不利于初级学习者本人对模型的理解和工程实践能力的提升,也不利于Python初学者实现该模型. 本博文的特点: 一 全面性地总结K-NN模型的特征.用途 二  基于Python的内置模块,不调用任何第三方库实现 博文主要分为三部分: 基本模型(便于理清概念.回顾模型) 对待解决问题的重述 模型(算法)和评价(一来,以便了解模型特点

深入浅出KNN算法(一) 介绍篇

一.KNN算法概述 KNN可以说是最简单的分类算法之一,同时,它也是最常用的分类算法之一,注意KNN算法是有监督学习中的分类算法,它看起来和另一个机器学习算法Kmeans有点像(Kmeans是无监督学习算法),但却是有本质区别的.那么什么是KNN算法呢,接下来我们就来介绍介绍吧. 二.KNN算法介绍 KNN的全称是K Nearest Neighbors,意思是K个最近的邻居,从这个名字我们就能看出一些KNN算法的蛛丝马迹了.K个最近邻居,毫无疑问,K的取值肯定是至关重要的.那么最近的邻居又是怎么

什么是 kNN 算法?

学习 machine learning 的最低要求是什么?  我发觉要求可以很低,甚至初中程度已经可以.  首先要学习一点 Python 编程,譬如这两本小孩子用的书:[1][2]便可.   数学方面,只需要知道「两点间距离」的公式(中学的座标几何会读到). 这本书第二章介绍 kNN 算法,包括 Python 程序: 其他章节的数学要求可能不同,但我目的是想说明,很多实用的人工智能的原理,其实也很简单的. kNN 是什么?  For example: 开始时,所有 data points 的 l

机器学习经典算法具体解释及Python实现--K近邻(KNN)算法

(一)KNN依旧是一种监督学习算法 KNN(K Nearest Neighbors,K近邻 )算法是机器学习全部算法中理论最简单.最好理解的.KNN是一种基于实例的学习,通过计算新数据与训练数据特征值之间的距离,然后选取K(K>=1)个距离近期的邻居进行分类推断(投票法)或者回归.假设K=1.那么新数据被简单分配给其近邻的类.KNN算法算是监督学习还是无监督学习呢?首先来看一下监督学习和无监督学习的定义.对于监督学习.数据都有明白的label(分类针对离散分布,回归针对连续分布),依据机器学习产

Machine Learning In Action 第二章学习笔记: kNN算法

本文主要记录<Machine Learning In Action>中第二章的内容.书中以两个具体实例来介绍kNN(k nearest neighbors),分别是: 约会对象预测 手写数字识别 通过“约会对象”功能,基本能够了解到kNN算法的工作原理.“手写数字识别”与“约会对象预测”使用完全一样的算法代码,仅仅是数据集有变化. 约会对象预测 1 约会对象预测功能需求 主人公“张三”喜欢结交新朋友.“系统A”上面注册了很多类似于“张三”的用户,大家都想结交心朋友.“张三”最开始通过自己筛选的