机器学习PR:k近邻法分类
k近邻法是一种基本分类与回归方法。本章只讨论k近邻分类,回归方法将在随后专题中进行。
它可以进行多类分类,分类时根据在样本集合中其k个最近邻点的类别,通过多数表决等方式进行预测,因此不具有显式的学习过程。其本质是利用训练数据集对特征向量空间进行划分,并作为其分类的模型。k值选择、距离度量以及分类决策规则是其三个基本要素。
一、模型:
特征空间中,对每个训练点,距离该点比其他点更近的所有点组成一个区域(单元),每个训练点拥有一个区域(单元),所有训练点的区域(单元)构成对特征空间的一个划分。最近邻法将该点的类别作为所在单元中所有点的类标记。

二、距离度量
特征空间中两个点的距离反映了两个点的相似程度,可选距离包括Lp距离如欧式距离、曼哈顿距离,以及闵可夫斯基距离等。
三、k值选择
如果k值较小,以为着用较小的邻域中的训练样本进行预测,学习的近似误差会减小,但学习的估计误差会增大,预测结果对近邻点非常敏感。如果近邻点恰巧是噪声,预测就会出错,导致过拟合现象。如果k值较大,相当于用较大的领域中的训练样本进行预测,这样估计误差会减小,但学习的近似误差会增大。在实际应用中,通常采用交叉验证法来选取最有的k值。
四、分类决策规则
一般采用多数表决规则,等价于经验风险最小化。对给定的点x,如果涵盖*其最近邻的k个训练点构成的集合*的区域的类别是cj,那么误分类率是:

要是误分类率最小即经验风险最小,就要使得表决支持最多。
五、算法实现:kd树
k近邻算法要求快速对训练数据进行k近邻搜索,在特征空间维数大、训练样本容量大时尤为必要。k近邻算法的最简单实现方法是线性扫描,这时要计算输入实例与每一个训练实例的距离,显然当训练集很大时,计算是不可行的。为了提高搜索效率,可以考虑采用特殊的结构存储训练数据,以减少计算距离的次数,如kd树。
构造kd树:
kd树是一种对k维空间中的点进行存储以便于对其进行快速检索的树形数据结构。kd树是二叉树,表示对k维kj的一个划分。构造kd树相当于不断地用垂直于坐标轴的超平面将k维空间切分,构成一系列的k维超矩形区域,kd树的每一个结点对应于k维超矩形区域。


搜索kd树:


