k近邻(k-NearestNeighbor)算法简称kNN。基本思想简单直接,对于一个需要分类的数据实例x,计算x与所有已知类别的样本点在特征空间中的距离。取与x距离最近的k个样本点,统计这些样本点所属占比最大的类别,作为x的分类结果。下图中与绿色点最近的3个点中,2个属于红色类别,则认为x属于红色的类。然而当k=5时,5个最近的点中有3个是蓝色,则认为绿色点属于蓝色类别。

假如在美国某个小镇上,一户人家最近的二十户邻居里面有十四户华裔,三户非裔,三户美国本土居民。我让你猜这户人家是什么人,我想你大概会猜是中国移民。其实这跟k近邻的思想一致,这里k=20。

下面的实例来自《机器学习实战》。

一个女性收集了约会网站中的男人的三个属性作为特征:每年飞行里程、每月打游戏时间的占比,每周消费冰淇淋公升数。她将曾经约会的男人打上标签:不喜欢、一般魅力,极具魅力。为了决定是否跟一个新的男人约会,她想在见面前判断这个男人是不是自己喜欢的类型。下面来两幅图分别是{每月打游戏时间的占比,消费冰淇淋公升数}、{每月打游戏时间的占比,每年飞行里程}的二维图形展示。可以看出使用{每月打游戏时间的占比,每年飞行里程}可以较好地将男人分成三类。

生成图形的代码:

datingDataMat, datingLabels = kNN.file2matrix("datingTestSet2.txt")

#print(datingDataMat)
#print(datingLabels[0:20]) fig = plt.figure()
ax = fig.add_subplot(111)
ax.scatter(datingDataMat[:,0],datingDataMat[:,1], 20.0*array(datingLabels), 15.0*array(datingLabels))
plt.xlabel(u"飞行里程/年", fontproperties='SimHei')
plt.ylabel(u"玩游戏时间百分比", fontproperties='SimHei')
plt.show()

kNN算法流程图:

值得注意的是在最开始的时候要将个特征值进行归一化,否则在计算样本点与待分类点的距离时将由于各个特征的数值的相对大小不同而导致错误。

下面的代码选择datingTestSet2.txt中的一半作为已标记样本集合,对另外一半的样本进行分类。设置k=3,分类正确率为92%。设置k=10时,分类正确率几乎不变,观察{每月打游戏时间的占比,每年飞行里程}的散点图,我认为是处在分类边界上的点以及已标记样本的数量太小导致了分类的正确率无法进一步提升。若使用95%的样本作为已标记样本,对另外的5%的样本类别进行预测,准确率为98%。

#kNN文件参考《机器学习实战》的源码
#源码以及数据集下载链接:http://download.csdn.net/detail/u012491566/6474803
normMat, ranges, minVals = kNN.autoNorm(datingDataMat)
#print('normMat: ', normMat)
#print('ranges: ', ranges)
#print('minVals', minVals) length = normMat.shape[0]
ratio =0.95
numSample = int(ratio*length)
numtest = length - numSample errCnt =0
for i in range(numtest):
val = kNN.classify0(normMat[i,:], normMat[numtest:length,:], datingLabels[numtest:length], 10)
if(val != datingLabels[i]):
errCnt +=1 precision = 1-errCnt/numtest print('precision of prediction:', precision)

kNN算法分析:

kNN算法简单有效,对异常数据不敏感,无数据输入假定。且可以处理分类以及回归问题(对于回归问题,可以将最近的k个点的均值作为该点的预测值)。然而,kNN算法需要保存已知样本集,空间复杂度高;由于需要对每个待分类点计算与所有已知样本点的距离,时间复杂度高。不仅如此,k近邻算法只注重分类点在特征空间中位置信息,并没有去真正理解数据的内在含义。

