【udacity】机器学习-knn最近邻算法
Evernote Export
1.基于实例的学习介绍
不同级别的学习,去除所有的数据点(xi,yi),然后放入一个数据库中,下次直接提取数据
但是这样的实现方法将不能进行泛化,这种方式只能简单的进行数据提取,它也会存储很多的噪音
3.最近邻算法
KNN算法原理就是查找未知点的最近已知点,然后进行归类,但是当遇到最近邻都相差不多的时候,就需要更大的背景去识别
k的意思是邻居的数量
4.KNN算法(伪代码)
Training Data--> D={xi,yi} #训练数据(输入的集合)
Diastance Metric--> d(q,x) #距离度量的方式
Number of Neighbors--> K #邻居的数量(已知)
Query Point--> q (未知点)
-NN = {i:d(qi,xi) k smallest} (由距离查询点最近的所有元素组成的)
-return
-classification
-regression
5.KNN算法的时间统计
Running Time | Space | |
---|---|---|
1-NN learning | 1 | n |
1-NN query | logn | 1 |
k-NN learning | 1 | n |
k-NN query | logn+k | 1 |
linear regression learning | n | 1 |
linear regression query | 1 | 1 |
我们提出了k近邻算法,算法的核心思想是,即是给定一个训练数据集,对新的输入实例,在训练数据集中找到与该实例最邻近的K个实例,这K个实例的多数属于某个类,就把该输入实例分类到这个类中。更通俗说一遍算法的过程,来了一个新的输入实例,我们算出该实例与每一个训练点的距离(这里的复杂度为0(n)比较大,所以引出了下文的kd树等结构),然后找到前k个,这k个哪个类别数最多,我们就判断新的输入实例就是哪类!knn算法是一种懒惰算法
6.KNN偏差
KNN概述
k-近邻算法(K-Nearest Neighbour alorithm),又称为KNN算法,是数据挖掘技术中原理最简单的算法。
**KNN的工作原理:**给定一个已知标签类别的训练数据集,输入没有标签的新数据后,在训练数据集中找到与新数据最近邻的K个实例,如果这K个实例的多数属于某个类别,那么新数据就属于这个类别。
**可以简单理解为:**由哪些离X最近的k个点来投票决定x归为哪个类
K近邻算法就是用两点之间的距离来计算
∣AB∣=(x1−x2)2+(y1−y2)2
当多个特征扩展到N维空间的时候,一般采用欧式距离来计算
dist(x,y)=(x1−y1)2+(x2−y2)2+...+(xn−yn)2=i=1∑n(xi−yi)2
K近邻算法的计算步骤
1.计算已知类别数据集中的点与当前点之间的距离
2.按照距离递增次序排序
3.选取与当前点距离最小的k个点
4.确定前k个点在类别的出现频率
5.返回前k个点出现频率最高的类别作为当前点的预测类别
KNN分类器
分类器并不会百分百的得到正确的结果,我们使用很多种方法来验证分类器的准确率,此外,分类器的性能野兽很多因素的影响,比如k的取值就在很大程度上影响了分类器的预测结果,还有分类器的设置、原始数据集等。为了测试分类器的效果,我们把原始的数据集分为两个部分,一部分用来训练算法(称为训练集),一部分用来测试算法的准确率(称为测试集)。同时,k-近邻算法没有进行数据的训练,直接使用的是未知的数据和已知数据进行比较。
也就是说knn分类器是懒惰算法
小结
k-近邻 | |
---|---|
算法功能 | 分类(核心),回归 |
算法类型 | 有监督学习,惰性学习,距离类模型 |
数据输入 | 包含数据标签y,且特征空间中至少包含k个训练样本(k>=1);特征空间中各个特征的量纲需统一,若不统一则需要进行归一化处理;自定义的超参数k(k>=1) |
模型输出 | 在KNN分类中,输出是标签中的某个类别;在KNN回归中,输出是对象的属性值,该值是距离输入的数据最近的k个训练样本标签的平均值 |
posted on 2019-01-11 11:02 pandaboy1123 阅读(233) 评论(0) 编辑 收藏 举报