KNN

前言:

knn(K-Nearest Neighbor)中文名叫做k最近邻算法,这是有监督算法(自己下去百度一下什么是有监督,什么是无监督),分类算法中简单粗暴的一个。

分类方法是根据距离该点最近的k个邻居,从而得到该点所属的分类。

这个算法的核心思想是:如果一个样本在样本空间中的k个最相邻的样本中大多数属于某一个类别,则该样本也属于该类别。

算法详细流程是:

一:计算样本空间中存在的点与当前点的距离。

二: 按照距离递增的关系进行排列。

三:选取前k个点(k的值由自己选定)

四:确定前k个点所属的分类。

五:选择前k个点中分类出现次数最高的分类最为该点所属的分类。

这里,我们可以看出当前样本点所属的分类跟k的取值是有很大关系的,k的值过小,则会导致当前点的所属分类会出现偶然性(也就是所谓的噪音干扰,相比常识下也会认为k==1,是不正常的),整个模型也会变得复杂,容易变得过拟合(这个概念自己下去查询一下)。

相反的,k的取值过大也会导致模型变得简单,较远的点也会对分类的预测起到作用。

同时k的值尽可能取奇数,避免五五开的情况。

1378215-20180805232806939-472376897

正如上面的图所示,如果这里k==3,那么很明显绿点就属于三角形这个分类。

这个算法看起来确实简单,暴力,请用KNN实现手写数字识别。

(学有余力者: https://blog.csdn.net/zzz_cming/article/details/78938107

https://www.kaggle.com/mineshjethva/knn-from-scratch-in-python-at-97-1

当前点的取值除了跟k的取值有关之外,还跟距离的度量有关。

下面介绍几个距离计算公式:

欧氏距离:

这个是我们最为熟悉的一个距离计算公式:最常见的是空间中两点间的距离公式。
$$
d=\sqrt{(x_1-x_2)^2+(y_1-y_2)^2}
$$
n维的公式以此类推就好。

曼哈顿距离

$$
d=|x_1-x_2|+|y_1-y_2|
$$
n维以此类推

切比雪夫距离:

$$
d=max(|x_1-x_2|,|y_1-y_2|)
$$
如果有兴趣的话,可以观察一下,在国际象棋中,国王每走一步,移动的最小距离就是切比雪夫距离。

相关文章
评论
分享
  • pandas 简单介绍

    前面介绍了pandas如何读取文件,这次就介绍一下pandas的一些基本知识

    pandas 简单介绍
  • 线代简讲

    行列式 谈到线性代数时有两个基本概念:行列式,矩阵。 说到行列式我们应该明确一点:行列式表达的是一个具体的值,他的表现形式为$$\left| \begin{array}{c} a_{\text{1,}1},, a_{\text{...

    线代简讲
  • 三.损失函数

    我们在日常所说的模型训练的过程就是模型不断学习数据特征的过程,那么这个过程是如何进行的? 可以把一个初始化的模型视为一个刚出身的婴儿,对这个世界(数据)一无所知,于是他便开始学习自己接触的一切事务,从中掌握事物运行的规律。 而这个学习...

    三.损失函数
  • 二. 读数据

    如何读取数据前言人工智能本质上是数据科学,一切操作都是基于对数据的操作,因此,立志要学好ai的人就必须要学会数据的基本操作。 先来个简单的先介绍一种比较简单的读取文件方式,这种方式相对于下面的pandas读取来说速度更快的一点,结构自...

    二. 读数据
  • 一.决策树

    前言在具体了解机器学习之前,我们先了解一些基本的操作和概念。以下的内容如果你感觉简单,你可以自行选择后面内容学习,不过我还是建议每篇文章都大概浏览一遍。如果你不太理解,也别灰心,很多前面文章一带而过的东西则会在后面详细讲解。 决策树众...

    一.决策树
  • Hello World

    Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using ...

    Hello World