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距离(Ldistance)或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的缩写)又叫最近邻算法的更多相关文章

  1. K NEAREST NEIGHBOR 算法(knn)

    K Nearest Neighbor算法又叫KNN算法,这个算法是机器学习里面一个比较经典的算法, 总体来说KNN算法是相对比较容易理解的算法.其中的K表示最接近自己的K个数据样本.KNN算法和K-M ...

  2. K Nearest Neighbor 算法

    文章出处:http://coolshell.cn/articles/8052.html K Nearest Neighbor算法又叫KNN算法,这个算法是机器学习里面一个比较经典的算法, 总体来说KN ...

  3. K nearest neighbor cs229

    vectorized code 带来的好处. import numpy as np from sklearn.datasets import fetch_mldata import time impo ...

  4. K-Means和K Nearest Neighbor

    来自酷壳: http://coolshell.cn/articles/7779.html http://coolshell.cn/articles/8052.html

  5. 转载: scikit-learn学习之K最近邻算法(KNN)

    版权声明:<—— 本文为作者呕心沥血打造,若要转载,请注明出处@http://blog.csdn.net/gamer_gyt <—— 目录(?)[+] ================== ...

  6. Nearest neighbor graph | 近邻图

    最近在开发一套自己的单细胞分析方法,所以copy paste事业有所停顿. 实例: R eNetIt v0.1-1 data(ralu.site) # Saturated spatial graph ...

  7. [机器学习系列] k-近邻算法(K–nearest neighbors)

    C++ with Machine Learning -K–nearest neighbors 我本想写C++与人工智能,但是转念一想,人工智能范围太大了,我根本介绍不完也没能力介绍完,所以还是取了他的 ...

  8. 【cs231n】图像分类-Nearest Neighbor Classifier(最近邻分类器)【python3实现】

    [学习自CS231n课程] 转载请注明出处:http://www.cnblogs.com/GraceSkyer/p/8735908.html 图像分类: 一张图像的表示:长度.宽度.通道(3个颜色通道 ...

  9. 【算法】K最近邻算法(K-NEAREST NEIGHBOURS,KNN)

    K最近邻算法(k-nearest neighbours,KNN) 算法 对一个元素进行分类 查看它k个最近的邻居 在这些邻居中,哪个种类多,这个元素有更大概率是这个种类 使用 使用KNN来做两项基本工 ...

随机推荐

  1. python笔记之常用模块用法分析

    python笔记之常用模块用法分析 内置模块(不用import就可以直接使用) 常用内置函数 help(obj) 在线帮助, obj可是任何类型 callable(obj) 查看一个obj是不是可以像 ...

  2. Android 圆形按钮实现

    项目中用到的圆形按钮,做个半天,用sharp形式实现,样式代码如下: <Button android:id="@+id/btn_5" android:layout_width ...

  3. Unix/Linux环境C编程入门教程(33) 命令和鼠标管理用户和组

    Linux是一个多用户.多任务的实时操作系统,允许多人同时访问计算机, 并同时运行多个任务.UNIX系统具有稳定.高效.安全.方便.功能强大等诸多优点,自20世纪70年代开始便运行在许多大型和小型计算 ...

  4. fourinone分布式缓存研究和Redis分布式缓存研究

    最近在写一个天气数据推送的项目,准备用缓存来存储数据.下面分别介绍一下fourinone分布式缓存和Redis分布式缓存,然后对二者进行对比,以供大家参考. 1  fourinone分布式缓存特性 1 ...

  5. PB C/S轉B/S ODBC方式連接數據庫

    PB C/S轉B/S ODBC方式連接數據庫,DSN需要建為系統而不是使用者DSN,否則連不上數據庫.

  6. |,&,<<,>>运算符

    << 位移运算符(>>相反了) /* * 题目: 2 << 3 = 10000 = 16 * 解答: 2向左移动三位,就变成了10000 * 十进制 二进制 * 2 ...

  7. JavaWeb——文件上传和下载

    在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用 ...

  8. Android学习总结——SQLite

    SQLiteDatabase类: 一.使用sql语句操作数据库 SQLiteDatabase db = openOrCreateDatabase("database.db", MO ...

  9. poj 2446 (二分匹配)

    题意:除了所给的一些点外,问能不能用1*2的矩形覆盖所有的点,矩形间不能重叠. 思路:简单二分匹配,,,,,,, #include<stdio.h> #include<string. ...

  10. LR性能测试应用

    上半个月,由于工作和上课两边跑,几乎没有属于自己的时间去做自己想做的事,在没有加班的一天晚上,我突然冲动地跑到图书馆借了一本书<LR性能测试应用>——姜艳. 我总喜欢看那些陈旧的书,因为在 ...