评价:
如果点是随机分布的,kd树搜索的平均计算复杂度为O(logN),N是训练样本数,kd树更适合于训练实例树远大于空间维数时的k近邻搜索,当空间维数接近训练实例树时,它的效率会迅速下降,几乎接近线性扫描。
【测试数据: sample.dat,test.dat】
【算法1: test.cpp, knn-kd.a, knn-kd.so】
【算法2: test.cpp, knn-kd.a, knn-kd.so】
机器学习PR:k近邻法分类的更多相关文章
- 机器学习中 K近邻法(knn)与k-means的区别
简介 K近邻法(knn)是一种基本的分类与回归方法.k-means是一种简单而有效的聚类方法.虽然两者用途不同.解决的问题不同,但是在算法上有很多相似性,于是将二者放在一起,这样能够更好地对比二者的异 ...
- K近邻法(KNN)原理小结
K近邻法(k-nearst neighbors,KNN)是一种很基本的机器学习方法了,在我们平常的生活中也会不自主的应用.比如,我们判断一个人的人品,只需要观察他来往最密切的几个人的人品好坏就可以得出 ...
- 学习笔记——k近邻法
对新的输入实例,在训练数据集中找到与该实例最邻近的\(k\)个实例,这\(k\)个实例的多数属于某个类,就把该输入实例分给这个类. \(k\) 近邻法(\(k\)-nearest neighbor, ...
- k近邻法
k近邻法(k nearest neighbor algorithm,k-NN)是机器学习中最基本的分类算法,在训练数据集中找到k个最近邻的实例,类别由这k个近邻中占最多的实例的类别来决定,当k=1时, ...
- scikit-learn K近邻法类库使用小结
在K近邻法(KNN)原理小结这篇文章,我们讨论了KNN的原理和优缺点,这里我们就从实践出发,对scikit-learn 中KNN相关的类库使用做一个小结.主要关注于类库调参时的一个经验总结. 1. s ...
- 机器学习之K近邻算法(KNN)
机器学习之K近邻算法(KNN) 标签: python 算法 KNN 机械学习 苛求真理的欲望让我想要了解算法的本质,于是我开始了机械学习的算法之旅 from numpy import * import ...
- 《统计学习方法》笔记三 k近邻法
本系列笔记内容参考来源为李航<统计学习方法> k近邻是一种基本分类与回归方法,书中只讨论分类情况.输入为实例的特征向量,输出为实例的类别.k值的选择.距离度量及分类决策规则是k近邻法的三个 ...
- k近邻法(kNN)
<统计学习方法>(第二版)第3章 3 分类问题中的k近邻法 k近邻法不具有显式的学习过程. 3.1 算法(k近邻法) 根据给定的距离度量,在训练集\(T\)中找出与\(x\)最邻近的\(k ...
- 统计学习方法与Python实现(二)——k近邻法
统计学习方法与Python实现(二)——k近邻法 iwehdio的博客园:https://www.cnblogs.com/iwehdio/ 1.定义 k近邻法假设给定一个训练数据集,其中的实例类别已定 ...
随机推荐
- JMeter Webservice测试计划
一.新建测试计划:HelloWorld测试计划 二.添加线程组 编辑线程组属性: 三.添加 SOAP/ XML-RPC 请求元素 四.填入url地址及请求报文 此处的请求报文,是用soapUI生成的, ...
- Lab_2_SysOps_VPC_Linux_v2.5
System Operations - Lab 2: Configuring a Virtual Private Cloud with Amazon VPC - Linux - 2.5 ======= ...
- HBase设计与开发性能优化(转)
本文主要是从HBase应用程序设计与开发的角度,总结几种常用的性能优化方法.有关HBase系统配置级别的优化,这里涉及的不多,这部分可以参考:淘宝Ken Wu同学的博客. 1. 表的设计 1.1 Pr ...
- coderforces 721b
题目描述: B. Passwords time limit per test 2 seconds memory limit per test 256 megabytes input standard ...
- 错误 1 error C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. d:\users\vs2013\le
#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>void main(){ int nu ...
- js 鼠标滚动到某屏时,加载那一屏的数据,仿京东首页楼层异步加载模式
js用处:在做商城时,首页图片太多,严重影响首页打开速度,所以我们需要用到异步加载楼层.js名称:鼠标滚动到某屏时,加载那一屏的数据,仿京东首页楼层模式js解释:1.用于商城的楼层内容异步加载,滚动条 ...
- VMware下安装Linux系统,ORACLE软件,DBCA建库
操作系统安装 在vmware下安装Linux (OEL5.6),用于数据库服务器 1.打开vmware,选择"创建新的虚拟机" 2.选择自定义安装 3.选择虚拟 ...
- 关于 Direct2D
http://msdn.microsoft.com/zh-cn/library/windows/desktop/dd370987(v=vs.85).aspx 本主题介绍 Direct2D,这是 Win ...
- 118、通过solid来定义不同边框的颜色,可以只定义一个边框的颜色
以下是设置按钮的右边框和底边框颜色为红色,边框大小为3dp,如下图: 在drawable新建一个 buttonstyle.xml的文件,内容如下: <?xml version="1.0 ...
- java 内存回收(GC)的方式
java内存的管理其实就是对象内存的管理,其中包括对象的分配和释放 对应程序员来说分配对象使用new关键字,而释放一个对象只需要让它等于null,让程序不能再访问这个对象,这时对象是不可达的,GC负责 ...