k近邻算法理论(一)

时间 :2014.07.05

地点:基地

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

一、简述

K近邻法(k-nearest neighbor,kNN)是一种基本分类与回归方法。k近邻的输入为实例的特征向量,对应特征空间中的点,输出为实例的类别。k近邻算法的基本思想是:给定训练数据集,实例类别已定,在对目标实例进行分类时,我们根据与目标实例k个最近邻居的训练实例的类别,通过多数表决的方式进行决定。也就是说,k近邻算法实际上是利用了训练数据集对特征向量空间进行了划分,并作为其分类的模型。这样k近邻算法涉及三个最基本的元素:

1.k值的选择,即取多大的k最适合于分类

2.距离的度量,即怎么样一个距离计算判断是否为目标实例的邻居

3.分类决策

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

二、k近邻算法

输入:给定训练数据集

其中 为输入实例的特征向量,为实例的类别,通过建模后,我们在输入一个实例特定向量x

输出:实例x所属的类别。

算法描述:

1.根据给定的距离度量,在训练集T中找出与x最近邻的k个点,涵盖这k个点的x的邻域我们记为:

2.在x的k个点邻域中,根据分类决策规则(一般为多数表决)决定x的类别y,即:

argmax是取使得表达式取值最大的参数值,在这里即得到对应的哪个类别值,这类别使得右边表达式取值最大。即表示:在x的领域里,邻域元素大部分属于某个类别时右式取值最大,然后我们把对应的类别(即参数取值)赋给结果。

k近邻算法在k=1时是最近邻算法,k近邻算法也没有显示的学习过程。

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

三、k近邻模型

3.1 k近邻的模型

k近邻法的建模,实际上就是对特征空间的划分,当训练集、距离度量、k值和分类决策规则都确定后,对于任何一个新的输入实例它所属的类型也就会被确定。于是整个过程就相当于将特征空间划分为一些子空间,我们的任务就是要确定子空间里的每个点所属的类。

在特征空间中(特征空间的维数为输入向量x的维数),对于每个训练实例点x,我们把距离该点比其他点更近的所有点组成一个单元。这样,每个实例点都拥有一个单元,所有训练实例点的单元构成了对特征空间的一个划分。

3.2 距离的度量

特征空间中两个实例点的距离是两个实例点相似程度的反映,k近邻模型的特征空间由n维实数向量空间张成,距离的度量也有很多方式,比如欧式距离Lp距离等等。

我们设特征空间X是n维实数向量空间张成,其中两个实例 为 ,这样,这两个实例的Lp距离定义如下:

p为大于或等于1的正整数,特别的

当p等于1时就是曼哈顿距离(街道距离)

当p等于2时就是欧式距离(直线距离)

当p为无穷大时就是向量各个维度坐标中距离最大的值,即

3.3k值的选择

k值的选择能对k近邻法的结果产生很大的影响,合理地选择k值的大小,对于预测结果的准确性能起到莫大的作用。

首先,如果k值较小,就相当于用较小的邻域中的训练实例进行预测,当然,这样学习的近似误差会减小,只有与输入实例相对更近的k个训练实例才会对预测结果起作用,缺点是学习的估计误差会增大,预测结果会对近邻的实例点非常敏感,即如果近邻点实例是个噪声点,然而这个噪声点对于分类所占的分量也就随着k值的减小而增大,于是容易在预测时出现误判。换而言之,随着k值的减小,整体模型更为复杂,容易发生过拟合。

其次,如果k值较大,就相当于用较大的邻域训练实例进行预测,这样就可以减少学习的估计误差,但缺点是学习的近似误差会增大,此时输入实例较远的训练实例也会对预测起到作用,使预测发生错误。k值的增大意味着整体的模型变得简单。一种极端案例就是k=N,此时无论输入的实例是什么,都只是简单的预测训练实例中最多的类,忽略了训练实例中大量的有用信息,模型过于简单。

实际应用中,k值取一个比较小的数值,常采用交叉验证的方法来选取一个最优的k值。

3.4分类决策规则

k近邻法中分类规则一般采用多数表决的方式,即由k个近邻总训练实例中多数类决定输入实例的类。多数表决规则等价于经验风险最小化。

k近邻算法理论(一)

时间: 2024-10-13 01:08:06

k近邻算法理论(一)的相关文章

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

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

K近邻算法

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

K近邻算法-KNN

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

02-16 k近邻算法

[TOC] 更新.更全的<机器学习>的更新网站,更有python.go.数据结构与算法.爬虫.人工智能教学等着你:https://www.cnblogs.com/nickchen121/ k近邻算法 k近邻算法(k-nearest neighbors,KNN)是一种基本的分类和回归方法,本文只探讨分类问题中的k近邻算法,回归问题通常是得出最近的$k$个实例的标记值,然后取这$k$实例标记值的平均数或中位数. k近邻算法经常被人们应用于生活当中,比如傅玄曾说过"近朱者赤近墨者黑&quo

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

通过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近邻算法

1 #encoding:utf-8 2 from numpy import * 3 import operator 4 import matplotlib 5 import matplotlib.pyplot as plt 6 7 from os import listdir 8 9 def makePhoto(returnMat,classLabelVector): #创建散点图 10 fig = plt.figure() 11 ax = fig.add_subplot(111) #例如参数为

基本分类方法——KNN(K近邻)算法

在这篇文章 http://www.cnblogs.com/charlesblc/p/6193867.html 讲SVM的过程中,提到了KNN算法.有点熟悉,上网一查,居然就是K近邻算法,机器学习的入门算法. 参考内容如下:http://www.cnblogs.com/charlesblc/p/6193867.html 1.kNN算法又称为k近邻分类(k-nearest neighbor classification)算法. 最简单平凡的分类器也许是那种死记硬背式的分类器,记住所有的训练数据,对于

使用K近邻算法实现手写体识别系统

目录 1. 应用介绍 1.1实验环境介绍 1.2应用背景介绍 2. 数据来源及预处理 2.1数据来源及格式 2.2数据预处理 3. 算法设计与实现 3.1手写体识别系统算法实现过程 3.2 K近邻算法实现 3.3手写体识别系统实现 3.4算法改进与优化 4. 系统运行过程与结果展示 1.应用介绍 1.1实验环境介绍 本次实验主要使用Python语言开发完成,Python的版本为2.7,并且使用numpy函数库做一些数值计算和处理. 1.2应用背景介绍 本次实验实现的是简易的手写体识别系统,即根据