KNN(k-nearest neighbor的缩写)又叫最近邻算法
KNN(k-nearest neighbor的缩写)又叫最近邻算法
前言
Hello ,everyone. 我是小花。大四毕业,留在学校有点事情,就在这里和大家吹吹我们的狐朋狗友算法---KNN算法,为什么叫狐朋狗友算法呢,在这里我先卖个关子,且听我慢慢道来。
一 KNN算法简介
KNN(k-nearest neighbor的缩写)又叫最近邻算法。是1968年由Cover和Hart提出的一种用于分类和回归的无母数统计方法。什么叫无母统计方法呢,这里作个补充:无母统计方法又称非参数统计学,是统计学的一个分支,适用于母群体情况未明,小样本,母群体分布不为常态也不易转换为常态。特点在于尽量减少或不修改其建立之模型,比较适合处理样本不大的数据。(我怎么感觉这么像韦小宝啊。。。哈哈,有点扯远了,你懂得)。
KNN的工作原理是:存在一个样本数据集合,也称为训练样本集,而且样本集中每个数据都存在标签,也就是我们知道样本集中每一个数据与所属分类对应关系。输入没有标签的新数据后,将新数据的每个特征与样本集中数据对应的特征进行比较,然后算法提取样本集中特征最相似数据(最近邻)的分类标签。怎样理解这句话呢,现在我们想,假如广场上有很多狗,这些狗都是一条母狗带一群小狗,各个品种的都有。每条狗都都知道自己的母亲是谁。但是有一条狗喝了不下心忘情水,不知道自己妈妈在哪了,如何找他的母亲呢。那我们就把这条狗的特征与那些小狗的特征进行对比。然后取最相似的狗,那么他的母亲就是这只单身狗的母亲~~我们可以想象,一只吉娃娃一定离一直泰迪很远吧。
|
K-最近邻分类算法 1:令k是最近邻数目,D是训练样本的集合 2 : for每个测试样例 z=(x’,y’)do 3:计算z 和每个样例(x,y)∈D之间的距离d(x’,x) 4:选择离z最近的K个训练样例的集合ZZD 5:y’=argmax∑(xi,yi)∈DZI(V=YI) 6:end for |
又扯远了,现在言归正传。我想看这个都是像我这样天天撸代码的“抠脚大汉”。那我们直接上伪代码!
啧啧,有了伪代码果然神清气爽。那我们就来说说伪代码吧。首先大家肯定会问第三行,如何求取z 和每个样例(x,y)∈D之间的距离d(x’,x)?他们之间的距离公式是什么,这个真就问对人了。我们的祖师爷们早就给我们想好了招式了,现在请把任督二脉打开,我要传功给你!
二 KNN注意点
2.1 KNN算法的距离度量
特征空间中两个实例点的距+离是两个实例点相似程度的反应。(一定要重点理解,可以拿单身狗的想想)。K近邻模型的特征空间一般是n 维实数向量空间RN.使用的距离是欧式距离,但也可以是其他距离,例如更加一般的LP距离(Lp distance)或Minkowski距离(Minkowski distance)
1. 欧氏距离,最常见的两点之间或多点之间的距离表示法,又称之为欧几里得度量,它定义于欧几里得空间中,如点 x = (x1,...,xn) 和 y = (y1,...,yn) 之间的距离为:
2.曼哈顿距离, 曼哈顿距离依赖坐标系统的转度,而非系统在坐标上的平移或映射。
2.3 KNN算法中K的奥妙
现在有很多小伙伴要问我了,你说这个是狐朋狗友算法,你怎么解释? 中国有句古话叫观其友而知其人,就是说啊,我看你身边的朋友我就知道你是什么样的人,就像我周围的同学大部分是比较傻叉的,余下的我还要解释么?。。。又自黑了。。。。估计有些朋友要怼我了,你罗里吧嗦半天,K是什么意思?其实K 就是我们最近的K个朋友,比如我最近的朋友是一个人,他是流氓,那么我是流氓的可能性是不是很大?假如K是四个,他们三个中有三个流氓,一个人渣。Vote 3:1 。好,小花是流氓,判定正确。。。下面看图:

对于未知类黑爱心,他可能是五角星,也可能是菱形。当K=3的时候,菱形PK 五角星=2:1 ,菱形胜利,老婆归我(黑色星)。当K=7时,菱形PK五角星=5:2,五角星胜利,老婆归我。这个怎么像黑帮斗殴,人多力量大啊!对了,就是人多力量大,识时务者为俊杰。
综上所述,K的选择很大程度决定了算法是否能正确分类。这也是KNN欠缺的地方。
2.3 对于KNN的补充
2.3.1 权重化
很多聪明的小伙伴会问,你的距离公式是不是有点问题?假如我现在给百合网做一个推荐系统,根据的分高低为你推荐一个你们会觉得合适的人。对象特性(身高,体重,相貌,学历,收入,爱好),假如你是一个颜控,你对身高体重外貌比较在意,对收入及学历不是太在乎,我想这也是我们在现实相亲中经常遇到的问题。那如果我们按照上面的欧氏距离公式去求,似乎收入和学历对分数的影响和相貌,身高体重一样大啊。那么为了解决这个问题,我们引入了权重的概念,比如当我们进入系统,系统会可以让我们输入:(身高,体重,相貌,学历,收入,爱好)的权重wT(w1, w2, w3, w4,w5, w6),你认为重要你就输入大一点,你认为不重要,你就输入小一定,当然这些权重最好都是小于1 的。改变的公式如下:
2.3.2归一化
现在带入公式发现,假如身高180和收入8000,即使收入的权重比较小,但是对距离的影响还是很大。在处理这种不同权值范围的特征值时,我们通常采用的方法是将数值归一化,如将取值范围处理为0到1或者-1到1之间。下面的公式可以将任意取值范围的特征值转化为0到1区间内的值:
newValue=(oldValue – min)/(max – min)
最后说一句,小花的算法讲解,算法1一般先介绍基本理论,算法二开始都是这个算法在具体生活中的实例,总之,跟着小花一步一步学吧,毕竟我也刚接触,有很多理解不到位的地方还请大家指出来,一起去思考。哈哈。
KNN(k-nearest neighbor的缩写)又叫最近邻算法的更多相关文章
- K NEAREST NEIGHBOR 算法(knn)
K Nearest Neighbor算法又叫KNN算法,这个算法是机器学习里面一个比较经典的算法, 总体来说KNN算法是相对比较容易理解的算法.其中的K表示最接近自己的K个数据样本.KNN算法和K-M ...
- K Nearest Neighbor 算法
文章出处:http://coolshell.cn/articles/8052.html K Nearest Neighbor算法又叫KNN算法,这个算法是机器学习里面一个比较经典的算法, 总体来说KN ...
- K nearest neighbor cs229
vectorized code 带来的好处. import numpy as np from sklearn.datasets import fetch_mldata import time impo ...
- K-Means和K Nearest Neighbor
来自酷壳: http://coolshell.cn/articles/7779.html http://coolshell.cn/articles/8052.html
- 转载: scikit-learn学习之K最近邻算法(KNN)
版权声明:<—— 本文为作者呕心沥血打造,若要转载,请注明出处@http://blog.csdn.net/gamer_gyt <—— 目录(?)[+] ================== ...
- Nearest neighbor graph | 近邻图
最近在开发一套自己的单细胞分析方法,所以copy paste事业有所停顿. 实例: R eNetIt v0.1-1 data(ralu.site) # Saturated spatial graph ...
- [机器学习系列] k-近邻算法(K–nearest neighbors)
C++ with Machine Learning -K–nearest neighbors 我本想写C++与人工智能,但是转念一想,人工智能范围太大了,我根本介绍不完也没能力介绍完,所以还是取了他的 ...
- 【cs231n】图像分类-Nearest Neighbor Classifier(最近邻分类器)【python3实现】
[学习自CS231n课程] 转载请注明出处:http://www.cnblogs.com/GraceSkyer/p/8735908.html 图像分类: 一张图像的表示:长度.宽度.通道(3个颜色通道 ...
- 【算法】K最近邻算法(K-NEAREST NEIGHBOURS,KNN)
K最近邻算法(k-nearest neighbours,KNN) 算法 对一个元素进行分类 查看它k个最近的邻居 在这些邻居中,哪个种类多,这个元素有更大概率是这个种类 使用 使用KNN来做两项基本工 ...
随机推荐
- GIT 实验
服务器环境:linux + git + gitolite(gitolite是什么,说白了就是安装后建了一个仓库,管理员用户可以通过修改并上传配置文件实现GIT仓库及其权限的管理.提醒:别用那个gito ...
- python运维开发(十七)----jQuery续(示例)web框架django
内容目录: jQuery示例 前端插件 web框架 Django框架 jQuery示例 dom事件绑定,dom绑定在form表单提交按钮地方都会绑定一个onclick事件,所有查看网站的人都能看到代码 ...
- haproxy之配置文件解析
功能--> 提供高可用/负载均衡/基于tcp和http应用的代理;支持虚拟主机,特别适用于负载特大的web站点. 配置文件解析--> #配置文件-->开启/proc/net/ipv4 ...
- ansilbe 入门001、ansible的介绍
概述: ansible 作为一个配置管理工具.首先我们要“告诉”它管理的是那几台机器啊:而这个信息就在要ansible 的配置文件中体现了.默认情况下ansible的配置文件保存在 /etc/ansi ...
- C#安装程序制作让安装后的程序开机自动运行
1.创建安装项目后要在自己的解决方案是添加一个新的类库项目(ClassLibrary1),并在新类库中添加一下安装程序类(Installer1),在Installer1类中添加如下代码: string ...
- VC6.0 显示代码行号和WndTab插件
VC6.0是一款比较稳定的功能强大的IDE,目前也有很多人在使用.但美中不足的是它不能像其他IDE那样显示行号. 这里需要用到一个插件VC6LineNumberAddin,下载地址:http://fi ...
- zhihu spark集群,书籍,论文
spark集群中的节点可以只处理自身独立数据库里的数据,然后汇总吗? 修改 我将spark搭建在两台机器上,其中一台既是master又是slave,另一台是slave,两台机器上均装有独立的mongo ...
- UESTC_Infected Land 2015 UESTC Training for Search Algorithm & String<Problem G>
G - Infected Land Time Limit: 6000/3000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others ...
- Kth Largest Element in an Array 解答
Question Find the kth largest element in an unsorted array. Note that it is the kth largest element ...
- 有序线性搜索(Sorted/Ordered Linear Search)
如果数组元素已经排过序(升序),那我们搜索某个元素就不必遍历整个数组了.在下面给出的算法代码中,到任何一点,假设当前的arr[i]值大于搜索的值data,就可以停止搜索了. #include<s ...