k近邻的更多相关文章

  1. K近邻法(KNN)原理小结

    K近邻法(k-nearst neighbors,KNN)是一种很基本的机器学习方法了,在我们平常的生活中也会不自主的应用.比如,我们判断一个人的人品,只需要观察他来往最密切的几个人的人品好坏就可以得出 ...

  2. k近邻算法(knn)的c语言实现

    最近在看knn算法,顺便敲敲代码. knn属于数据挖掘的分类算法.基本思想是在距离空间里,如果一个样本的最接近的k个邻居里,绝大多数属于某个类别,则该样本也属于这个类别.俗话叫,"随大流&q ...

  3. 机器学习实战笔记--k近邻算法

    #encoding:utf-8 from numpy import * import operator import matplotlib import matplotlib.pyplot as pl ...

  4. k近邻(KNN)复习总结

    摘要: 1.算法概述 2.算法推导 3.算法特性及优缺点 4.注意事项 5.实现和具体例子 6.适用场合内容: 1.算法概述 K近邻算法是一种基本分类和回归方法:分类时,根据其K个最近邻的训练实例的类 ...

  5. scikit-learn K近邻法类库使用小结

    在K近邻法(KNN)原理小结这篇文章,我们讨论了KNN的原理和优缺点,这里我们就从实践出发,对scikit-learn 中KNN相关的类库使用做一个小结.主要关注于类库调参时的一个经验总结. 1. s ...

  6. 学习笔记——k近邻法

    对新的输入实例,在训练数据集中找到与该实例最邻近的\(k\)个实例,这\(k\)个实例的多数属于某个类,就把该输入实例分给这个类. \(k\) 近邻法(\(k\)-nearest neighbor, ...

  7. K近邻分类法

    K近邻法 K近邻法:假定存在已标记的训练数据集,分类时对新的实例根据其K个最近邻的训练实例的类别,通过多数表决等分类决策规则进行预测. k近邻不具有显示学习的过程,是“懒惰学习”(lazy learn ...

  8. 机器学习PR:k近邻法分类

    k近邻法是一种基本分类与回归方法.本章只讨论k近邻分类,回归方法将在随后专题中进行. 它可以进行多类分类,分类时根据在样本集合中其k个最近邻点的类别,通过多数表决等方式进行预测,因此不具有显式的学习过 ...

  9. k近邻算法的Java实现

    k近邻算法是机器学习算法中最简单的算法之一,工作原理是:存在一个样本数据集合,即训练样本集,并且样本集中的每个数据都存在标签,即我们知道样本集中每一数据和所属分类的对应关系.输入没有标签的新数据之后, ...

随机推荐

  1. git-----------------git:如何让git识别我修改了文件夹名字和文件名字的大小写问题。

    修改每个项目里面的隐藏的.git文件里面的config文件.将箭头指的原本是true改成false.

  2. kali driftnet

    语法 : driftnet   [options]   [filter code] 主要参数: -b               捕获到新的图片时发出嘟嘟声 -i  interface     选择监 ...

  3. 返回值是JSON的阿贾克斯方法

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  4. fopen,fread和fwrite

    在最近的编程练习和写东西的过程中,常常用到了fopen和fread两个函数来读取本地文件.之前使用这两个函数时,一直没有出现过什么问题.也是因为没有出现问题,对这两个函数的用法的一些细节没有很了解,所 ...

  5. REM 布局

    1.rem是什么? rem(font size of the root element)是指相对于根元素的字体大小的单位 2.为什么web app要使用rem? 实现强大的屏幕适配布局(淘宝,腾讯,网 ...

  6. Access restriction: The type QName is not accessible due to restriction on required library

    There's another solution that also works. I found it on this forum: Go to the Build Path settings in ...

  7. Linux Bond的原理及其不足

    http://www.tektea.com/archives/1969.html. 在企业及电信Linux服务器环境上,网络配置都会使用Bonding技术做网口硬件层面的冗余,防止单个网口应用的单点故 ...

  8. paper 124:【转载】无监督特征学习——Unsupervised feature learning and deep learning

    来源:http://blog.csdn.net/abcjennifer/article/details/7804962 无监督学习近年来很热,先后应用于computer vision, audio c ...

  9. 论文阅读(Xiang Bai——【CVPR2015】Symmetry-Based Text Line Detection in Natural Scenes)

    Xiang Bai--[CVPR2015]Symmetry-Based Text Line Detection in Natural Scenes 目录 作者和相关链接 方法概括 创新点和贡献 方法细 ...

  10. 安装Mysq方法

    前言: 此方法只能借鉴,如果网友安装失败,后果自负. 借鉴的书籍<跟老男孩学Linux运维 Web集群实战> 文章所使用的Mysql:https://yunpan.cn/Oc6RkgKRF ...