机器学习——最邻近规则分类(K Nearest Neighbor)KNN算法
来源:互联网 发布:淘宝客服心得体会 编辑:程序博客网 时间:2024/05/06 14:17
1、简介
(1)Cover和Hart在1968年提出最初的临近算法
(2)邻近算法属于分类(classification)算法
(3)输入基于实例的学习(instance-based learing),懒惰学习(lazy learing)——处理训练集时并没有建造任何的模型,当对一个未知的实例进行归类时才进行归类
2、举例
如何将电影的例子模拟成一个广泛的模型?
对于每一个电影模拟成一个实例点,每个点的特征向量(在这里是二维的),可以是N维的,即:每个点都可以抽象成空间中具有多维的空间向量。
每个点所对应的标签分类的值是我们的目标。如下图:
3、算法详述
(1)步骤:
为了判断未知实例的类别,以所有已知类别的实例作为参照
选择参数K(对任意一个未知实例选取最近的K个已知实例进行归类,通常K的值不会太大,选取1,3,5,7等等的奇数,因为奇数更容易分辨胜负更容易分类,根据实验对参数进行优化)
计算未知实例与所有已知实例的距离
选择最近邻K个已知实例(选择最近邻K个距离的实例)
根据少数服从多数的投票法则(majority-voting),让未知实例归类为K个最近邻样本中最多数的类别
(2)细节
关于距离的衡量方法
欧氏距离Euclidean Distance(最常用)定义:对应点的每个维度求差后的平方求和再开平方。x=(x1,x2,...,xn) y=(y1,y2,...,yn)
其他的距离均衡:余弦值(cos)、相关度(correlation)、曼哈顿距离(Manhattan Diatance):得名于纽约曼哈顿街道,求点的距离看其走过多少多少街区。
(3)举例:要求出G点到每一个点的欧氏距离
#!/usr/bin/env python# -*- coding:utf-8 -*-# Author:ZhengzhengLiu#求欧氏距离import mathdef ComputeEuclideanDistance(x1,y1,x2,y2): d = math.sqrt(math.pow((x1-x2),2)+math.pow((y1-y2),2)) return dd_ag = ComputeEuclideanDistance(3,104,18,90)d_bg = ComputeEuclideanDistance(2,100,18,90)d_cg = ComputeEuclideanDistance(1,81,18,90)d_dg = ComputeEuclideanDistance(101,10,18,90)d_eg = ComputeEuclideanDistance(99,5,18,90)d_fg = ComputeEuclideanDistance(98,2,18,90)print("d_ag:",d_ag)print("d_bg:",d_bg)print("d_cg:",d_cg)print("d_dg:",d_dg)print("d_eg:",d_eg)print("d_fg:",d_fg)
运行结果:
d_ag: 20.518284528683193d_bg: 18.867962264113206d_cg: 19.235384061671343d_dg: 115.27792503337315d_eg: 117.41379816699569d_fg: 118.92854997854805比较以上的计算出的6个欧氏距离,选取最近的3个距离对应的点A,B,C三个点,由于这三个点都属于Romance类型,则未知数据G点根据最近邻规则分类(KNN)也属于Romance类型。
若选取的点中两个类型都存在,则遵从少数服从多数的原则,选取类别数目多的作为未知点的类别。
(4)KNN算法的优缺点举例
上图有两个不同类别的点分别为红色和蓝色,绿色的点为新的实例,问这个点的归类?
假设取K=1,只看距离绿色最近的一个点,应该和蓝色分类到一起;假设K=4,包含3个红色与1个蓝色,根据少数服从多数原则,应该归类为红色;假设K=9,应该归类为红色。
所以KNN算法对于K的选择非诚敏感,K=1时,不能够防止噪音,通常会增大K,以增加对噪音的健壮性。
(5)算法优缺点
算法优点:简单、易于理解、容易实现、通过对K的选择可具备丢噪音数据的健壮性
算法缺点:需要大量的空间储存已知的实例、算法的复杂度高(需要比较所有已知实例与要分类的实例)
当样本分布不均衡时,比如其中一类样本过大(实例数据量过多)占主导的时候,新的未知实例容易被归类为这个主导样本,
因为这类样本实例的数量过大,但这个新的未知实例实际并未接近目标样本。
(6)改进版本
考虑距离,根据距离加上权重。比如:1/d(d为距离)
- 机器学习——最邻近规则分类(K Nearest Neighbor)KNN算法
- 机器学习——最邻近规则分类(K Nearest Neighbor)KNN算法的应用
- 机器学习算法:kNN(K-Nearest Neighbor)最邻近规则分类
- 机器学习与深度学习(二) k最邻近分类算法 (K-Nearest Neighbor) KNN
- 最邻近规则分类(K-Nearest Neighbor)KNN算法
- 最邻近规则分类(K-Nearest Neighbor)KNN算法应用
- 4.1 最邻近规则分类(K-Nearest Neighbor)KNN算法
- 4.2 最邻近规则分类(K-Nearest Neighbor)KNN算法应用m
- kNN(K-Nearest Neighbor)最邻近规则分类
- kNN(K-Nearest Neighbor)最邻近规则分类
- kNN(K-Nearest Neighbor)最邻近规则分类
- kNN(K-Nearest Neighbor)最邻近规则分类
- kNN(K-Nearest Neighbor)最邻近规则分类
- kNN(K-Nearest Neighbor)最邻近规则分类
- kNN(K-Nearest Neighbor)最邻近规则分类
- kNN(K-Nearest Neighbor)最邻近规则分类
- kNN(K-Nearest Neighbor)最邻近规则分类
- kNN(K-Nearest Neighbor)最邻近规则分类
- Spring-boot学习笔记
- Android_横向滑动菜单, HorizontalScrollView,Fragment,Viewpager结合使用
- linux里关于vim的c/c++配置
- python tab补全
- curl模拟提交,绕过验证
- 机器学习——最邻近规则分类(K Nearest Neighbor)KNN算法
- vue-钩子/ 虚拟DOM / 模板语法
- 十七、2017好未来<删除字符>
- Android知识点整理(四)
- KL散度
- Python之协程
- 第四章 类和对象
- 第14届论道:新电视,新娱乐,新传媒,新生态—中国IPTV/OTT大屏生态产业峰会
- ffmpeg常用操作