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

KNN与Kmeans感觉没啥联系,但是名字挺像的,就拿来一起总结一下吧。

初学者的总结。

KNN是监督学习,Kmeans是无监督学习。

KNN用于分类,Kmeans用于聚类。

先说KNN:

对于KNN,有一批已经标注好label的训练样本,将这批样本的数据转换为向量表示,然后选择度量向量距离的方式。例如 欧式距离,曼哈顿距离,夹脚余弦等。对于这批样本记为W。

然后来一个待分类的样本S,选取W中距离样本S距离最近的K个样本。这K个样本中哪种类别的样本多,则该样本S的分类就是哪种。

KNN的优缺点:

KNN的优点:

1、对输入数据无假定,比如不会假设输入数据是服从正太分布的。

2、算法简单,直观,易于实现

3、对异常值不敏感

4、可以用于数值型数据,也可以用于离散型数据

KNN的缺点:

1、有说是计算复杂度高,不过这个是可以改进的,例如KD数,或者ball tree

2、严重依赖训练样本集,这个感觉没啥改进方法,只能是尽量获取更好的训练样本集。

3、距离度量方法,K值的选取都有比较大的影响。 KNN算法必须指定K值,K值选择不当则分类精度不能保证

4、特征作用相同 与决策树归纳方法和神经网络方法相比,传统最近邻分类器认为每个属性的 作用都是相同的(赋予相同权重)。样本的距离是根据样本的所有特征(属性)计 算的。在这些特征中,有些特征与分类是强相关的,有些特征与分类是弱相关的, 还有一些特征(可能是大部分)与分类不相关。这样,如果在计算相似度的时候, 按所有特征作用相同来计算样本相似度就会误导分类过程。

KNN的改进方向:

对于KNN分类算法的改进方法主要可以分为加快分类速度、对训练样本库的 维护、相似度的距离公式优化和K值确定四种类型。

目前我了解的只有加快分类速度,通过KD树,ball tree等。

机器学习实战 书中说 K不超过20

原文地址:https://www.cnblogs.com/earendil/p/8257053.html

时间: 2024-08-02 17:30:02

KNN 算法,以及与Kmeans的简单对比的相关文章

数据挖掘之KNN算法(C#实现)

在十大经典数据挖掘算法中,KNN算法算得上是最为简单的一种.该算法是一种惰性学习法(lazy learner),与决策树.朴素贝叶斯这些急切学习法(eager learner)有所区别.惰性学习法仅仅只是简单地存储训练元组,做一些少量工作,在真正进行分类或预测的时候才开始做更多的工作.有点像是平时不努力学习功课,到了考前才开始临时抱佛脚的感觉. KNN(k-nearest-neighbor)算法的思想是找到在输入新数据时,找到与该数据最接近的k个邻居,在这k个邻居中,找到出现次数最多的类别,对其

KNN算法原理及实现

1.KNN算法概述 kNN算法的核心思想是如果一个样本在特征空间中的k个最相邻的样本中的大多数属于某一个类别,则该样本也属于这个类别,并具有这个类别上样本的特性.该方法在确定分类决策上只依据最邻近的一个或者几个样本的类别来决定待分样本所属的类别. 2.KNN算法介绍 最简单最初级的分类器是将全部的训练数据所对应的类别都记录下来,当测试对象的属性和某个训练对象的属性完全匹配时,便可以对其进行分类.但是怎么可能所有测试对象都会找到与之完全匹配的训练对象呢,其次就是存在一个测试对象同时与多个训练对象匹

机器学习-KNN算法

原理 KNN算法,又叫K近邻算法.就是在训练集中数据和标签已知的情况下,输入测试数据,将测试数据的特征与训练集中对应的特征进行相互比较,找到训练集中与之最为相似的前K个数据,则该测试数据对应的类别就是K个数据中出现次数最多的那个分类,其算法的描述为: 1)计算测试数据与各个训练数据之间的距离: 2)按照距离的递增关系进行排序: 3)选取距离最小的K个点: 4)确定前K个点所在类别的出现频率: 5)返回前K个点中出现频率最高的类别作为测试数据的预测分类. 三要素: k值的选择 距离的度量(常见的距

k-Means和KNN算法简述

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

Kmeans、Kmeans++和KNN算法比較

K-Means介绍 K-means算法是聚类分析中使用最广泛的算法之中的一个.它把n个对象依据他们的属性分为k个聚类以便使得所获得的聚类满足:同一聚类中的对象相似度较高:而不同聚类中的对象相似度较小.其聚类过程能够用下图表示: 如图所看到的.数据样本用圆点表示,每一个簇的中心点用叉叉表示.(a)刚開始时是原始数据.杂乱无章,没有label,看起来都一样.都是绿色的. (b)如果数据集能够分为两类.令K=2.随机在坐标上选两个点,作为两个类的中心点.(c-f)演示了聚类的两种迭代.先划分,把每一个

kNN算法python实现和简单数字识别

kNN算法 算法优缺点: 优点:精度高.对异常值不敏感.无输入数据假定 缺点:时间复杂度和空间复杂度都很高 适用数据范围:数值型和标称型 算法的思路: KNN算法(全称K最近邻算法),算法的思想很简单,简单的说就是物以类聚,也就是说我们从一堆已知的训练集中找出k个与目标最靠近的,然后看他们中最多的分类是哪个,就以这个为依据分类. 函数解析: 库函数 tile() 如tile(A,n)就是将A重复n次 a = np.array([0, 1, 2]) np.tile(a, 2) array([0,

ML(5):KNN算法

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

KNN算法与Kd树

最近邻法和k-近邻法 下面图片中只有三种豆,有三个豆是未知的种类,如何判定他们的种类? 提供一种思路,即:未知的豆离哪种豆最近就认为未知豆和该豆是同一种类.由此,我们引出最近邻算法的定义:为了判定未知样本的类别,以全部训练样本作为代表点,计算未知样本与所有训练样本的距离,并以最近邻者的类别作为决策未知样本类别的唯一依据.但是,最近邻算法明显是存在缺陷的,比如下面的例子:有一个未知形状(图中绿色的圆点),如何判断它是什么形状? 显然,最近邻算法的缺陷--对噪声数据过于敏感,为了解决这个问题,我们可

《机器学习实战》读书笔记2:K-近邻(kNN)算法

声明:文章是读书笔记,所以必然有大部分内容出自<机器学习实战>.外加个人的理解,另外修改了部分代码,并添加了注释 1.什么是K-近邻算法? 简单地说,k-近邻算法采用测量不同特征值之间距离的方法进行分类.不恰当但是形象地可以表述为近朱者赤,近墨者黑.它有如下特点: 优点:精度高.对异常值不敏感.无数据输入假定 缺点:计算复杂度高.空间复杂度高 适用数据范围:数值型和标称型 2.K-近邻算法的工作原理: 存在一个样本数据集合,也称作训练样本集,并且样本集中的每个数据都存在标签,即我们知道样本集中